java从入门到精通第11章_《Java从入门到精通》第十章学习笔记
第10章 Java集合類
一、概述
Java中的java.util包中提供了一些集合類,也被稱為容器,不同于數組,集合的長度是可變的,存放的是對象的引用。常用的集合有List集合、Set集合、Map集合,其中List和Set實現了Collection接口。
二、集合類接口的常用方法
1、List接口的常用方法:因為繼承了Collection接口,所以List接口也繼承了Collection中的所有方法。List集合以線性有序的方式存儲對象。List集合中可以包含重復的對象,的主要方法如下:
(1)add(int index,Object obj):返回值為void。用于向集合中指定索引位置添加對象。
(2)addAll(int index,Collection coll):返回值為boolean型。用于向集合中指定索引位置添加指定的集合對象。
(3)remove(int index):返回值為Object。用于移除集合中的指定索引位置的對象。
(4)get(int index):返回值為Object。用于獲取指定索引位置的對象。
(5)indexOf(Object obj):返回值int。返回集合中對象第一次出現的索引位置,如果不存在則返回-1。
(6)lastIndexOf(Object obj):返回值int。返回集合中對象最后一次出現的索引位置,如果不存在則返回-1。
(7)subList(int formIndex,int toIndex):返回值List。獲取兩索引之間元素對象組成的List集合。
(8)set(int index,E element):返回值Object。用指定元素替換列表中指定索引位置的元素。
(9)listIterator():返回值ListIterator.用于獲得一個包含所有對象的ListIterator列表迭代器。
1 importjava.util.List;2 importjava.util.LinkedList;3 importjava.util.Iterator;4 public classGenericTest{5 public static voidmain(String[] args){6 String a="A",b="B",c="C",d="D",e="E";//定義插入集合的字符串對象
7 List list=new LinkedList();8 //創建一個LinkedList集合
9 list.add(a);10 list.add(e);11 list.add(d);12 Iterator fristIterator=list.iterator();13 //創建List的迭代器
14 System.out.println("修改前集合中元素是:");15 while(fristIterator.hasNext()){16 System.out.print(fristIterator.next()+" ");17 }18 list.set(1,b);19 list.set(2,c);20 Iterator it=list.iterator();21 System.out.println("");22 System.out.println("修改后集合中元素是:");23 while(it.hasNext()){24 System.out.print(it.next()+" ");25 }26 }27 }
1 //創建List集合對象,通過add()方法添加元素,并將特殊對象元素在索引中出現的第一次、最后一次索引輸出
2 importjava.util.List;3 importjava.util.LinkedList;4 importjava.util.Iterator;5 public classCollectionDemo {6
7 public static voidmain(String[] args) {8 String a="a",b="b",c="c",d="d",e="e",x="apple";9 List list=new LinkedList();10 list.add(a);11 list.add(x);12 list.add(b);13 list.add(c);14 list.add(d);15 list.add(e);16 list.add(a);17 list.add(d);18 list.add(x);19 Iterator it=list.iterator();20 System.out.println("列表List為:");21 int index=0;22 while(it.hasNext()){23 System.out.print("序號"+index+":"+it.next()+";");24 index++;25 }26 System.out.println("其長度為:"+list.size());27 if((list.indexOf(a)!=-1)){28 System.out.println("a第一次出現在列表中的索引位置為:"+list.indexOf(a));29 System.out.println("a最后一次出現在列表中的索引位置為:"+list.lastIndexOf(a));30 }else{31 System.out.println("a沒有出現在列表中");32 }33 if((list.indexOf(x)!=-1)){34 System.out.println("apple第一次出現在列表中的索引位置為:"+list.indexOf(x));35 System.out.println("apple最后一次出現在列表中的索引位置為:"+list.lastIndexOf(x));36 }else{37 System.out.println("apple沒有出現在列表中");38 }39 if((list.indexOf("ts")!=-1)){40 System.out.println("ts第一次出現在列表中的索引位置為:"+list.indexOf("ts"));41 System.out.println("ts最后一次出現在列表中的索引位置為:"+list.lastIndexOf("ts"));42 }else{43 System.out.println("ts沒有出現在列表中");44 }45 }46 }
2、Set接口的常用方法:一樣也繼承了Collection接口的所有方法,并且Set集合中不允許有重復值。
(1)add(Object obj):如果Set集合中不存在obj則添加。
(2)addAll(Collection coll):將coll添加到Set集合尾部。
(3)remove(Object obj):移除指定的元素。
(4)retainAll(Collection coll):只保存Set集合中包含在coll集合中的元素。
(5)removeAll(Collection coll):移除Set集合中所有包含在coll集合中的元素。
(6)clear():清空Set集合。
(7)iterator():返回Set集合中元素進行迭代的迭代器。
//創建一個List集合向其中添加元素//再創建一個Set集合//利用addAll()將List集合對象存入Set集合,打印Set集合中元素
importjava.util.List;importjava.util.Set;importjava.util.LinkedList;importjava.util.HashSet;public classCollectionDemo {public static voidmain(String[] args) {int[] a0={1,3,5,6,8,9,12,15};int[] a1={2,4,5,6,8,11,13,15,21};
List list=new LinkedList();
Set set=new HashSet();for(intx:a0){
list.add(x);
}for(intx:a1){
set.add(x);
}
System.out.println("list集合初始化為:"+list);
System.out.println("set集合初始化為:"+set);
set.addAll(list);
System.out.println("新的set集合為:"+set+"長度為:"+set.size());
set.clear();
System.out.println("清空后set長度為:"+set.size());
}
}
3、Map接口的常用方法
Map接口提供了將鍵值映射到值的對象,一個映射中不能包括重復的鍵,而且每個鍵最多只能映射到一個值。
(1)put(key k,value v):向集合中添加指定的鍵和值。
(2)containskey(Object key):如果此映射包含指定的鍵的映射關系,則返回true.
(3)containsValue(Object value):如果此映射將一個或多個鍵指向指定值,則返回true.
(4)get(Object key):如果存在指定的鍵對象,則返回該對象對應的值,否則返回null。
(5)keySet():返回該集合中的所有鍵對象組成的Set集合。
(6)values():返回該集合中所有值對象形成的Collection集合。
1 //向一個Map集合中插入元素并根據Key的值打印集合中的元素
2
3 importjava.util.Map;4 importjava.util.HashMap;5 public classMapDemo {6
7 public static voidmain(String[] args) {8 Map map=new HashMap();9 map.put("1","apple");10 map.put("2","pear");11 map.put("3","orange");12 for(int i=1;i<=3;i++){13 System.out.println("第"+i+"個元素是:"+map.get(""+i+""));14 }15 }16 }
三、集合類接口的實現類
1、List接口的常用實現類有ArrayList和LinkedList。
(1)ArrayList類:通過List接口具備的方法實現了可變數組,可通過索引快速訪問,但插入和刪除操作速度較慢。
(2)LinkedList類:采用了鏈表結構,便于快速插入和刪除對象,但隨機訪問速度較慢。
List list1=new ArrayList();
List list2=new LinkedList();
對象的聲明采用接口類型可便于程序的拓展和修改,并通過泛型約束對象的類型。
1 importjava.util.List;2 importjava.util.ArrayList;3 public classGather {4
5 public static voidmain(String[] args) {6 //TODO Auto-generated method stub
7 List list=newArrayList();8 System.out.println("數組列表長度為:"+list.size());9 int ri=(int)(Math.random()*100);10 System.out.println("隨機數取得為:"+ri);11 list.add("a");12 list.add("b");13 list.add("c");14 System.out.println("創建后數組列表長度為:"+list.size());15 int i=ri%list.size();16 System.out.println("隨機獲取數組中的元素:"+list.get(i));17 list.remove(2);18 System.out.println("將索引是'2'的元素移除后,數組中的元素是:");19 for(int j=0;j
2、Set接口的實現類常用的主要有HashSet類和TreeSet類,一般用Set接口類型聲明創建的Set對象。
1 //People類定義
2 public classPeople {3 privateString name;4 private longid_card;5 public People(String name,longid_card){6 this.name=name;7 this.id_card=id_card;8 }9 public longgetId_card(){10 return this.id_card;11 }12 public void setId_card(longid){13 this.id_card=id;14 }15 publicString getName(){16 return this.name;17 }18 public voidsetName(String name){19 this.name=name;20 }21 }22
23 importjava.util.Iterator;24 importjava.util.Set;25 importjava.util.HashSet;26 public classCollectionDemo {27
28 public static voidmain(String[] args) {29 //TODO Auto-generated method stub
30 Set hashSet=new HashSet();31 hashSet.add(new People("KellyWong",98102106));32 hashSet.add(new People("TinsonG",98102118));33 hashSet.add(new People("MingLeu",98102135));34 hashSet.add(new People("YiJon",98102142));35 hashSet.add(new People("YooSan",98102151));36 Iterator it=hashSet.iterator();37 System.out.println("hashSet集合中的元素是:");38 while(it.hasNext()){39 People p=it.next();40 System.out.println(p.getName()+" "+p.getId_card());41 }42 }43 }
3、Map接口的實現類主要有HashMap類和TreeMap類,通常用HashMap類實現的Map集合對于添加和刪除映射關系的效率更高。HashMap是基于哈希表的Map接口的實現,HashMap中允許使用null鍵和null值,但必須保證鍵的唯一性。TreeMap中映射關系存在一定的順序,在考慮需要實現順序存儲時可以考慮使用TreeMap類,因為TreeMap類中映射的順序是按照鍵對象的規則,所以不允許鍵對象為null。
1 public classEmp {2 publicString e_id;3 publicString e_name;4 publicEmp(String id,String name){5 this.e_id=id;6 this.e_name=name;7 }8 }9 //測試主類,分別創建一個由HashMap和TreeMap實現的Map集合,并遍歷之
10 importjava.util.Map;11 importjava.util.HashMap;12 importjava.util.TreeMap;13 importjava.util.Set;14 importjava.util.Iterator;15
16 public classMapTest {17
18
19 public static voidmain(String[] args) {20 //TODO Auto-generated method stub
21 Map map=newHashMap();22 Emp emp1=new Emp("98102101","GTS");23 Emp emp2=new Emp("98102102","WJ");24 Emp emp3=new Emp("98102103","SYS");25 Emp emp4=new Emp("98102104","YYZ");26 Emp emp5=new Emp("98102105","LM");27 map.put(emp1.e_id, emp1.e_name);28 map.put(emp2.e_id, emp2.e_name);29 map.put(emp3.e_id, emp3.e_name);30 map.put(emp4.e_id, emp4.e_name);31 map.put(emp5.e_id, emp5.e_name);32 Set set=map.keySet();33 Iterator it=set.iterator();34 System.out.println("HashMap類實現的Map集合(無序):");35 while(it.hasNext()){36 String str=(String)it.next();37 String name=(String)map.get(str);38 System.out.println(str+" "+name);39 }40 TreeMap treemap=newTreeMap();41 treemap.putAll(map);42 Iterator iter=treemap.keySet().iterator();43 System.out.println("TreeMap類實現的Map集合(按鍵對象升序):");44 while(iter.hasNext()){45 String str=(String)iter.next();46 String name=(String)map.get(str);47 System.out.println(str+" "+name);48 }49 }50 }
//創建一個ArrayList類對象
importjava.util.List;importjava.util.ArrayList;importjava.util.Iterator;public classForArrayList {public static voidmain(String[] args){
List list=new ArrayList();for(int i=0;i<10;i++){int x=(int)(Math.random()*100);
list.add(x);
}
Iterator it=list.iterator();
System.out.println("ArrayList實例為:");while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
System.out.println("ArrayList實例中奇數為:");for(int i=0;i
System.out.print(list.get(i)+" ");
}
}
}
}
四、迭代器
1、利用Iterator接口創建迭代器,Iterator接口位于java.util包里。
(1)hasNext():如果當前仍有元素可以迭代,則返回true;
(2)next():返回迭代的下一個元素。
(3)remove():從迭代器指向的collection中移除迭代器返回的最后一個元素。
五、實戰練習
1 /*
2 * 將1~100之間的所有整數存放在一個List集合中3 * 并將集合中索引位置為10的對象從中刪除4 */
5 importjava.util.List;6 importjava.util.LinkedList;7 public classListDelDemo {8
9 public static voidmain(String[] args) {10 //TODO Auto-generated method stub
11 List list=new LinkedList();12 for(int i=1;i<=100;i++){13 list.add(i);14 }15 System.out.println("創建的整數列表為:");16 System.out.println(list);17 list.remove(10);18 System.out.println("刪除索引位置為10的元素后整數列表為:");19 System.out.println(list);20 }21 }
1 /*
2 * 分別向Set集合和List集合中添加"A","a","c","C","a"3 * 觀察重復值"a"能否在兩集合中成功添加4 */
5 importjava.util.List;6 importjava.util.LinkedList;7 importjava.util.Set;8 importjava.util.HashSet;9 public classAddDemo {10
11 public static voidmain(String[] args) {12 //TODO Auto-generated method stub
13 List list=new LinkedList();14 Set set=new HashSet();15 String[] arrx={"A","a","c","C","a"};16 for(int i=0;i<5;i++){17 System.out.println("第"+i+"次添加元素:");18 list.add(arrx[i]);19 System.out.println("List集合為:"+list);20 if(set.add(arrx[i])){21 System.out.println("Set集合為:"+set);22 }else{23 System.out.println("Set集合無法添加元素:"+arrx[i]);24 }25 }26 System.out.println("List和Set初始化完成!");27 System.out.println("List集合為:"+list);28 System.out.println("Set集合為:"+set);29
30 }31
32 }
1 /*
2 * 創建Map集合,創建Emp對象,并將創建的Emp對象添加到集合中3 * Emp對象的id作為Map的鍵4 * 并將id為005的對象從集合中刪除5 */
6 importjava.util.Map;7 importjava.util.HashMap;8 importjava.util.Iterator;9 public classMapDemo {10 public class Emp{ //創建Emp類
11 private String id; //private修飾保護對象屬性
12 private intvalue;13 publicEmp(){14 }15 public Emp(String id,intvalue){16 this.id=id;17 this.value=value;18 }19 publicString getId(){20 return this.id;21 }22 public intgetValue(){23 return this.value;24 }25 }26
27 public static voidmain(String[] args) {28 //TODO Auto-generated method stub
29 String[] arrStr={"001","002","003","004","005","006","007"};30 MapDemo mapDemo=new MapDemo(); //main為static,需要先創建MapDemo對象以訪問Emp
31 Map map=new HashMap();32 //創建map集合,鍵對象:String類型;值對象:Emp類型
33 for(int i=0;i<7;i++){34 Emp temp=mapDemo.new Emp(arrStr[i],i+100);35 map.put(temp.getId(),temp);36 }//初始化
37 System.out.println("map初始化完成!");38 Iterator it=map.keySet().iterator();39 while(it.hasNext()){40 String str=(String)it.next();41 String str1=map.get(str).getId();42 int val1=map.get(str).getValue();43 System.out.println(str+":"+str1+"---"+val1);44 }45 map.remove("005");46 System.out.println("刪除鍵為'005'的映射后map為:");47 Iterator it1=map.keySet().iterator(); //需重新設置Iterator
48 while(it1.hasNext()){49 String str=(String)it1.next();50 String str1=map.get(str).getId();51 int val1=map.get(str).getValue();52 System.out.println(str+":"+str1+"---"+val1);53 }54
55 }56
57 }
總結
以上是生活随笔為你收集整理的java从入门到精通第11章_《Java从入门到精通》第十章学习笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java解析shell命令_Androi
- 下一篇: linux驱动头文件查找目录,在Fedo