第七章集合案例7-1Collection接口对集合的操作一、案例描述1、考核知识点编号:00107002名称:Collection接口2、练习目标掌握Collection接口中方法的使用3、需求分析Collection是所有单列集合的父接口,在Collection中定义了单列集合(List和Set)通用的一些方法。为了让初学者熟悉Collection接口中的常用方法,本案例将演示Collection接口中的方法对集合进行操作来学习方法的使用。4、设计思路(实现原理)1)编写一个类Example012)在类中定义两个Collection集合,并向其中一个集合中添加数据3)用Collection接口中的方法对定义的两个集合进行各种操作二、案例实现import.*;publicclassExample01{publicstaticvoidmain(String[]args){;语句导包,否则程序将会编译失败,显示类找不到。案例7-2List接口的特有方法一、案例描述1、考核知识点编号:00107003名称:List接口2、练习目标掌握List接口的常用方法的使用3、需求分析List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法。为了熟悉List接口中特有方法的使用,本案例将演示使用List接口中的方法对List集合进行添加、修改等操作。4、设计思路(实现原理)1)编写一个类Example022)在类中定义两个list集合,并向其中一个集合中添加数据。3)用subList(intfromIndex,inttoIndex)方法获取集合的一部分4)用set(intindex,Eelement)方法修改一个元素5)用add(intindex,Eelement)方法增加一个元素二、案例实现import.*;publicclassExample02{publicstaticvoidmain(String[]args){Listlist=newArrayList();(abc1);;publicclassExample03{publicstaticvoidmain(String[]args){ArrayListarray=newArrayList();(lisi);(wangwu);(jordan);(jackson);(white);;第2个元素是:+(1));}}运行结果如图7-4所示。图7-1运行结果三、案例总结1、在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。2、索引位置为1的元素是集合中的第二个元素,这就说明集合和数组一样,索引的取值范围是从0开始的,最后一个索引是size-1,在访问元素时一定要注意索引不可超出此范围,否则会抛出角标越界异常IndexOutOfBoundsException。3、由于ArrayList集合的底层是使用一个数组来保存元素,在增加或删除指定位置的元素时,会导致创建新的数组,效率比较低,因此不适合做大量的增删操作。但这种数组的结构允许程序通过索引的方式来访问元素,因此使用ArrayList集合查找元素很便捷。案例7-4LinkedList集合的特殊方法一、案例描述1、考核知识点编号:00107005名称:LinkedList集合2、练习目标了解LinkedList集合的特点掌握LinkedList集合的特殊方法的使用3、需求分析ArrayList集合在查询元素时速度很快,但在增删元素时效率较低,为了克服这种局限性,可以使用List接口的另一个实现类LinkedList。LinkedList集合除了对于元素的增删操作具有很高的效率,还专门针对元素的增删操作定义了一些特有的方法。为了熟悉这些特殊的方法,本案例将演示如何使用LinkedList中的特殊方法对集合进行增删操作。4、设计思路(实现原理)1)编写一个类Example04,在该类中定义一个LinkedList集合2)分别使用addFirst()和addLast()方法向集合中添加元素3)使用peekFirst()方法获取集合中的第一个元素4)使用pollFirst()方法获取并移除集合中的第一个元素5)使用pollLast()方法获取并移除集合中的最后一个元素6)此时,集合中应该没有元素了,用peekLast()方法获取集合中的最后一个元素,由于集合为空,应该返回NULL二、案例实现import.*;publicclassExample04{publicstaticvoidmain(String[]args){LinkedListlink=newLinkedList();(abc1);;publicclassExample05{publicstaticvoidmain(String[]args){Listlist=newArrayList();(abc1);;publicclassExample06{publicstaticvoidmain(String[]args){;publicclassExample07{publicstaticvoidmain(String[]args){Listlist=newArrayList();(abc1);(abc2);(abc3);(abc4);ListIteratorlit=();while()){Objecto=();quals(o)){(abc5);};};publicclassExample08{publicstaticvoidmain(String[]args){Vectorv=newVector();;publicclassExample09{publicstaticvoidmain(String[]args){;publicclassExample10{publicstaticvoidmain(String[]args){;publicclassExample11{publicstaticvoidmain(String[]args){TreeSetts=newTreeSet();;publicclassExample13{publicstaticvoidmain(String[]args){4)值林志颖在集合中存在,所以输出true。5)因为集合不为空,所以()返回false。案例7-14遍历Map中所有的键值一、案例描述1、考核知识点编号:00107014名称:HashMap集合2、练习目标掌握遍历Map中所有的键值两种方法3、需求分析在程序开发中,经常需要取出Map中所有的键和值。为了让大家熟悉遍历Map中所有的键值,本案例将演示遍历Map中所有的键值对的两种遍历方式。4、设计思路(实现原理)1)编写类Example14,在该类中创建Map集合并向集合中添加元素2)使用第一种方式,遍历集合元素,先获取键的集合,再获取键所对应的值3)使用第二种方式,先获取集合中键值对映射关系,再从映射关系中获得键和值二、案例实现import.*;publicclassExample14{publicstaticvoidmain(String[]args){;publicclassExample15{publicstaticvoidmain(String[]args){Strings=cbxzbvavdvgd;ppend(().append(i).append());}Stringresult=();;}}运行结果如图7-20所示。图7-2运行结果三、案例总结1、在本案例中,演示了TreeMap集合中元素的存储和迭代方法与HashMap相同。从输出结果可以看出,TreeMap集合中的元素是不重复的,并且按照值的自然顺序进行了排序。这是因为在TreeMap中是通过二叉树的原理来保证键的唯一性,这个TreeSet集合存储的原理一样,因此TreeMap中所有的键是按照某种顺序排列的。2、本案例中,在定义TreeMap集合时使用了泛型,即参数化类型。它可以指定该类中方法操作的数据类型,避免在集合存取时会产生的数据类型转化的错误。案例7-16Proeprties集合的功能一、案例描述1、考核知识点编号:00107016名称:Proeprties集合2、练习目标掌握Proeprties集合的存储和遍历方法3、需求分析Map接口中还有一个实现类Hashtable,它和HashMap的区别是Hashtable是线程安全的。Hashtable类有一个子类Properties在实际应用中非常重要,Properties主要用来存储字符串类型的键和值,为了掌握Properties集合的使用,本案例将演示Properties集合中元素的存储,修改和遍历。4、设计思路(实现原理)1)编写一个类Example16,创建Proeprties集合对象2)向Proeprties集合中添加元素3)遍历Proeprties集合中的元素二、案例实现import.*;publicclassExample16{publicstaticvoidmain(String[]args){;publicclassExample17{publicstaticvoidmain(String[]args){;publicclassExample18{publicstaticvoidmain(String[]args){.elements)将所有指定元素添加到指定collection中staticvoidreverse(Listlist)反转指定List集合中元素的顺序staticvoidshuffle(Listlist)对List集合中的元素进行随机排序(模拟玩扑克中的“洗牌”)staticvoidsort(Listlist)根据元素的自然顺序对List集合中的元素进行排序staticvoidswap(Listlist,inti,intj)将指定List集合中i处元素和j处元素进行交换staticintbinarySearch(Listlist,Objectkey)使用二分法搜索指定对象在List集合中的索引,查找的List集合中的元素必须是有序的staticObjectmax(Collectioncol)根据元素的自然顺序,返回给定集合中最大的元素staticObjectmin(Collectioncol)根据元素的自然顺序,返回给定集合中最小的元素staticbooleanreplaceAll(Listlist,ObjectoldVal,ObjectnewVal)用一个新的newVal替换List集合中所有的旧值oldVal案例7-19Arrays类对数组的操作一、案例描述1、考核知识点编号:00107020名称:Arrays工具类2、练习目标掌握如何使用Arrays工具类对数组进行操作3、需求分析Arrays是一个专门用于操作数组的工具类,其中提供了大量的静态方法。为了让初学者能熟悉Arrays类中方法的功能和使用,本案例将使用Arrays类中的各种方法对数据进行操作,来学习Arrays工具类对数组进行排序、转换等操作。4、设计思路(实现原理)1)编写一个类Example21,在该类中定义一个数组2)用Arrays类中的sort()方法对数组进行排序3)用toString()方法将数组转换成字符串,并输出4)用asList()方法将数组转换成集合二、案例实现import.*;publicclassExample19{publicstaticvoidmain(String[]args){Integer[]arr={3,1,6,34,78,9};//对数组排序(arr);//将排序后的数组转换成字符串打印出来排序后的数组:+(arr));//将数组转换成集合ListIntegerarray=(arr);数组转换成集合