有序 |
重复 |
null |
同步 |
排序 |
特殊描述 | |
arraylist |
√ |
√ |
√ |
× |
× |
随机访问快,更新慢特别是delete, 首选它,除非更新操作影响了性能了 |
linkedlist |
√ |
√ |
√ |
× |
× |
更新快 |
vector |
√ |
√ |
√ |
√ |
× |
不建议用 |
|
|
|
|
|
|
|
hashset |
× |
× |
√一个 |
× |
× |
首选,不会添加进重复的元素,就是添加重复元素后, 仍然只有一个这样的元素存在 |
treeset |
√ |
× |
× |
× |
√ |
不会添加进重复的元素,就是添加重复元素后, 仍然只有一个这样的元素存在 |
LinkedHashSet |
√ |
× |
√一个 |
× |
× |
不会添加进重复的元素,就是添加重复元素后, 仍然只有一个这样的元素存在 |
|
|
|
|
|
|
|
hashmap |
× |
× |
√一个 |
× |
× |
首选,添加key重复的元素的时候会覆盖,key不能, key重复就会把value覆盖了,value可以。 (有的人还是说是有序的,按照hashcode排序) |
treemap |
√ |
× |
同上 |
× |
√ |
添加key重复的元素的时候会覆盖,key不能, key重复就会把value覆盖了,value可以 |
linkedhashmap |
√ |
× |
同上 |
× |
× |
添加key重复的元素的时候会覆盖 |
hashtable |
× |
× |
× |
√ |
× |
hashtable和hashmap基本一样, 添加key重复的元素的时候会覆盖, key不能,key重复就会把value覆盖了,value可以 |
注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问: |