ArrayList,LinkedList,Vector,Set,Map,List,HashMap,HashTable

Posted fangqideagan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayList,LinkedList,Vector,Set,Map,List,HashMap,HashTable相关的知识,希望对你有一定的参考价值。

java集合类只要有两个接口派生而出.Collection和Map.  其中set和List分别代表无序集合与有序集合.

技术分享图片

下图为Map体系集合数技术分享图片

 

 

HashSet具有一下特点: 不能保证排序顺列, HashSet不是同步的,

如果多个线程同时访问一个HashSet.假设有两个以上线程同时修改HashSet的值时,需要通过代码使其同步.

当向HashSet里面添加元素时,HashSet会调用该对象的HashCode()方法来获取HashCode值. 如果两个元素通过equals()方法比较返回true,它们的HashCode值不等,HashSet也会存储在不同位置,添加成功.所以我们需要重写该对象的HashCode方法和equals方法.

public boolean equals(Object obj){

if(this == obj){

return true;

if(null != obj && obj.getClass() == Class.class){

Class class = (Class)obj

}}}

public int hashCode(){

return this.hashCode();

}

HashSet 还有一个子类,LinkedHashSet ,LinkedHashSet也是根据元素的hashCode值来决定元素的存储位置.但他同时使用连表维护元素次序,所以它是有序的.由于LinkedHashSet需要维护元素的插入顺序,所以它的性能略低于HashSet,

TreeSet是SortedSet接口的实现类,TreeSet可以确保集合元素处于排序状态,TreeSet并不是根据元素的插入顺序进行排序的.而是根据元素的实际值进行排序.treeSet只能添加同一种类型的对象.在自然排序时,集合元素必须实现Comparable接口

如果有多个线程同时访问一个Set集合,则可以通过Collection工具类的synchronizedSortedSet方法来"包装"该Set集合.

SortedSet s =Collections.synchronizedSortedSet(new TreeSet(...));

ArrayList和Vector的区别: ArrayList是线程不安全的,Vector是线程安全的. ,即使需要保证List的线程安全,也不推荐使用Vector,Collections工具类的方法可以将ArrayList变为线程安全

以上是关于ArrayList,LinkedList,Vector,Set,Map,List,HashMap,HashTable的主要内容,如果未能解决你的问题,请参考以下文章

Java中ArrayList和LinkedList差别

ArrayList、LinkedList、HashMap哪个速度更快

ArrayList与LinkedList的扩容

arrayList和linkedList在排序上的区别

ArrayList 和 LinkedList 的区别(底层数据结构): 什么时候使用arrayList,什么时候使用LinkedList (一个小时)

arraylist和linkedlist的区别