java集合架構
java.util.Collection接口
Collection接口中定義了所有集合都要具備的功能,它也是所有集合的頂級接口。
Collection下面有幾種不同集合的分類,常見的兩個:
1.java.util.List:List接口表示的是線性表,是有序的且可以存放重複元素的集合 *
2.java.util.Set:Set接口表示的是不可重複的集合
這裡指的重複是元素是否可以重複,而判斷重複的标準是根據元素自身equals比較。
public static void main(String[] args) {
Collection c = new ArrayList();
/*
* boolean add(E e)
* 向目前集合中添加給定元素,成功添加後傳回true
*/
c.add("one");
c.add("two");
c.add("three");
c.add("four");
c.add("five");
System.out.println(c);
/*
* int size()
* 傳回目前集合的元素個數
*/
int size = c.size();
System.out.println("size:"+size);
/*
* boolean isEmpty()
* 判斷目前集合是否為空集
*/
boolean isEmpty = c.isEmpty();
System.out.println("isEmpty:"+isEmpty);
/*
* void clear()
* 清空集合
*/
c.clear();
System.out.println(c);
System.out.println("size:"+c.size());
System.out.println("isEmpty:"+c.isEmpty());
}
boolean contains(E e)
判斷目前集合是否包含給定元素,是否包含的依據是是否
與集合現有元素存在equals比較 為true的情況。
public static void main(String[] args) {
Collection c = new ArrayList();
c.add(new Point(1,2));
c.add(new Point(3,4));
c.add(new Point(5,6));
c.add(new Point(7,8));
System.out.println(c);
Point p = new Point(1,2);
boolean contains = c.contains(p);
System.out.println("包含:"+contains);
/*
* 删除元素也是依靠元素equals比較進行删除的,如果集合有重複元素則
* 隻删除一次。
*/
c.remove(p);
System.out.println(c);
}
集合隻能放引用類型元素,并且存放的也是元素的引用(位址)
public static void main(String[] args) {
Collection c = new ArrayList();
Point p = new Point(1,2);
c.add(p);
System.out.println("p:"+p);
System.out.println("c:"+c);
p.setX(2);
System.out.println("p:"+p);
System.out.println("c:"+c);
}
運作結果為
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iY2gTO3MWM4cDMkFmYwcTOxUTM0QjNyAjNzEmZwgjYz8CX5d2bs92Yl1iclB3bsVmdlR2LcNWaw9CXt92Yu4GZjlGbh5yYjV3Lc9CX6MHc0RHaiojIsJye.png)
public static void main(String[] args) {
Collection<String> c1 = new ArrayList<>();
// Collection c1 = new HashSet();//HashSet是由HashMap實作的
c1.add("java");
c1.add("c++");
c1.add(".net");
System.out.println("c1:"+c1);
Collection<String> c2 = new ArrayList<>();
c2.add("ios");
c2.add("android");
c2.add("java");
System.out.println("c2:"+c2);
/*
* addAll方法是取并集操作,會将給定集合中的所有元素添加到目前集合中。
* 如果目前集合是Set集合,重複元素不能被再次添加進集合。
*/
c1.addAll(c2);
System.out.println("c1:"+c1);
Collection<String> c3 = new ArrayList<>();
c3.add("c++");
c3.add("android");
c3.add("php");
System.out.println("c3:"+c3);
/*
* containsAll用于判斷目前集合是否包含給定集合中的所有元素
*/
boolean contains = c1.containsAll(c3);
System.out.println("全包含:"+contains);
/*
* removeAll用于删除目前集合中與給定集合的共有元素。給定集合中的元素
* 不受影響。
*/
c1.removeAll(c3);
System.out.println("c1:"+c1);
System.out.println("c3:"+c3);
}
周遊集合
Iterator iterator
該方法可以擷取一個用于周遊目前集合元素的疊代器
java.util.Iterator接口,疊代器接口
疊代器接口規定了使用疊代器方式辦理集合的相關操作,不同的集合都提供了對應的 實作類,我們無需記住這些具體實作類的名字,隻要當作是Iterator看即可(多态),然後根據定義的相關操作周遊即可。
疊代器周遊集合遵循的原則是:問,取,删
其中删除元素不是必要操作。
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("one");
c.add("#");
c.add("two");
c.add("#");
c.add("three");
c.add("#");
c.add("four");
c.add("#");
c.add("five");
System.out.println(c);
@SuppressWarnings("rawtypes")
Iterator it = c.iterator();
/*
* boolean hasNext()
* 通過疊代器判斷集合是否還有下一個元素可以周遊
*/
while(it.hasNext()) {
/*
* E next()
* 通過疊代器周遊集合下一個元素
*/
String str =(String)it.next();
if("#".equals(str)) {
//疊代器要求在周遊的過程中不得通過集合方法增删元素,否則抛異常
// c.remove(str);
//疊代器的remove方法可以将本次next()周遊的元素從集合中删除
it.remove();
}
System.out.println(str);
}
System.out.println(c);
}
結果如下