Java 集合讲解

上传人:一*** 文档编号:242987656 上传时间:2024-09-13 格式:PPT 页数:39 大小:302.64KB
返回 下载 相关 举报
Java 集合讲解_第1页
第1页 / 共39页
Java 集合讲解_第2页
第2页 / 共39页
Java 集合讲解_第3页
第3页 / 共39页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,3/13/2019,#,java,集合,-,高级篇,本节内容,1,、,Java,集合框架,2,、,Collection,接口,API,3,、,Iterator,迭代器,接口(,遍历,),4,、,Collection,子接口之一:,Set,接口,HashSet,LinkedHashSet TreeSet,5,、,Collection,子接口之二:,List,接口,ArrayList,LinkedList Vector(,古老,),6,、,Map,接口,HashMap,TreeMap Hashtable,7,、,Collections,工具类(集合),8,、,Arrays,工具类,(,数组,),Java,集合概述,为了,方便对多个对象的操作,,就要对,对象进行,存储。使用,Array,(数组)存储对象方面具有一些弊端,如:长度问题,而,Java,集合就像一种容器,可以动态地把多个对象的引用放入容器中。,Java,集合类可以用于存储数量不等的多个,对象,,还可用于保存具有映射关系的关联数组。,Java,集合概述,Java,集合可分为,Collection,和,Map,两种体系,Collection,接口:,Set,:,元素,无序、不可重复的集合,List,:,元素有序,可重复的集合,Map,接口:,具有映射关系“,key-value,对”的集合,Collection,List,Set,Vector,ArrayList,LinkedList,HashSet,SortedSet,LinkedHashSet,Comparable,Comparator,Collections,Iterator,ListIterator,迭代器,对象排序接口,容器工具类,Collection,接口,获取,JDK提供的集合API位于java.util包内,TreeSet,Map,接口,Map,Hashtable,HashMap,Sorted,Map,Properties,LinkedHashMap,TreeMap,Collection,接口,Collection,接口是,List,、,Set,和,Queue,接口的父接口,该接口里定义的方法既可用于操作,Set,集合,也可用于操作,List,和,Queue,集合。,JDK,不提供此接口的任何直接实现,而是提供更具体的子接口,(,如:,Set,和,List),实现。,在,Java5,之前,,Java,集合会丢失容器中所有对象的数据类型,把所有对象都当成,Object,类型处理;从,Java5,增加了,泛型,以后,,Java,集合可以记住容器中对象的数据类型,集合与数组间转换操作,Collection,接口方法,使用,Iterator,接口遍历集合元素,Iterator,对象称为,迭代,器,(,设计模式的一种,),,,主要用于遍历,Collection,集合中的,元素。,所有实现了Collection接口的集合类都有一个,iterator,(),方法,用以,返回一个实现了Iterator接口的对象,。,Iterator,仅用于遍历集合,,,Iterator,本身并不提供承装对象的能力。如果需要创建,Iterator,对象,则必须有一个被迭代的集合。,在调用,it.next(),方法之前必须要调用,it.hasNext(),进行检测。若不调用,且下一条记录无效,直接调用,it.next(),会抛出,NoSuchElementException,异常。,Iterator,接口的方法,使用,foreach,循环遍历集合元素,Java 5,提供了,foreach,循环迭代访问,Collection,要遍历的元素类型,要遍历的集合、数组名称,遍历,后元素名称,public class,TestForandEach,public,static void main(String args),String, str = new String5,; /null,for(String,myStr : str),myStr,=,“hello;,System.,out.println(myStr); /5,个,hello,for(int,i = 0;i str.length;i+),System.,out.println(stri); /5,个,null,练习:判断输出结果为何?,List,接口,Java,中数组用来存储数据的局限性,List,集合类中,元素有序、且可重复,,集合中的每个元素都有其对应的顺序索引。,List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。,JDK API,中,List,接口的实现类常用的有:,ArrayList,、,LinkedList,和,Vector(,线程安全,),。,List,接口,List,集合里添加了一些根据索引来操作集合元素的方法,void add(int index, Object ele),boolean addAll(int index, Collection eles),Object get(int index),int indexOf(Object obj),int lastIndexOf(Object obj),Object remove(int index),Object set(int index, Object ele),List subList(int fromIndex, int toIndex),List,实现类之一:,ArrayList,ArrayList,是,List,接口的典型实现类,本质上,,ArrayList,是对象引用的一个变长数组,ArrayList,是,线程不安全,的,而,Vector,是,线程安全,的,即使为保证,List,集合线程安全,也不推荐使用,Vector,Arrays.asList(),方法返回值是一个固定长度的,List,集合,LinkedList,对于,频繁的插入或删除元素,的操作,建议使用,LinkedList,类,效率较高,新增,方法:,void addFirst(Object obj),void addLast(Object obj),Object getFirst(),Object getLast(),Object removeFirst(),Object removeLast(),Vector,Vector,是一个古老的集合,,,JDK1.0,就有了,。大多数操作与,ArrayList,相同,区别之处在于,Vector,是线程安全的,。,在各种,list,中,最好把,ArrayList,作为缺省选择。当插入、删除频繁时,使用,LinkedList,;,Vector,总是比,ArrayList,慢,所以尽量避免使用。,新增方法:,v,oid addElement(Object obj),v,oid insertElementAt(Object obj,int index),v,oid setElementAt(Object obj,int index),v,oid removeElement(Object obj),v,oid removeAllElements(),Set,接口,Set,接口,是Collection的子接口,set接口没有,提供额外,的方法,Set,集合不允许包含相同的元素,如果试把两个相同的元素加入同一个,Set,集合中,则添加操作失败。,Set,判断两个对象是否相同不是使用,=,运算符,而是根据,equals,方法,Set,实现类之一:,HashSet,HashSet,是,Set,接口的典型实现,大多数时候使用,Set,集合时都使用这个实现类。,HashSet,按,Hash,算法来存储集合中的元素,因此具有很好的存取和查找性能。,HashSet,具有以下特点:,不能保证元素的排列顺序,HashSet,不是线程安全的,集合元素可以是,null,当向,HashSet,集合中存入一个元素时,,HashSet,会调用该对象的,hashCode(),方法来得到该对象的,hashCode,值,然后根据,hashCode,值决定该对象在,HashSet,中的存储位置。,HashSet,集合判断两个元素相等的标准,:,两个对象通过,hashCode(),方法比较相等,并且两个对象的,equals(),方法返回值也相等,。,hashCode(),方法,如果两个元素的,equals(),方法返回,true,,但它们的,hashCode(),返回值不相等,,hashSet,将会把它们存储在不同的位置,但依然可以添加成功,。,对于存放在,Set,容器中的对象,对应的类一定要重写,equals(),和,hashCode(Object obj),方法,以实现对象相等规则。,重写,hashCode(),方法的,基本原则,在程序运行时,同一个对象多次调用,hashCode(),方法应该返回相同的值,当两个对象的,equals(),方法比较返回,true,时,这两个对象的,hashCode(),方法的返回值也应相等,对象中用作,equals(),方法比较的,Field,,都应该用来计算,hashCode,值,Set,实现类之二:,LinkedHashSet,LinkedHashSet,是,HashSet,的子类,LinkedHashSet,根据元素的,hashCode,值来决定元素的存储位置,但它同时使用链表维护元素的次序,这使得元素看起来是以,插入顺序保存,的。,LinkedHashSet,插入,性能略低于,HashSet,,但在迭代访问,Set,里的全部元素时有很好的性能。,LinkedHashSet,不允许集合元素重复。,Set,实现类之三:,TreeSet,TreeSet,是,SortedSet,接口的实现类,,TreeSet,可以确保集合元素处于排序状态。,Comparator comparator(),Object first(),Object last(),Object lower(Object e),Object higher(Object e),SortedSet subSet(fromElement, toElement),SortedSet headSet(toElement),SortedSet tailSet(fromElement),TreeSet,两种排序方法:,自然排序,和,定制排序,。默认情况下,,TreeSet,采用自然排序。,排 序,自然排序,自然排序,:,TreeSet,会调用集合元素的,compareTo(Object obj),方法来比较元素之间的大小关系,然后将集合元素按升序排列,如果试图把一个对象添加到,TreeSet,时,则该对象的类必须实现,Comparable,接口。,实现,Comparable,的类必须实现,compareTo(Object obj),方法,两个对象即通过,compareTo(Object obj),方法的返回值来比较大小。,Comparable,的典型实现,:,BigDecimal,、,BigInteger,以及所有的数值型对应的包装类:按它们对应的数值大小进行比较,Character,:按字符的,unicode,值来进行比较,Boolean,:,true,对应的包装类实例大于,false,对应的包装类实例,String,:,按,字符串中字符的,unicode,值进行比较,Date,、,Time,:后边的时间、日期比前面的时间、日期大,排 序,自然,排序,向,TreeSet,中添加元素时,只有第一个元素无须比较,compareTo(),方法,后面添加的所有元素都会调用,compareTo(),方法进行比较。,因为只有相同类的两个实例才会比较大小,所以向,TreeSet,中添加的应该是同一个类的对象,对于,TreeSet,集合而言,它,判断两个对象是否相等的唯一标准,是:两个对象通过,compareTo(Object obj),方法比较返回值,当需要把一个对象放入,TreeSet,中,重写该对象对应的,equals(),方法时,应保证该方法与,compareTo(Object obj),方法有一致的结果:如果两个对象通过,equals(),方法比较返回,true,,则通过,compareTo(Object obj),方法比较应返回,0,排 序,定制,排序,TreeSet,的自然排序是根据集合元素的大小,进行元素升序排列。如果需要定制排序,比如降序排列,可通过,Comparator,接口的帮助。需要重写,compare(T o1,T o2),方法。,利用,int,compare(T o1,T o2),方法,比较,o1,和,o2,的大小:如果方法返回正整数,则表示,o1,大于,o2,;如果返回,0,,表示相等;返回负整数,表示,o1,小于,o2,。,要实现定制排序,需要将实现,Comparator,接口的实例作为形参传递给,TreeSet,的构造器。,此时,仍然只能向,TreeSet,中添加类型相同的对象。否则发生,ClassCastException,异常。,使用定制排序,判断两个元素相等的标准,是:通过,Comparator,比较两个元素返回了,0,。,Map,接口,Map,与,Collection,并列存在。用于保存具有,映射关系,的数据,:Key-Value,Map,中的,key,和,value,都可以是任何引用类型的数据,Map,中的,key,用,Set,来存放,,不允许重复,,即同一个,Map,对象所对应的类,须重写,hashCode(),和,equals(),方法。,常用,String,类作为,Map,的“键”。,key,和,value,之间存在单向一对一关系,即通过指定的,key,总能找到唯一的,、,确定的,v,alue,。,Map,接口,Map,Hashtable,HashMap,Sorted,Map,Properties,LinkedHashMap,TreeMap,Map,体系的继承树,Map,常用方法,添加、删除操作:,Object put(Object key,Object value),Object remove(Object key),void putAll(Map t),void clear(),元视图操作的方法:,Set keySet(),Collection values(),Set entrySet(),元素查询的操作:,Object get(Object key),boolean,containsKey(Object key),boolean,containsValue(Object value),int,size(),boolean,isEmpty,(),b,oolean equals(Object obj),Map,实现类之一:,HashMap,Map,接口的常用实现类:,HashMap,、,TreeMap,和,Properties,。,HashMap,是,Map,接口,使用频率最高,的实现类。,允许使用,null,键和,null,值,与,HashSet,一样,不保证映射的顺序。,HashMap,判断两个,key,相等的标准,是:两个,key,通过,equals(),方法返回,true,,,hashCode,值也相等。,HashMap,判断两个,value,相等的标准,是:两个,value,通过,equals(),方法返回,true,。,Map,实现类之二:,LinkedHashMap,LinkedHashMap,是,HashMap,的子类,与,LinkedHashSet,类似,,,LinkedHashMap,可以维护,Map,的迭代顺序:迭代顺序与,Key-,V,alue,对的插入顺序一致,Map,实现类之三:,TreeMap,TreeMap,存储,Key-Value,对,时,,需要根据,key-value,对进行排序。,TreeMap,可以保证所有的,Key-Value,对处于有序状态。,TreeMap,的,Key,的排序:,自然排序,:,TreeMap,的所有的,Key,必须实现,Comparable,接口,而且所有的,Key,应该是同一个类的对象,否则将会抛出,ClasssCastException,定制排序,:创建,TreeMap,时,传入一个,Comparator,对象,该对象负责对,TreeMap,中的所有,key,进行排序。此时不需要,Map,的,Key,实现,Comparable,接口,Map,实现类之三:,TreeMap,TreeMap,判断,两个,key,相等的标准,:两个,key,通过,compareTo(),方法或者,compare(),方法返回,0,。,若使用自定义类作为,TreeMap,的,key,,所属类需要重写,equals(),和,hashCode(),方法,且,equals(),方法返回,true,时,,compareTo(),方法应返回,0,。,Map,实现类之四:,Hashtable,Hashtable,是个,古老的,Map,实现类,,线程安全。,与,HashMap,不同,,Hashtable,不允许使用,null,作为,key,和,value,与,HashMap,一样,,Hashtable,也不能保证其中,Key-Value,对的顺序,Hashtable,判断两个,key,相等、两个,value,相等的标准,与,hashMap,一致。,Map,实现类,之五:,Properties,Properties,类是,Hashtable,的子类,该对象用于处理属性文件,由于属性文件里的,key,、,value,都是字符串类型,所以,Properties,里的,key,和,value,都是字符串类型,存取数据时,建议使用,setProperty(String key,String value),方法和,getProperty(String key),方法,Map,实现类,之五:,Properties,读取属性文件:,Properties,pros = new Properties();,pros.load(new FileInputStream(jdbc.properties);,String user = pros.getProperty(user);,System.,out.println(user);,操作集合的工具类:,Collections,Collections,是一个操作,Set,、,List,和,Map,等集合的工具类,Collections,中提供了一系列静态的方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法,排序操作,:,(均为,static,方法),reverse(List),:,反转,List,中元素的顺序,shuffle(List),:,对,List,集合元素进行随机排序,sort(List),:,根据元素的自然顺序对指定,List,集合元素按升序排序,sort(List,,,Comparator),:,根据指定的,Comparator,产生的顺序对,List,集合元素进行排序,swap(List,,,int,,,int),:,将指定,list,集合中的,i,处元素和,j,处元素进行交换,查找、替换,Object max(Collection),:根据元素的自然顺序,,返回,给定集合中的最大元素,Object max(Collection,,,Comparator),:根据,Comparator,指定的顺序,返回给定集合中的最大元素,Object min(Collection),Object min(Collection,,,Comparator),int frequency(Collection,,,Object),:返回指定集合中指定元素的出现次数,void copy(List dest,List src),:将,src,中的内容复制到,dest,中,boolean replaceAll(List list,,,Object oldVal,,,Object newVal),:使用新值替换,List,对象的所有旧值,操作集合的工具类:,Collections,同步控制,Collections,类中提供了多个,synchronizedXxx(),方法,该方法可使将指定集合包装成线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题,练 习,1.,请从键盘随机输入,10,个整数保存到,List,中,并按倒序、从大到小的顺序显示出来,2.,请把学生名与考试分数录入到,Map,中,并按分数显示前三名成绩学员的名字。,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!