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变为线程安全
原文地址:https://www.cnblogs.com/fangqideagan/p/9678325.html