您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java面向对象程序设计第13章_泛型与集合框架资料
1本章主要内容13.1java集合框架概念13.2java.util.Collection接口13.3List接口13.4Set接口13.5Map接口13.6泛型13.1JAVA集合框架集合框架??指存储一系列的变量Java集合框架??常见数据结构的类数组VS集合1数组大小固定:inta[]=newint[5];集合框架大小不固定2数组是一种一维结构字典:中文,英文(狗Dog猫Cat…)不同的集合框架功能:存储快,查询快,实现更为复杂的功能。学员1学员20如何存储每天的新闻信息?如果并不知道程序运行时会需要多少对象,——可以使用Java集合框架一维数组新闻1……新闻N每天的新闻总数不确定,太少浪费空间,太多空间不足存储一个班学员信息,假定一个班容纳20名学员数组与集合框架的比较如何存储软件工程专业课程的代码与课程信息,能够通过代码方便地获得课程信息?需要更复杂方式存储对象——可以使用Java集合框架代码1……代码N课程1……课程N一一对应集合框架实现更为复杂方式存储对象集合框架内容三大内容:接口:即表示集合的抽象数据类型。接口提供了让我们对集合中所表示的内容进行单独操作的可能。实现:也就是集合框架中接口的具体实现。实际它们就是那些可复用的数据结构。算法:在一个实现了某个集合框架中的接口的对象身上完成某种有用的计算的方法,例如查找、排序等。这些算法通常是多态的,因为相同的方法可以在同一个接口被多个类实现时有不同的表现。事实上,算法是可复用的函数。如果你学过C++,那C++中的标准模版库(STL)你应该不陌生,它是众所周知的集合框架的绝好例子。5集合框架对编程有什么好处呢6提高程序设计效率。提高程序速度和质量。集合框架通过提供对有用的数据结构和算法的高性能和高质量的实现使你的程序速度和质量得到提高。集合框架鼓励软件的复用。对于遵照标准集合框架接口的新的数据结构是可复用的。Java集合框架包含的内容详解1接口CollectionListMap2具体类ArrayListLinkedListHashMap3算法Java集合框架为我们提供了一套性能优良、使用方便的接口和类,它们位于java.util包中我们需学会如何使用它们,就可处理实际应用中问题Collections提供了对集合进行排序、遍历等多种算法实现SetTreeSetHashSetTreeMap用“集合框架”设计软件时,记住该框架四个基本接口的层次结构关系会有用处:Collection接口是一组允许重复的对象。Set接口继承Collection,但不允许重复。List接口继承Collection,允许重复,并引入位置下标。Map接口既不继承Set也不继承Collection。813.2java.util.Collection接口Collection(容器)接口是Collection层次结构中的根接口Collection表示一组对象,这些对象也称为collection的元素(Elements)JDK不提供此接口的任何直接实现由Collection接口派生的两个接口是List和Set,JDK提供的容器类都是这些子接口的类实现不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,可逐一访问Collection中每一个元素13.2java.util.Collection接口13.3List接口ArrayList实现了长度可变的数组,在内存中分配连续的空间。遍历元素和随机访问元素的效率比较高LinkedList采用链表存储方式。插入、删除元素时效率比较高ListArrayListLinkedList13.3.1ArrayList集合类存储多条小狗信息,获取狗狗总数,逐条打印出各条狗狗信息通过List接口的实现类ArrayList实现该需求元素个数不确定要求获得元素的实际个数按照存储顺序获取并打印元素信息ArrayList集合类publicclassTest1{publicstaticvoidmain(String[]args){DogououDog=newDog(欧欧,雪娜瑞);DogyayaDog=newDog(亚亚,拉布拉多);DogmeimeiDog=newDog(美美,雪娜瑞);DogfeifeiDog=newDog(菲菲,拉布拉多);Listdogs=newArrayList();dogs.add(ououDog);dogs.add(yayaDog);dogs.add(meimeiDog);dogs.add(2,feifeiDog);//添加feifeiDog到指定位置System.out.println(共计有+dogs.size()+条狗狗。);System.out.println(分别是:);for(inti=0;idogs.size();i++){Dogdog=(Dog)dogs.get(i);System.out.println(dog.getName()+\t+dog.getType());}}}创建ArrayList对象并把四个狗狗对象放入其中输出狗狗的数量获取第i个元素如何遍历List集合如何遍历List集合呢?方法1:通过for循环和get()方法配合实现遍历方法2:通过迭代器Iterator实现遍历所有集合接口和类都没有提供相应遍历方法,而是由Iterator实现集合遍历Collection接口的iterate()方法返回一个Iterator,然后通过Iterator接口的两个方法可实现遍历booleanhasNext():判断是否存在另一个可访问的元素Objectnext():返回要访问的下一个元素迭代器IteratorpublicclassTest5{publicstaticvoidmain(String[]args){//1、创建多个狗狗对象DogououDog=newDog(欧欧,雪娜瑞);…//2、创建ArrayList集合对象并把多个狗狗对象放入其中Listdogs=newArrayList();dogs.add(ououDog);…System.out.println(使用Iterator遍历,所有狗狗昵称和品种是:);Iteratorit=dogs.iterator();while(it.hasNext()){Dogdog=(Dog)it.next();System.out.println(dog.getName()+\t+dog.getType());}}}通过迭代器依次输出所有狗狗的信息ArrayList集合类扩充以下几部分功能删除指定位置的狗狗,如第一个狗狗删除指定的狗狗,如删除feifeiDog对象判断集合中是否包含指定狗狗List接口提供相应方法remove()、contains(),直接使用即可ArrayList集合类publicclassTest2{publicstaticvoidmain(String[]args){//1、创建多个狗狗对象…//2、创建ArrayList集合对象并把多个狗狗对象放入其中…System.out.println(删除之前共计有+dogs.size()+条狗狗。);dogs.remove(0);dogs.remove(feifeiDog);System.out.println(\n删除之后还有+dogs.size()+条狗狗。);…if(dogs.contains(meimeiDog))System.out.println(\n集合中包含美美的信息);elseSystem.out.println(\n集合中不包含美美的信息);}}删除第一个狗狗和feifeiDog判断是否包含指定狗狗ArrayList集合类List接口常用方法方法名说明booleanadd(Objecto)在列表的末尾顺序添加元素,起始索引位置从0开始voidadd(intindex,Objecto)在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间intsize()返回列表中的元素个数Objectget(intindex)返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换booleancontains(Objecto)判断列表中是否存在指定元素booleanremove(Objecto)从列表中删除元素Objectremove(intindex)从列表中删除指定位置元素,起始索引位置从0开始13.3.2LinkedList在集合任何位置(头部、中间、尾部)添加、获取、删除狗狗对象插入、删除操作频繁时,可使用LinkedList来提高效率LinkedList还额外提供对头部和尾部元素进行添加和删除操作的方法LinkedList集合类publicclassTest3{publicstaticvoidmain(String[]args){…//创建多个狗狗对象LinkedListdogs=newLinkedList();dogs.add(ououDog);dogs.add(yayaDog);dogs.addLast(meimeiDog);dogs.addFirst(feifeiDog);DogdogFirst=(Dog)dogs.getFirst();System.out.println(第一条狗狗昵称是+dogFirst.getName());DogdogLast=(Dog)dogs.getLast();System.out.println(最后一条狗狗昵称是+dogLast.getName());dogs.removeFirst();dogs.removeLast();…}}创建LinkedList集合对象并把多个狗狗对象放入其中获取第一条狗狗信息获取最后一条狗狗信息删除第一个狗狗和最后一个狗狗LinkedList集合类LinkedList的特殊方法方法名说明voidaddFirst(Objecto)在列表的首部添加元素voidaddLast(Objecto)在列表的末尾添加元素ObjectgetFirst()返回列表中的第一个元素ObjectgetLast()返回列表中的最后一个元素ObjectremoveFirst()删除并返回列表中的第一个元素ObjectremoveLast()删除并返回列表中的最后一个元素小结集合框架有何好处?Java集合框架中包含哪些接口和哪些类?ArrayList和LinkedList有何异同?List总结:ArrayList本质是数组,适合在末尾添加数据,适合随机访问。LinkedList本质类似链表,适合随时随处修改、增加、删除元素,并且具有顺序性,即是适合存放经常做插入、删除操作、有顺序要求的一组数据。13.4Set接口List用于存储Set用于快速查找13.4HashSet类HashSet是使用一个哈希表存储元素的,是非排序的,不允许有重复元素,可以随机访问,是Set接口的最优性能实现。为了保证HashSet能正常工作,要求当两个对象用equals()方法比较的结果为true时,它们的哈希码也相等。例如,如果object1.equals(object2)为true,那么以下表达式的结果也应为true。object1.hashCode()==object2.hashCode();13.4.1HashSetimportjava.util.*;publicclassTestHash{publicstaticvoidmain(Stringargs[]){SetStringlist=newHashSetString();list.add(tom);list.add(Alice);list.add(Jerry);list.add(1);list.add(2);list.add(3);list.add(1);list.add(2);list.add(3);for(Strings:list)
本文标题:Java面向对象程序设计第13章_泛型与集合框架资料
链接地址:https://www.777doc.com/doc-3540011 .html