复习集合容器类.ppt

上传人:本田雅阁 文档编号:3130540 上传时间:2019-07-14 格式:PPT 页数:33 大小:1.17MB
返回 下载 相关 举报
复习集合容器类.ppt_第1页
第1页 / 共33页
复习集合容器类.ppt_第2页
第2页 / 共33页
复习集合容器类.ppt_第3页
第3页 / 共33页
复习集合容器类.ppt_第4页
第4页 / 共33页
复习集合容器类.ppt_第5页
第5页 / 共33页
点击查看更多>>
资源描述

《复习集合容器类.ppt》由会员分享,可在线阅读,更多相关《复习集合容器类.ppt(33页珍藏版)》请在三一文库上搜索。

1、复习-集合容器类,1,复习要求,集合容器类概念 Hashcode和equals方法 集合容器中主要接口 Set List Map Iterator Comparable 集合容器中主要类 ArrayList LinkedList Vector Stack HashMap HashTable,集合容器,集合是一组聚集在一起且在内存中以特殊方式组织的对象,定义集合对象的类通常称为容器类 三种类型: Set集 集里的对象不按任何特定的方式排列 可以向集中r增加对象,但不能有重复的对象 List序列 序列中的对象以线性方式存储,不需要特殊的顺序 但有头有尾,以任意固定顺序组织,如数组 Map映射 映射

2、的每一项都含有一对对象,键-值 键决定了对象在映射中的存储位置。 映射中的键必须各不相同。,集 列表 映射,集合,重写hashCode和equals方法,涉及到equals()方法和hashCode()方法 集中元素不能重复,需要比较两个对象是否相等 TreeSet和TreeMap要进行比较两个对象, 对于自己定义的类型,需要重写equals()和hashCode()方法以实现自定义的对象相等规则 相等的对象应该具有相等的hashCode值 a.equals(b)是true,则是相等=a.hashcode()= b.hashcode() a.equals(b)是false,则是不相等=a.ha

3、shcode()!= b.hashcode() 如果两个对象的hashCode相同,它们并不一定相同,考试注意,hashCode和equals方法,toString方法都是公共的 下面的写法对这几个方法的重写是无效的 class Fooboolean equals(Object o) 一定要写成 class Foopublic boolean equals(Object o),集合,使用集合时有几种基本操作: 将对象添加到集合 从集合中删除对象 查找一个对象或一组对象是否存在于集合内 从集合中检索对象 遍历集合,逐个查看每个元素,集合容器中主要接口,核心接口 Collection 集合中最顶层

4、的接口 Set 继承自Collection 不允许有重复的元素,用equals方法来区分重复与否 List 继承自Collection 线性的 Map 没有继承自Collection接口 keyvalue SortedSet 继承Set接口 Iterator 迭代接口,可以实现遍历集合中的元素 Comparable 和Comparator 比较接口,Collection,常用方法 boolean add(Object obj) 添加一个Object元素 boolean addAll(Collection c) boolean contains(Object obj) 判断obj是否是调用类集的

5、一个元素(属于) boolean containsAll(Collection c) 判断c是否是调用类集的子集(包含) boolean equals(Collection c) 判断c是否与调用类集相等 int hashCode() 返回调用类集的hash码 Iterator iterator() 返回调用类集的迭代程序,用来遍历元素 boolean removeAll(Collection c) 从调用类集中去掉所有c中包含的元素(差集) boolean retainAll(Collection c) 从调用类集中去掉包含在c中以外的元素(补集) Object toArray() 返回类集

6、的元素组成的数组 void clear() boolean isEmpty() int size(),考试注意,对add(Object obj)方法,可以添加任意Object对象到集合中,但不能直接添加:int,char,double等数据。 可以使用下面的方法实现: ArrayList a=new ArrayList(); a.add(new Integer(1); a.add(new Integer(2);,考试注意,区分Collection和Collections Collections是一个类,有很多有用的静态方法。 而Collection是一个接口。,其他常用接口,Set 没有定义新

7、的方法,元素不重复 List 新增方法 void add(int index,Object obj) 插入点以后的元素将后移 boolean addAll(int index,Collection c) 如果调用列表改变了,返回true,否则返回false Object get(int index) int indexOf(Object obj) 返回obj对象在列表中的索引,不存在返回-1 int lastIndexOf(Object obj) 返回obj在列表中的最后一个实例的下标,不存在返回-1 ListIterator listIterator() ListIterator listI

8、terator(int index) 返回index开始的迭代程序 Object set(int index,Object obj) 对列表index处的值进行修改 List subList(int start,int end) 从start到end-1 Map 不能有相同key,一个key只能映射到一个值 用于插入和删除元素的变换方法 remove(Object key)从 Map 中删除键和关联的值 put(Object key, Object value)将指定值与指定键相关联 clear()从 Map 中删除所有映射 putAll(Map t)将指定 Map 中的所有映射复制到此 ma

9、p,其他常用接口,SortedSet 一类有序的Set集合,实现Comparator接口 常用方法 Comparator comparator() 返回调用排序集合的比较函数,如果改集合使用自然顺序,则返回nul lObject first() 返回被排序集合的第一个元素 SortedSet headSet(Object end) 返回一个包含小于end元素的SortedSet Object last() 返回调用排序集合的最后一个元素 SortedSet subSet(Object start,Object end) 包括从start到end-1 SortedSet tailSet(Obje

10、ct start) 返回包含大于等于start的元素,Iterator接口,迭代接口,可以实现遍历集合中的元素。 常用方法 boolean hasNext() 判断是否有元素 Object next() 如果没有下一个元素则引发NoSuchElementException异常。 void remove() 删除当前元素,如果试图在调用next()方法后调用remove()方法则引发IllegalStateException异常。,迭代器(iterator)的使用,Iterator it=test.iterator(); /test是一个集合的对象 while(it.hasnext() it.n

11、ext();/ 取一个元素 , ,Comparable 和Comparator 接口,比较接口 Comparable 通用的接口,用户可以实现它来完成自己特定的比较 比较固定,和一个具体类相绑定. Comparator 可以看成一种算法的实现,在需要容器集合实现比较功能的时候,实现该接口; 比较灵活,它可以被用于各个需要比较功能的类使用。,Comparable接口,所有可以“排序”的类都实现了Comparable接口,Comparable接口中只有一个方法: public int compareTo(Object obj) 若this=obj,则返回0 若thisobj,则返回正整数 若thi

12、sobj,则返回负整数 实现了Comparable接口的类通过实现compareTo()方法来确定该类对象的排序方式 如果是基本类型的话,可以用封装器类来解决,如int对应Integerfloat对应Float 一般要求: e1.equals(Object)e2)和pareTo(Object)e2)=0具有相同的值,集中主要类,HashSet类 按照哈希算法来存取对象,存取速度比较快. 用对象的equals()方法来区分不同的对象,避免重复 有一个子类LinkedHashSet类,不仅实现了哈希算法,而且实现了链表数据结构(提高插入和删除的效率) 存放的元素相应的类必须要重新定义hashCod

13、e()和equals()方法 保证当两个对象用equals()方法比较的结果为true时,这两个对象的hashcode()方法的返回值相等。 TreeSet类 实现了SortedSet接口,具有排序功能 TreeSet作为有序集,存放的元素相应的类必须自定义排列顺序要实现比较接口Comparable 或者Comparator接口 保证这个类的compareTo()和equals() 方法采用相同的比较规则来比较两个对象是否相等,考试注意,当使用HashSet或者LinkedHashSet时,添加到他们的对象必须重写hashcode和equals方法 当使用TreeSet时,添加到他们的对象必须

14、重写实现比较接口,同时重写compareTo、hashcode和equals三个方法。,列表中主要类,ArrayList 代表大小可变的数组,允许对元素进行快速的随机访问,但是插入和删除慢。 Vector 与ArrayList比较相似,但Vecotr类的实现采用了同步机制,通常使用ArrayList,因为使用了同步性能损失 LinkedList 基于链表的数据结构 ,便于插入和删除 有方法addFirst(),addLast(),getFirst(),getLast(),removeFirst(), removeLast()可以使它作为栈、队列和双向队列来使用 Stack 后进先出的堆栈,Li

15、st常用算法,类java.util.Collections提供了一些静态方法实现了基于List集合的一些常用算法 void sort(List l) /对List中的元素排序 void shuffle(List l) /对List中的元素进行随机排列 void reverse(List l) /对List中的元素进行逆序排列 void fill(List l,Object o) /用一个特定对象重写整个List void copy(List dest,List src) /将源内容拷贝到目的 int binarySearch(List l,Object o) /对顺序的List采用折半查找的方

16、法查找特定对象,List示例,List list=new ArrayList(); /声明一个列表 list.add(new Integer(3); /加入列表 list.add(new Integer(4); list.add(new Integer(3); list.add(new Integer(2); for(int i=0;ilist.size();i+) System.out.println(list.get(i)+” ”);/get方法返回集合中的对象 3 4 3 2 List的iterator()方法和Set的iterator()方法一样,能返回Iterator对象,可以用It

17、erator来遍历集合对象。 Iterator it=list.iterator(); while(it.hasNext() System.out.println(it.next(); 为列表排序 Collections.sort(list); for(int i=0;ilist.size();i+) System.out.println(list.get(i)+” ”);,ArrayList,ArrayList是List接口的一个可变长数组实现。 Arrays长度是不可改变的 Arraylist长度是可改变的。 常用方法 add增加一个元素 add(int index,E element)指

18、定位置处添加元素 remove删除一个对象 toArray()将集合变为对象数组 例子 String s = “P“, “C“, “M“; List list = Arrays.asList( s ); System.out.println(list); Collections.sort(list); System.out.println(list);,LinkedList,import java.util.LinkedList; import java.util.ListIterator; public class LinkedList之有关操作 public static void mai

19、n(String args) LinkedList l=new LinkedList(); l.add(“abc“); l.add(“efg“); l.add(“gogo“); l.add(“error“); l.remove(3); /移除第四个元素 System.out.println(l.get(0); /索引从0开始,得到第一个元素 System.out.println(l.get(1); /得到第二个元素 System.out.println(l.get(2); / System.out.println(l.get(3); ,表示的是一个链表的操作类 常用的方法 add为链表增加数据

20、 element()找到链表头 poll()以先进先出的方式取出全部的数据 getFirst(); getLast(); removeFirst(); removeLast(); addFirst(); addLast();,向量类Vector,向量(Vector)类以实现类似动态数组的功能 Vector是Java语言为解决数组长度和元素类型不能改变而引入的工具类,用来表示列表数据结构。其元素可以是任何类型的对象(不能是简单数据类型,如果要存放,可以用数据类型类) 向量类提供了三种构造方法: public vector() public vector(int initialcapacity,i

21、nt capacityIncrement) public vector(int initialcapacity),Vector类适合于如下的情况: 需要处理的对象数目不定 序列中元素都是对象,而不是基本数据类型的量 需要做频繁的元素插入和删除 需要定位序列中的对象或其他查找操作,Stack,继承自Vector 增加5个方法实现堆栈功能 push入栈 Pop出栈 peek方法得到栈顶的元素, empty方法测试堆栈是否为空, search方法检测一个元素在堆栈中的位置。 Stack刚创建后是空栈,考试注意,列表中往往会考ArrayList,Vector和LinkedList 尤其是LinkedL

22、ist因为提供了很多方法可以模拟双向列表、队列和栈等一些特殊的线性表 排序 Collections.sort(任何列表对象) Comparable接口 comparaeTo(Object o)方法 负数 如果thisObjectanotherObject 经常通过String、数据包装类、Date、Calendar。 Comparator排序 compare(Object this,Object other) 同上 用Arrays类排序 Arrays.sorts(),考试注意,查询数组和集合 Collections类 binarySearch()方法 成功返回下标 查询之前必须进行排序 实现C

23、omparable或者Comparator接口 但是如果是放在数组中的基本数据类型就不能实现自然排序接口 在Arrays和List中进行转换 List和Set有toArray()方法 返回的是一个新的Object数组 Arrays中有一个方法是asList()方法 使用遍历器 Iterator next 和hasNext方法,映射中主要类,HashMap 按照哈希算法来存取键对象,有很好的存取能力 如果集合中对象所属的类重新定义了equals()方法,那么这个类也必须重新定义hashCode(),并且保证当两个对象用equals()方法比较的结果为true时,这两个键对象的hashcode()

24、方法的返回值相等。 Hashtable 无序存放的,是旧的操作类,key不允许重复 TreeMap 实现了SortedMap接口,能对键对象进行排序,和TreeSet一样,TreeMap也支持自然排序和客户化排序两种方式 如果对集合中的键对象进行自然排序,则要求对象所属的类实现Comparable接口,并且保证这个类的compareTo()和equals() 方法采用相同的比较规则来比较两个键对象是否相等。,HashMap,向集合中增加和取出内容 put(Object key,Object value) 增加内容 get(E key)根据key找出其对应的value 判断指定的key或valu

25、e是否存在 containsKey(Object key)判断Map集合是否存在指定的key containsValue(Object value) 判断Map集合是否存在指定的value,HashTable,哈希表是重要的存储方式,也是一种常见的检索方法 常用方法 put(Object key,Object value)插入 检索 public synchronized Object get(Object key) 根据给定关键字key获取相对应的对象 public synchronized boolean containsKey(Object key) 判断哈希表中是否包含关键字key p

26、ublic synchronized boolean contains(Object value) 判断value是否是哈希表中的一个元素。 remove删除 枚举集合 public synchronized Enumeration keys() 返回关键字对应的枚举对象 public synchronized Enumeration elements() 返回元素对应的枚举对象,TreeMap,实现Map接口,把元素存储在树中 TreeMap操作比HashMap开销大,但树结构,返回排序的关键字 不要按照关键字顺序提取Map的元素,HashMap更实用 使用 电话薄或者字典是使用TreeMap的理想候选,考试注意,当使用任何一种Map时,放入改容器中的任何类都必须重写hashcode和equals方法,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1