一個集合(Collection)就是一個存儲一組對象的容器,我們將這些對象稱之爲元素。Java支持三種類型的集合:規則集(Set)、線性表(List)和圖(Map)。Set的實例存儲一組互不相同的元素,List的實例存儲一組順序排列的元素,Map實例存儲一組對象。Java集合框架的結構如下圖所示:
Java集合的設計使用了接口、抽象類和具體類。接口定義了架構,抽象類提供了接口一部分功能的實現,具體類通過具體的數據結構實現了整個接口。
1.根接口Collection
public class MyCollection implements Collection {
// 返回該集合中元素的個數
@Override
public int size() {
return 0;
}
// 判斷集合是否沒有元素
@Override
public boolean isEmpty() {
return false;
}
// 集合包含元素o,則返回true
@Override
public boolean contains(Object o) {
return false;
}
// 返回集合的迭代探子
@Override
public Iterator iterator() {
return null;
}
// 返回集合元素的對象數組
@Override
public Object[] toArray() {
return null;
}
// 返回集合元素的對象數組
@Override
public Object[] toArray(Object[] a) {
return null;
}
// 將元素e添加進集合
@Override
public boolean add(Object e) {
return false;
}
// 刪除集合中的元素o
@Override
public boolean remove(Object o) {
return false;
}
// 判斷集合c中的元素是否都在該集合中
@Override
public boolean containsAll(Collection c) {
return false;
}
// 將集合c中的所有元素添加進該集合
@Override
public boolean addAll(Collection c) {
return false;
}
// 移除集合c中的所有元素
@Override
public boolean removeAll(Collection c) {
return false;
}
// 返回該集合與c的交集
@Override
public boolean retainAll(Collection c) {
return false;
}
// 刪除集合中的所有元素
@Override
public void clear() {
}
}
2.規則集Set
3.線性表List
public abstract class MyList implements List {
// 返回該線性表中指定下標處的元素
@Override
public Object get(int index) {
return null;
}
// 設置指定下標的元素
@Override
public Object set(int index, Object element) {
return null;
}
// 向指定下標位置添加一個元素
@Override
public void add(int index, Object element) {
}
// 在指定下標位置將集合c中的所有元素添加到該線性表
@Override
public boolean addAll(int index, Collection c) {
return false;
}
// 刪除指定下標的元素
@Override
public Object remove(int index) {
return null;
}
// 返回與指定元素匹配的第一個元素的下標
@Override
public int indexOf(Object o) {
return 0;
}
// 返回與指定元素匹配的最後一個元素的下標
@Override
public int lastIndexOf(Object o) {
return 0;
}
// 返回該線性表所有元素的迭代探子
@Override
public ListIterator listIterator() {
return null;
}
// 返回該線性表中下標從index開始的元素的迭代探子
@Override
public ListIterator listIterator(int index) {
return null;
}
// 返回下標從fromIndex到toIndex的元素構成的子線性表
@Override
public List subList(int fromIndex, int toIndex) {
return null;
}
}
3.1ArrayList與LinkedList
- ArrayList將元素存儲在一個數組中,該數組是動態創建的。超過數組的容量時,則會創建一個更大的數組並將當前數組中的所有元素複製到新的數組中。
- LinkedList將元素存放在鏈表中。
- 如果只是簡單的查詢操作,ArrayList效率較高,如果要在線性表的任意位置上插入或者刪除數據,應該使用LinkedList。
4.向量類Vector
public class MyVector {
public static void main(String[] args) {
Vector<Object> vector = new Vector<Object>();
vector.capacity(); // 返回vector的容量
vector.addElement("1"); // 向vector中添加元素
Object o = vector.elementAt(0); // 返回指定下標的元素
Enumeration<Object> enumer = vector.elements(); // 返回該向量的枚舉值
vector.ensureCapacity(10); // 增加向量的容量
vector.firstElement(); // 返回向量的第一個元素
vector.lastElement(); // 返回向量的最後一個元素
vector.insertElementAt("ok", 2); // 向指定位置插入元素
vector.removeAllElements(); // 刪除所有元素
vector.trimToSize(); // 將向量的容量縮減爲向量的大小
// 省略......
}
}
5.棧類Stack
public class MyStack extends Vector<Object> {
public static void main(String[] args) {
Stack<Object> stack = new Stack<Object>();
stack.empty(); // 判斷是否爲空棧
stack.peek(); // 返回棧頂元素
stack.pop(); // 返回並刪除棧頂元素
stack.push(1); // 向棧頂壓入新元素
stack.search(1); // 返回指定元素在棧中的位置
}
}
6.圖Map
public class MyMap implements Map<Object, Object> {
// 返回該圖中映像的個數
@Override
public int size() {
return 0;
}
// 如果該圖沒有映像,返回true
@Override
public boolean isEmpty() {
return false;
}
// map中是否包含該建
@Override
public boolean containsKey(Object key) {
return false;
}
// map中是否包含該值
@Override
public boolean containsValue(Object value) {
return false;
}
// 返回該圖中指定鍵對應的值
@Override
public Object get(Object key) {
return null;
}
// 給該圖添加一個映像
@Override
public Object put(Object key, Object value) {
return null;
}
// 刪除指定鍵的映像
@Override
public Object remove(Object key) {
return null;
}
// 將圖m中的映像全部添加到該圖中
@Override
public void putAll(Map<? extends Object, ? extends Object> m) {
}
// 從該圖中刪除所有的映像
@Override
public void clear() {
}
// 返回該圖中鍵構成的規則集
@Override
public Set<Object> keySet() {
return null;
}
// 返回由該圖中的值構成的集合
@Override
public Collection<Object> values() {
return null;
}
// 返回該圖中實體構成的規則集
@Override
public Set<java.util.Map.Entry<Object, Object>> entrySet() {
return null;
}
}
散列圖 HashMap 、鏈式散列圖 LinkedHashMap 和樹形圖 TreeMap 三種圖是實現Map接口的具體類。對於定位查找一個值、插入一個映像或刪除一個映像, HashMap 類的效率是很高的。在HashMap中元素是沒有順序的,但是在LinkedHashMap中,元素既可以按照它們插入的順序訪問,也可以按照他們最後一次訪問的順序從早到晚排列。TreeMap可以很好的按照鍵來順序遍歷圖。7.迭代器Iterator
public class MyIterator {
public static void main(String[] args) {
List list = new ArrayList<Object>();
Iterator<Object> it = list.iterator(); //遍歷ArrayList
while(it.hasNext()){
it.next();
}
}
}