200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java从入门到精通第11章_《Java从入门到精通》第十章学习笔记

java从入门到精通第11章_《Java从入门到精通》第十章学习笔记

时间:2023-10-19 13:08:51

相关推荐

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 }

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。