Day14 集合框架01 體系概述02 共性方法03 迭代器04 List集合共性方法05 ListIterator06 List集合具體對象特點07 Vector中的枚舉 01 體系概述 集合類為什麼出現集合類?面向對象語言對事物的體現都是以對象的形式,所以為了方便對多個對象的操作,就需要對對象進
Day14 集合框架
01 體系概述
02 共性方法
03 迭代器
04 List集合共性方法
05 ListIterator
06 List集合具體對象特點
07 Vector中的枚舉
01 體系概述
集合類
為什麼出現集合類?
面向對象語言對事物的體現都是以對象的形式,所以為了方便對多個對象的操作,就需要對對象進行存儲。
集合就是存儲對象最常用的一種方式。
數組和集合類同是容器,有何不同?
數組雖然也可以存儲對象,但長度是固定的,集合的長度是可變的。
數組中可以存儲進本數據類型,集合只能存儲對象。
集合類的特點:
集合只用於存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。
02 共性方法
1.add方法的參數是object類型,以便與接受任意類型對象。
2.集合中存儲的都是對象的引用(地址)。
1 import java.util.*;
2 class CollectionDemo
3 {
4 public static void main(String[] args)
5 {
6 method();
7 base_Method();
8
9
10 }
11 //求交集
12 public static void method()
13 {
14 ArrayList al=new ArrayList();
15 al.add("java01");
16 al.add("java02");
17 al.add("java03");
18 al.add("java04");
19 sop("al原集合"+al);
20
21 ArrayList al2=new ArrayList();
22 al2.add("java01");
23 al2.add("java07");
24 al2.add("java03");
25 al2.add("java08");
26 sop("al2原集合"+al2);
27
28 al.retainAll(al2);
29 sop("al求交後的集合"+al);
30
31
32 }
33 public static void base_Method()
34 {
35 //創建一個集合容器,使用Collection介面的子類,ArrayList
36 ArrayList al=new ArrayList();
37
38
39 //1.添加元素
40 al.add("java01");
41 al.add("java02");
42 al.add("java03");
43 al.add("java04");
44
45 //列印集合
46 sop("原集合:"+al);
47 //2.刪除元素
48 al.remove("java02");
49 sop("改變後的集合:"+al);
50 //al.clear();
51
52 //4.判斷元素
53 sop("java03是否存在"+al.contains("java03"));
54 sop("集合是否為空"+al.isEmpty());
55
56 //獲取集合長度
57 sop("size:"+al.size());
58 }
59 public static void sop(Object obj)
60 {
61 System.out.println(obj);
62 }
63 }
View Code
03 迭代器
什麼是迭代器?
其實就是集合中取出元素的方式。
把取出方式定義在集合的內部。
這樣取出方式就可以直接訪問集合內部的元素。
那麼取出方式被定義為內部類。
每一個容器的數據結構不同,
取出的動作細節不一樣,但都有共性的內容
判斷和取出,那麼可以將共性抽取。
這些內部類都符合一個規則。該規則是Iterator.
如何獲取集合的取出對象呢?
通過一個對外提供的方法
iterator();
1 import java.util.*;
2 class CollectionDemo
3 {
4 public static void main(String[] args)
5 {
6 method();
7
8 }
9 //求交集
10 public static void method()
11 {
12 ArrayList al=new ArrayList();
13 al.add("java01");
14 al.add("java02");
15 al.add("java03");
16 al.add("java04");
17
18 //獲取迭代器,用於取出集合中的元素
19 /*Iterator it=al.iterator();
20
21 while(it.hasNext())
22 {
23 sop(it.next());
24 }
25 */
26 for(Iterator it=al.iterator();it.hasNext();)
27 {
28 sop(it.next());
29 }
30
31 }
32
33 public static void sop(Object obj)
34 {
35 System.out.println(obj);
36 }
37 }
View Code
04 List集合共性方法
Collection
|--List:元素是有序的,元素可以重覆。因為該集合有索引。
|--Set:元素是無序的,元素不可以重覆。
List:
凡是可以操作角標的方法都是該體系的特有方法
增:add(index,element)
addAll(index,Collection)
刪:remove(index)
改:set(index,element)
查:get(index)
subList(from,to)
listIterator();
1 import java.util.*;
2 class ListDemo
3 {
4 public static void sop(Object obj)
5 {
6 System.out.println(obj);
7 }
8 public static void main(String[] args)
9 {
10 ArrayList al=new ArrayList();
11 al.add("java01");
12 al.add("java02");
13 al.add("java03");
14 sop("原集合:"+al);
15
16 //在指定位置添加元素
17 al.add(1,"java09");
18 sop("改變後集合:"+al);
19
20 //刪除指定位置的元素
21 //al.remove(2);
22
23 //修改元素
24 al.set(2,"java07");
25 //sop(al);
26
27 //通過角標獲取元素
28 sop("get(i)"+al.get(1));
29
30 //獲取所有元素
31 for(int x=0;x<al.size();x++)
32 {
33 System.out.println("al("+x+")="+al.get(x));
34 }
35
36
37 for(Iterator it=al.iterator();it.hasNext();)
38 {
39 sop("next:"+it.next());
40 }
41
42 }
43 }
View Code
05 ListIterator
List集合特有的迭代器:ListIterator是Iterator的子介面。
在迭代時,不可以通過集合的方法操作集合中的元素。
因為會發生ConcurrentModificationException異常。
所以,在迭代時,只能用迭代器的方法操作元素,可是iterator方法是有限的
只能對元素進行判斷,取出,刪除
如果想要做其他的操作,如添加、修改等,就需要用到其子介面ListIterator
該介面只能通過List的ListIterator方法獲取。
1 import java.util.*;
2 class ListDemo
3 {
4 public static void sop(Object obj)
5 {
6 System.out.println(obj);
7 }
8 public static void main(String[] args)
9 {
10 ArrayList al=new ArrayList();
11 al.add("java01");
12 al.add("java02");
13 al.add("java03");
14 sop("原集合:"+al);
15
16 ListIterator li=al.listIterator();
17 //在迭代過程中,操作元素
18 while(li.hasNext())
19 {
20 Object obj=li.next();
21 if(obj.equals("java02"))
22 li.set("java006");
23 }
24 sop("改變後集合:"+al);
25
26 //逆序輸出
27 while(li.hasPrevious())
28 {
29 sop("pre:"+li.previous());
30
31 }
32 sop(al);
33
34 }
35 }
View Code
06 List集合具體對象特點
|--List:元素是有序的,元素可以重覆。因為該集合有索引。
|--ArrayList:底層的數據結構使用的數組結構。特點:查詢速度很快,但是增刪稍慢,元素越多,這點體現越明顯。線程不同步。
|--LinkedList:底層使用的是鏈表數據結構。 特點:增刪快,查詢速度很慢。
|--Vector:底層是數組數據結構。它比ArrayList先出現。 線程同步。被ArrayList代替了。
07 Vector中的枚舉
1 /*
2 枚舉就是Vector特有的取出方式。
3 發現枚舉和迭代器很像。
4 其實枚舉和迭代是一樣的。
5
6 因為枚舉的名稱以及方法的名稱都過長。
7 所以被迭代器取代了。
8 枚舉鬱郁而終。
9 */
10 import java.util.*;
11
12 class VectorDemo
13 {
14 public static void main(String[] args)
15 {
16 Vector v=new Vector();
17
18 v.add("java01");
19 v.add("java02");
20 v.add("java03");
21 v.add("java04");
22
23 Enumeration en=v.elements();
24
25 while(en.hasMoreElements())
26 {
27 System.out.println(en.nextElement());
28 }
29
30 }
31 }