Vincent Jia 博客

to be a better man, to be a bad man.

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  29 随笔 :: 3 文章 :: 0 评论 :: 0 Trackbacks
括号为是否线程安全
list: LinkedList(no) ArrayList(no) Vector(yes) Stack(yes)
map: HashMap(no) LinkedHashMap(no) HashTable(yes) WeakHashMap TreeMap
set: HashSet(no) LinkedHashSet(no) SortedSet TreeSet
最常用的好像为每行的前两个
特征:
1. Linked开头的适合快速插入,删除元素, linked维护元素插入的次序
2. Set 在 HashMap 的基础上实现, 所以Set结尾的key是不会重复的
3. Tree开头的是每次改变发生排序的, 速度慢
适用:
1. 需要快速插入,删除元素, 用 LinkedList; 需要快速随机访问元素,用 ArrayList
2. Vector 类似 ArrayList, 但是是同步的
3. Stack 继承 Vector , 是后进先出的堆栈
4. HashMap, put进去的对象位置会发生变化, LinkedHashMap 则不会
5. HashSet 是专门为快速查询而设计的, 插入会产生排序(LinkedHashSet 不会), 存入HashSet的对象必须定义hashCode方法
   我的补充:关于“存入HashSet的对象必须定义hashCode方法”,其实不是必须的,但是,当我们没有重写hashCode()时,则所有我们添加进Set的对象都不会有重复现象,我们可以添加多个具有相等值得对象,但是,这就与我们的初衷有了背离,Set本身用于存储unique的对象,所以我们重写hashCode()和equals(),符合我们的业务逻辑。
6. SortedSet 是保持元素的有序顺序的Set接口, 添加到 SortedSet 实现类的元素必须实现Comparable接口, TreeSet 类是它的唯一一份实现
其它:
1. 非同步的可以进行外部同步,或者使用Collections.synchronizedMap()的方法包装成一个thread-safe的Map/Set
2. LinkedHashMap支持两种排序:插入顺序、访问顺序。前者是指按照插入时的顺序排序,后者是指按照最旧使用到最近使用的顺序
3. 既然 Set 在 HashMap 的基础上实现, 那么 HashMap 和 HashSet 有什么区别吗?
答: HashMap提供get和put方法, 允许null 值和null 键; HashSet 提供add、remove、contains和size方法, 允许null 元素; 其它未知

转自:http://xu20cn.blog.51cto.com/274020/229009/
posted on 2011-12-07 17:02 iLinux 阅读(884) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: