java--集合概述
一、集合框架總覽圖
二、爲什麼需要集合
- 爲什麼出現集合類?
面嚮對象語言對事物的體現都是以對象的形式,所以爲了方便對多個對象的操作,就要對對象進行存儲,集合就是存儲對象最常用的一種方式。
- 數組和集合類同是容器,有何不同?
數組雖然也可以存儲對象,但長度是固定的;集合長度是可變的。數組中可以存儲任意數據類型,集合只能存儲對象。
- 集合類的特點
集合只用於存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。
三、集合分類概述
四、集合的兩大接口
Java集合類主要由兩個接口派生出來:
Collection
Set :不能存放重複對象
List :可存放重複對象,有序
Queue :隊列
SortedSet :可對集合數據排序
Map
SortedMap :可對集合數據排序
Collection和Iterator接口實例
package collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
/**
* 在集合裏的存儲,永遠存的是 一個引用地址
* @author will
*
*/
public class CollectionDemo {
public static void main(String[] args) {
Collection c = new ArrayList();
/*
* boolean add(E e)
確保此 collection 包含指定的元素(可選操作)。
boolean addAll(Collection c)
將指定 collection 中的所有元素都添加到此 collection 中(可選操作)。
void clear()
移除此 collection 中的所有元素(可選操作)。
* */
c.add("A");
c.add("A");
//c.add(1);//java5之前不允許,Java5之前沒有自動裝箱
c.add(new Integer(1));//
c.add(23);
StringBuilder sb = new StringBuilder("SB");
c.add(sb);
boolean b = c.add("A");
System.out.println(b);
System.out.println(c);
sb.append("OOXX");
System.out.println(c);
Collection c2 = new ArrayList();
c2.add(new Date());
c2.add("春哥");
c.addAll(c2);
System.out.println(c);
//c.clear();
System.out.println(c);
/*
* boolean contains(Object o)
如果此 collection 包含指定的元素,則返回 true。
boolean containsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,則返回 true。
* */
System.out.println(c.contains("春哥"));
System.out.println(c.containsAll(c2));
System.out.println(c2.containsAll(c));
/*
* boolean isEmpty()
如果此 collection 不包含元素,則返回 true。
* */
System.out.println("c.isEmpty()= "+c.isEmpty());
/*
* boolean remove(Object o)
從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)。
boolean removeAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。
* */
System.out.println(c.remove("鳳姐"));
System.out.println(c.remove("春哥"));
System.out.println(c);
c.removeAll(c2);
System.out.println(c);
/*
* boolean retainAll(Collection<?> c) 其實就是求兩個集合的交集
僅保留此 collection 中那些也包含在指定 collection 的元素(可選操作)。
* */
c2.add(23);
c2.add("A");
c.retainAll(c2);
System.out.println(c);
/**
* int size() 返回此 collection 中的元素數。
*/
System.out.println(c.size());
/**
* Object[] toArray()
返回包含此 collection 中所有元素的數組。
*/
Object[] os = c.toArray();
for (Object o : os) {
System.out.println("-->" + o);
}
/**
* for-each使用的場合, 數組和 Iterable對象
*/
System.out.println("------------------");
for (Object object : c) {
System.out.println(object);
}
/**
* Iterator iterator() 返回在此 collection 的元素上進行迭代的迭代器。
*
* Iterator類:
* boolean hasNext()
如果仍有元素可以迭代,則返回 true。
Object next()
返回迭代的下一個元素。
void remove()
從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操作)。
*/
System.out.println("==================");
Iterator it = c.iterator();
//每調用next方法後,指針就會向後移動一個位置
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
//System.out.println(it.next());//java.util.NoSuchElementException指針已到最後,沒有下一個元素了
System.out.println(it.hasNext());
if(it.hasNext()){
System.out.println(it.next());
}
it = c.iterator();
while(it.hasNext()){
System.out.println("----->"+it.next());
}
/*
* for(it = c.iterator();it.hasNext();){
System.out.println("for----->"+it.next());
}
老外喜歡用,就是因爲性能高一低;此時it在for語句裏創建,聲明週期短一些
*
* */
for(it = c.iterator();it.hasNext();){
System.out.println("for----->"+it.next());
}
/**
* for-each
*/
}
}