Collection 介面沒有直接實現類。Collection 實現類(通常通過其中一個子介面間接實現 Collection )可以存放多個 Object 類型的元素。有些 Collection 介面的實現類可以存放重覆的元素,有些則不可以。有些 Collection 介面的實現類是有序的,有些是無... ...
Collection 介面及其常用方法
Collection 介面的特點
Collection
介面沒有直接實現類,提供了更具體的子介面(如Set
和List
)的實現。Collection
實現類(通常通過其中一個子介面間接實現Collection
)可以存放多個 Object 類型的元素。有些Collection
介面的實現類可以存放重覆的元素(List
),有些則不可以(Set
)。有些Collection
介面的實現類是有序的(List
),有些是無序的(Set
)。
所有通用的Collection
實現類都會提供兩個"標準"構造方法:一個無參構造方法,來創建一個空的集合;以及一個帶有單個Collection
類型參數的構造方法,創建一個與參數集合具有相同元素的新集合。實際上,後一種構造方法可以複製任何集合,生成一個與參數集合元素相同的所需類型的集合。
public class CollectionConstructors() {
public static void main(String[] args) {
ArrayList list = new ArrayList();
System.out.println("list = " + list); // list = []
list.add(1);
list.add(2);
list.add(3);
System.out.println("list = " + list); // list = [1, 2, 3]
Vector<Object> vector = new Vector<>(list);
System.out.println("vector = " + vector); // vector = [1, 2, 3]
}
}
Collection 介面常用方法
下麵的代碼以其間接實現類ArrayList
演示Collection
介面的常用方法。
public class CollectionMethod() {
public static void main(String[] args) {
Collection collection = new ArrayList<>();
// boolean add(E e)
// 給集合中添加指定的元素,添加成功則返回 true。如果此集合不允許重覆元素並且已經包含了指定的元素,
// 則返回 false。支持此操作的實現類可能會對添加到該集合中的元素進行限制。如果一個集合拒絕添加某個
// 特定元素的原因不是因為集合已經包含該元素,會拋出一個異常(而不是返回 false)。
collection.add("hello");
collection.add(10);
collection.add(true);
System.out.println("collection = " + collection); // collection = [hello, 10, true]
// boolean remove(Object o)
// 從集合中移除指定元素的一個實例。如果集合包含多個滿足 (o==null ? e==null : o.equals(e))條件的元素 e,
// 則移除第一個元素 e。移除完成後返回 true。
collection.remove("hello");
System.out.println("collection = " + collection); // collection = [10, true]
// boolean contains(Object o)
// 如果此集合包含指定元素,則返回 true。更準確地說,當且僅當此集合包含至少
// 一個滿足(o==null ? e==null : o.equals(e))條件的元素 e 時,返回 true。
System.out.println(collection.contains(10));// true
// int size()
// 返回此集合中的元素數量
System.out.println(collection.size());// 2
// boolean isEmpty()
// 判斷集合是否為空
System.out.println(collection.isEmpty());// false
// void clear()
// 清空集合中的元素
collection.clear();
System.out.println("collection = " + collection); // collection = []
// boolean addAll(Collection<? extends E> c)
// 將指定集合中的所有元素添加到此集合中
Collection collection1 = new ArrayList();
collection1.add("Mary");
collection1.add("Luck");
collection.addAll(collection1);
System.out.println("collection = " + collection); // collection = [Mary, Luck]
// boolean containsAll(Collection<?> c)
// 判斷此集合是否包含指定集合中的所有元素
System.out.println(collection.containsAll(collection1));// true
// boolean removeAll(Collection<?> c)
// 從此集合中移除與指定集合中相同的所有元素。在此調用返回後,此集合將不包含與指定集合共有的任何元素。
collection.add("King");
collection.removeAll(collection1);
System.out.println("collection = " + collection); // collection = [King]
}
}
Collection 介面遍歷元素方式
使用 Iterator(迭代器)
Iterator
介面是集合的迭代器,主要用於遍歷Collection
集合中的元素。所有實現了Collection
介面的實現類,都有一個iterator()
方法,用以返回一個實現了Iterator
介面的對象,即可以返回一個迭代器。
Iterator
介面的方法:
// 判斷是否還有下一個元素
boolean hasNext()
// 返回集合中的下一個元素
E next()
// 從底層集合中移除此迭代器返回的最後一個元素。每次調用 next() 只能調用此方法一次。
// 如果在調用此方法之前尚未調用過 next() 方法,或者在最後一次調用 next() 方法之後
// 已經調用了過一次 remove() 方法,則拋出 IllegalStateException 異常。
default void remove()
// 對剩餘的每個元素執行給定的操作,直到所有元素被處理完或操作拋出異常為止。
default void forEachRemaining(Consumer<? super E> action)
迭代器的使用示例代碼:
public class CollectionIterateor() {
public static void main(String[] args) {
Collection col = new ArrayList();
col.add("紅樓夢");
col.add("西游記");
col.add("三國演義");
col.add("水滸傳");
// 遍歷 col 集合
// 先獲得 col 對應的迭代器
Iterator iterator = col.iterator();
// 使用 while 迴圈遍歷
while (iterator.hasNext()) {// 判斷是否還有元素
Object obj = iterator.next(); // 返回下一個元素,類型是 Object
System.out.println("obj = " + obj);
}
// 當退出 while 迴圈後,iterator 迭代器指向最後一個元素
// 此時再調用 next() 會拋出 NoSuchElementException 異常
// iterator.next();
// 如果需要再次遍歷,需要重製迭代器。
System.out.println("===第二次遍歷===");
iterator = col.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println("obj = " + obj);
}
}
}
當迭代器中不存在下一個元素時,直接調用 iterator.next() 方法會拋出 NoSuchElementException 異常,所以調用 iterator.next() 方法之前需要調用 iterator.hasNext() 方法。
增強 for 迴圈
增強 for 迴圈是簡化版的 iterator,本質一樣,只能用來遍歷集合或數組。基本語法如下:
for(元素類型 元素名 : 集合名或數組名){
訪問元素;
}
public class EnhancedFor() {
public static void main(String[] args) {
Collection collection = new ArrayList();
collection.add("mary");
collection.add(true);
collection.add(10);
for (Object o : collection) {
System.out.println("o = " + o);
}
}
}