黑马程序员技术交流社区

标题: 集合Collection [打印本页]

作者: 此间的少年    时间: 2016-9-29 23:17
标题: 集合Collection
List接口(一句话:有顺序,元素可以重复)
  List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。

LinkedList类
  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。注意LinkedList没有同步方法。
ArrayList类
  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

Set接口(一句话:没顺序,元素不可以重复。重复判断标准:相互equals)
Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2)=false,Set最多有一个null元素。很明显,Set的构造函数有一个约束条件,传入的Collection参数不能包含重复的元素。

Map接口(一句话,key唯一,value可以重复)
  请注意,Map没有继承Collection接口,Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个 value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。

总结:
  1. 如果涉及到堆栈,队列等操作,应该考虑用List,对于需要快速插入,删除元素,应该使用LinkedList,如果需要快速随机访问元素,应该使用ArrayList。
  2. 如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。
  3. 尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
  4. equals 的时候hashcode应该相等
  5. 容器类对象在调用remove、contains等方法时需要比较对象是否相等。这会涉及到对象类型的equals方法和hashcode方法;对于自定义的类型;需要重写equals和hashcode方法以实现自定义对象的相等规则。
注意,相等的对象应该具有相等的hashcodes。
作者: 此间的少年    时间: 2016-9-29 23:20
坚持就是胜利
作者: IceLoveInFire丶    时间: 2016-9-29 23:27
总结的挺好的~
作者: 周军福    时间: 2016-9-29 23:29
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
作者: chenhao597    时间: 2016-9-29 23:33
谢谢分享 总结
作者: huangweicong    时间: 2016-9-29 23:40
加油加油!!!!!!!!!!!!!!!
作者: 一半的留言    时间: 2016-9-29 23:44
谢谢楼主分享
作者: wolfking0608    时间: 2016-9-30 16:07
一看就是良心总结,
作者: langyabang1110    时间: 2016-9-30 18:15
加油加油
作者: markiyangliu    时间: 2016-10-3 22:30
精彩!!!大神牛!!!
作者: 一半的留言    时间: 2016-10-3 23:06
谢谢楼主分享
作者: 干煸爪哇鱼    时间: 2016-10-4 12:46
好.............................
作者: u8u8u80pp    时间: 2016-10-4 14:16

坚持就是胜利
作者: u8u8u80pp    时间: 2016-10-9 22:57
良心总结,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2