A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 此间的少年 中级黑马   /  2016-9-29 23:17  /  1330 人查看  /  13 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

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。

评分

参与人数 1黑马币 +2 收起 理由
toolz + 2 很给力!

查看全部评分

13 个回复

正序浏览
良心总结,
回复 使用道具 举报

坚持就是胜利
回复 使用道具 举报
好.............................
回复 使用道具 举报
谢谢楼主分享
回复 使用道具 举报
精彩!!!大神牛!!!
回复 使用道具 举报
加油加油
回复 使用道具 举报
一看就是良心总结,
回复 使用道具 举报
谢谢楼主分享
回复 使用道具 举报
加油加油!!!!!!!!!!!!!!!
回复 使用道具 举报
谢谢分享 总结
回复 使用道具 举报
尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。
回复 使用道具 举报
总结的挺好的~
回复 使用道具 举报
坚持就是胜利
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马