1.集合:可以存儲不同類型的對象,隨著對象個數的增加,容量自動增加(頂層是一個介面) 2.為什麼有這麼多的集合? 每種集合底層使用的數據結構是不一樣的,也就是說每種集合存儲數據的特點是不一樣的, 項目中根據數據的特點來選擇不同的集合 3.實現存儲不同類型的對象? Object[] arr =new ...
1.集合:可以存儲不同類型的對象,隨著對象個數的增加,容量自動增加(頂層是一個介面)
2.為什麼有這麼多的集合?
每種集合底層使用的數據結構是不一樣的,也就是說每種集合存儲數據的特點是不一樣的,
項目中根據數據的特點來選擇不同的集合
3.實現存儲不同類型的對象?
Object[] arr =new Object[3];
//常用方法:定義Object類型的數組就可以實現,但隨著存儲的對象的增加,數組的容量是固定不變的
//缺點:容量固定
4.集合體系最頂層的是Collection介面:這個介面定義的是整個體系最共性的東西
最共性的功能:
添加:
boolean add(Object o)//多態 集合中存儲的都是對象,集合中存儲的是對象的地址
boolean addAll(Collection<? extends E> c)
刪除:
boolean remove(Object o)
boolean removeAll(Collection<?> c)
void clean()
判斷:
boolean contains(Object o)
boolean acontainsAll(Collection<?> c)
boolean isEmpty()//判空
boolean equals(Object o)//重寫了Object中的equals()方法,功能是比較兩個集合中存儲的數據是否一樣
獲取:
Iterator<E> iterator()//獲取集合中的對象,集合遍歷的方法,該方法返回的對象所屬的類實現了Iterator介面
//使用iterator方法得到集合的內部類對象
int size()//獲取集合中對象的個數
集合變數組:
Object[] toArray()//集合中有幾個對象,數組的長度就是多少
1 用例1: 2 import java.util.*; 3 class Demo1 4 { 5 public static void main(String[] args) 6 { 7 Collection coll=new ArrayList();//多態 8 coll.add("java01");//添加對象 9 coll.add("java02"); 10 coll.add("java03"); 11 coll.add(66);// int new Integer(66) 自動裝箱 12 13 coll.add(p); 14 15 sop(coll); 16 17 Collection c = new ArrayList(); 18 c.add("hadoop"); 19 c.add("spark"); 20 21 coll.addAll(c);//把別的集合中的數據添加到當前集合中 22 23 sop(coll); 24 25 coll.remove(66);//刪除某一個對象 26 sop(coll); 27 28 coll.removeAll(c); 29 sop(coll); 30 31 boolean boo = coll.contains("java01");//判斷是否包含某個對象 32 sop(boo); 33 boo=coll.containsAll(c); 34 sop(boo); 35 36 boolean e=coll.isEmpty(); 37 sop(e); 38 39 sop(coll.size());//得到集合中對象的個數 40 41 42 Collection d = new ArrayList(); 43 d.add("java01"); 44 d.add("java02"); 45 d.add("java03"); 46 47 e=coll.equals(d);//重寫了Object中的equals()方法,功能是比較兩個集合中存儲的數據是否一樣 48 sop(e); 49 50 51 //集合變數組:Object[] toArray() 遍歷 52 Object[] arr = coll.toArray();//集合中有幾個對象,數組的長度就是多少 53 for(int i=0;i<arr.length;i++){ 54 sop(arr[i]); 55 } 56 } 57 58 public static void sop(Object obj){ 59 System.out.println(obj); 60 } 61 }
1 用例2: 2 import java.util.*; 3 class Demo2 4 { 5 public static void main(String[] args) 6 { 7 //Iterator<E> iterator() 獲取集合中的對象:該方法返回的對象所屬的類實現了Iterator介面 8 //使用iterator方法得到集合的內部類對象 9 10 Collection coll=new ArrayList(); 11 12 coll.add("java01"); 13 coll.add("java02"); 14 coll.add("java03"); 15 16 Iterator ite=coll.iterator();//迭代器 17 18 while(ite.hasNext()){ 19 Object obj = ite.next();//多態 20 String ss = (String)obj; 21 System.out.println(ss.toUpperCase()); 22 } 23 } 24 }
5.list介面:存儲的數據是有序的(有序是指集合中存儲的數據順序和添加數據的順序是一致的),存儲的數據是可以重覆的
6.list的3個子類:
ArrayList:底層數據結構使用的是數組,線程不安全的,查找速度快,增刪速度慢(數組開闢的記憶體是連續的)
Vector:底層數據結構使用的是數組,線程安全的,查找速度快,增刪速度慢,被ArrayList替代了
linkedList:底層數據結構是鏈表,線程不安全的,查找速度慢,增刪速度快
7.list特有的功能:都是可以操作下標的的功能
增:
void add(int index,E element)
boolean addAll(int index,Colletion<? extends E> c)
刪:
E remove(int index)//返回被刪除的對象
改:
E set(int index,E element)
查:
//ListIterator提供了對集合進行添加修改和刪除的功能,可以在實現迭代過程中對集合進行添加修改刪除
ListIterator<E> ListIterator
//返回此列表元素的列表迭代器(按適當順序)
ListIterator<E> ListIterator(int index)
Lis<E> subList(int fromIndex,int lastIndex)//截取指定list,[x,y)
E get(int index))
8.Iterator迭代器:得到迭代器是已經明確了集合中的元素
在集合迭代過程中對集合進行添加,修改,刪除都會引發異常ConcurrentModificationException
9.集合的遍歷:Iterator iterator()
因為數據存儲在集合的內部,內部類可以直接操作集合內部的數據
所以集合使用內部類來遍曆數據,因為不同的集合存儲數據的結構不同
所以遍歷的方式也不同,所以對所有的內部類提取共性的行為
定義在一個介面中,這個藉口就是Iterator,共性的方式就是
boolean hasNext()
object next()
因此內部類都實現了Iterator介面的
10ListIterator迭代器:提供了對集合進行添加修改和刪除的功能,可以實現在迭代過程中對集合進行添加修改和刪除
1 LinkedList自己特有的功能: 2 1: 3 addFirst() 添加到鏈表的頭 4 addLast() 添加到鏈表的尾 5 6 7 2:getFirst() 得到鏈表的頭節點 8 getLast() 得到鏈表的尾節點 9 10 3:removeFirst() 刪除鏈表的頭節點 11 removeLast() 刪除鏈表的尾節點 12 13 從jdk1.6出現的 14 15 offerFirst() 16 offerLast() 17 18 peekFirst()//集合為空返回null,不會異常 19 peekLast()//集合為空返回null,不會異常 20 21 pollFirst()//集合為空返回null,不會異常 22 pollLast()//集合為空返回null,不會異常
11.遍歷集合的五種方法:
1 1.Iterator ite = list.iterator(); 2 while(ite.hasNext()){ 3 Object obj =ite.next(); 4 sop(obj); 5 } 6 7 2.for(Iterator it=list.iterator();it.hasNext();){ 8 Object o = it.next(); 9 sop(o); 10 } 11 12 3.for(int i=0;i<list.size();i++){ 13 sop(list.get(i)); 14 } 15 16 17 4.while(!list.isEmpty()){ 18 sop(list.remove(0)); 19 } 20 21 5. //實現對集合的遍歷 22 Enumeration en = v.elements(); 23 while(en.hasMoreElements()){ 24 Object obj = en.nextElement(); 25 System.out.println(obj); 26 }
12.使用LinkedList實現隊列
1 import java.util.*; 2 //實現隊列 3 class MyQueue 4 { 5 private LinkedList link; 6 7 MyQueue(){ 8 link=new LinkedList(); 9 } 10 11 //進隊 12 public void enQueue(Object obj){ 13 link.addLast(obj); 14 } 15 16 //出隊 17 public Object deQueue(){ 18 return link.removeFirst(); 19 } 20 21 //判斷隊列是否為空 22 public boolean isNull(){ 23 return link.isEmpty(); 24 } 25 } 26 27 class Demo7 28 { 29 public static void main(String[] args) 30 { 31 MyQueue q=new MyQueue(); 32 q.enQueue("1"); 33 q.enQueue("2"); 34 q.enQueue("3"); 35 36 while(!q.isNull()){ 37 System.out.println(q.deQueue()); 38 } 39 } 40 }