新_java高级应用编程第2章集合_第1页
新_java高级应用编程第2章集合_第2页
新_java高级应用编程第2章集合_第3页
新_java高级应用编程第2章集合_第4页
新_java高级应用编程第2章集合_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java高级应用编程 集合本章内容节知识点掌握程度难易程度Java中的集合类集合概述掌握Java中集合框架层次结构掌握Collection接口Collection接口掌握Set接口掌握Set接口的实现类掌握List接口掌握List接口的实现类掌握Iterator接口掌握Collections类Collections类掌握Map接口Map接口掌握Map接口的实现类掌握HashMap与TreeMap的比较掌握HashMap与HashTable的比较掌握集合中的异常使用集合时常见的异常掌握泛型的使用集合中泛型的使用理解难Java中的集合类集合概述Java中集合类是用来存放对象的集合相当于一个容器,里

2、面包容着一组对象 容器类其中的每个对象作为集合的一个元素出现Java API提供的集合类位于java.util包内Java中数组与集合的比较数组也是容器,它是定长的,访问较快,但是数组不会自动扩充数组可以包含基本数据类型或引用类型的对象,而集合中只能包含引用类型的对象Java中的集合类Java中集合框架层次结构Colleciton接口Collection接口一组称为元素的对象一个Collection中可以放不同类型的数据是Set接口和List接口的父类是否有特定的顺序以及是否允许重复,取决于它的实现Set 无序的集合;不允许重复HashSetList 有序的集合;允许重复ArrayList、L

3、inkedListColleciton接口Collection接口方法含义boolean add(Object)集合中加入一个对象,成功时返回trueboolean addAll(Collection)集合中加入另外一个集合对象int size()集合内容纳的元素数量boolean isEmpty()集合是否为空boolean contains(Object)集合内是否含有参数对象Iterator iterator()产生一个迭代器Object toArray()返回一个包含所有元素的对象数组Colleciton接口Collection接口方法含义Object toArray(Object)把

4、所有元素放入对象数组中boolean remove(Object)从集合中删除对象boolean removeAll(Collection)清空指定集合boolean containsAll(Collection)判断集合内是否包含子集boolean retainAll(Collection)删除子集合不包含的元素void clear()清空集合Object toArray(Object)把所有元素放入对象数组中Colleciton接口Set接口Collection的子接口用来包含一组 无序无重复 的对象无序 是指元素存入顺序和集合内存储的顺序不同无重复 两个对象e1和e2,如果e1.equa

5、ls(e2)返回true,则认为e1和e2重复Colleciton接口Set接口的实现类 示例 SetDemo.javaHashSet HashSet的特性在于其内部对象的散列存取,即采用哈希技术TreeSet TreeSet存入的顺序跟存储的顺序不同,但是存储是按照排序存储的Colleciton接口List接口 示例 ListDemo.javaCollection的子接口用来包含一组 有序有重复 的对象List中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素List有两种主要的集合实现类:ArrayListLinkedListColleciton接口List

6、接口方法含义void add(int index,Object element)在列表中的index位置,添加element元素Object get(int index)返回列表中指定位置的元素 int indexOf(Object o)在list中查询元素的索引值,如不存在,返回1。int lastIndexOf(Object o)List中如果存在多个重复元素,indexOf()方法返回第一个匹配元素的index。lastIndexOf(o)是返回最后一个匹配元素的index.ListIterator listIterator()返回列表中元素的列表迭代器 Object remove(in

7、t index)移除列表中指定位置的元素 Object set(int index,Object element)用指定元素替换列表中指定位置的元素 Colleciton接口List接口的实现类ArrayList是线性顺序存储的,是一种线性表它的特性和数组很接近,数组大小是不变的,而ArrayList的大小是可以动态改变的ArrayList的构造方法 ArrayList 变量名 = new ArrayList() ;ArrayList 变量名 = new ArrayList(int capacity) ;ArrayList 变量名 = new ArrayList(Collection c) ;

8、Colleciton接口List接口的实现类是数据结构中链表的java实现相对于List来说,LinkedList最主要的功能方面的增强是可以在List的头部和尾部添加、删除、取得元素,直接提供了这些方法的实现。所以它可以非常方便的实现我们数据结构中的常见的Stack(栈)、queue(队列)等LinkedList类的构造方法 LinkedList 变量名 = new LinkedList() ;LinkedList 变量名 = new LinkedList(Collection c) ;Colleciton接口List接口的实现类方法含义void addFirst(Object o) 将给定

9、元素插入此列表的开头 void addLast(Object o) 将给定元素追加到此列表的结尾 Object getFirst()返回此列表的第一个元素 Object getLast()返回此列表的最后一个元素 Object removeFirst()移除并返回此列表的第一个元素 Object removeLast()移除并返回此列表的最后一个元素 Colleciton接口List接口的实现类ArrayList与LinkedList的比较存储结构ArrayList是线性顺序存储 LinkedList对象间彼此串连起来的一个链表操作性能ArrayList适合随机查询的场合LinkedList元

10、素的插入和删除操作性高从功能上,LinkedList要多一些Colleciton接口Iterator接口Iterator对象称作迭代器,用来方便的实现对容器内的元素进行遍历操作所有实现了Collection接口的集合类都有一个iterator( )方法,返回一个实现了Iterator接口的对象Iterator对象实现了统一的一个用来遍历 Collection中对象的方法Iterator是为遍历而设计,能够从集合中取 出元素和删除元素,但是没有添加元素的 功能Iterator的功能上比较简单,使用中,只 能单向移动Colleciton接口Iterator接口 示例 IteratorDemo.ja

11、va方法含义Object next()返回游标右边的元素并将游标移动到下一个位置boolean hasNext()判断游标右边是否有元素void remove()删除游标左边的元素,在执行完next之后,该操作只能执行一次Collections类CollectionsCollections类是类似于Arrays类的公用工具类 ,它提供了一些static方法供集合类使用或操作集合类 。Collections类中的方法方法含义Object max(Collection parator comp)max算法采用Comparator比较算法Object max(collection c)返回集合中的最

12、大元素,需要考虑比较接口的实现Object min(Collection c)返回集合中的最小元素void reverse(Collection c)把集合中的元素顺序反转Collections类方法含义void copy(List dest,List src)src集合中元素复制到dest集合void fill(List list,Object o)填充list集合,填充元素为oint binarySearch(List list,Object key)对排序后的集合list进行查询元素操作void sort(List list)对一种List做排序 Collections类Map接口Map

13、接口Map内存储的是键/值对这样以成对的对象组(可以把一组对象当成一个元素),通过“键”对象来查询“值”对象Map是不同于Collection的另外一种集合接口Map中,key值是唯一的(不能重复),而key对象是 与value对象关联在一起的Map接口有两个实现:HashMap key/value对是按照 Hash算法存储的TreeMap key/value对是排序 (按key排序)存储的Map接口Map接口方法含义 Object put(Object key,Object value)将指定的值与此映射中的指定键相关联 void putAll(Map t)将映射t中所有映射关系复制到此映射

14、中 Object get(Object key)返回此映射中映射到指定键的值 Object remove(Object key)若存在此键的映射关系,将其从映射中移除 boolean containsKey(Object key)若此映射包含指定键的映射关系,返回 true boolean containsValue(Object value)若此映射为指定值映射一个或多个键,返回 true Map接口Map接口方法含义int size()返回此映射中的键-值映射对数 void clear()从此映射中移除所有映射关系 boolean isEmpty()若此映射未包含键-值映射关系,返回 tr

15、ue Set keySet()返回此映射中包含的键的 set 视图 Map接口Map接口的实现类 示例 HashMapDemo.java基于哈希表的 Map 接口的实现 HashMap的构造方法 HashMap 变量名 = new HashMap() ;HashMap 变量名 = new HashMap(int capacity) ;HashMap 变量名 = new HashMap(int capacity,float lodeFactor) ;HashMap 变量名 = new HashMap(Map m) ;Map接口HashMap与TreeMap的比较HashMap基于哈希表实现。 T

16、reeMap基于树实现。 HashMap可以通过调优初始容量和负载因子,优化HashMap空间的使用。 TreeMap没有调优选项,因为该树总处于平衡状态 HashMap性能优于TreeMap。Map接口HashMap与Hashtable的比较Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。 Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 集合类的选择如何选择集合类Set内存放的元

17、素不允许重复,List存放的元素有一定的顺序。 Map的应用主要在利用键/值对进行快速查询。 ArrayList和LinkedList的区别在于随机查询性能上ArrayList要好,但LinkedList的中间元素的插入与删除性能好 。HashSet和TreeSet的区别在于集合内元素是否排序 。集合中的异常使用集合类时常见的异常异常类型说明ClassCastException 从集合中取得元素对象在进行类型转换的时候类型不匹配 UnsupportedOperationException 当底层实现没有实现上层的相关方法的时候由Collection抛出该异常。Collection接口(或其他集

18、合超类)中的一些函数在java doc中是标明”可有可无(Optional)”的函数,这些函数在底层的一些具体实现中,有的实现了,有的没有实现,当我们调用底层实现集合类的这些没有实现的方法时就会抛出该异常。 集合中的异常使用集合类时常见的异常异常类型说明ConcurrentModificationException ConcurrentModificationException 当采用Iterator遍历集合时,如果此时集合中的元素被改变则Iterator遍历抛出此异常 IndexOutOfBoundsException 集合中元素引用的索引值超出界限(size() NoSuchElement

19、Exception LinkedList中getLast,getFirst等方法取元素的时候List为空 泛型的使用集合在使用上的问题 示例 CollectionException.java 集合中的add( )方法接受的是一个Object对象的参数 ,在获取集合中的对象时,必须进行造型(强制类型转换)操作。造型操作可能出现问题,一般在程序运行时才能发生,发现问题比较困难。集合中泛型的使用在对象放入集合前,为其作个限制在获取集合中的对象时,不用进行造型的操作当有不同类型的对象添加到集合中的时候,编译时就能检查出错误泛型的使用集合中泛型的使用泛型经常被称为参数化类型,它能够像方法一样接受不同类型的参数。 定义方式E是变量类型ArrayList 变量名 ;ArrayList arr;arr = new ArrayList();HashMap hm = new HashMap();泛型的使用“”类型推断运算符JDK 1.7引入一个新的操作符,也被称作钻石操作符,它使得构造方法也可以进行类型推导 。在这之前,你得在对象创建表达式的左右两边同时指定类型,现在你只需要在左边指定就可以了。 JDK 7之前:MapString, List employeeRecords = ne

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论