java中常见的集合类型有list、set、和map,这三个并非实现类,而是接口,实现了这些接口的集合常见的有:LinkedList,ArrayList,Vector,HashSet,TreeSet,以及HashMap,TreeMap。
List:
list集合中的元素允许重复,各元素的顺序就是插入时的顺序。其最具代表性的子类大概就是ArrayList和LinkedList,和Vector。
ArrayList可以通过下标获取元素,速度快,但是增删慢,因为每删除一个元素其后面的元素都要向前移动一个位置,并且这种集合时线程不安全的,初始长度为10.
LinkedList是双向的链式表,不能通过下标获取元素,查询效率低但是增删效率高,同时也是线程不安全的。
Vector:底层为数组实现,跟ArrayList很像,也可以通过下标获取元素,但是他是线程安全的,保证了线程安全的同时不可避免的牺牲了一点效率,因此效率比ArrayList稍差。
Set:set集合的特点:元素不能重复,元素无序,不保证顺序永久不变,Set中元素是否相等是同过比对元素的Hash值来实现的,我们可以通过重写类型HashCode()和equals()方法来自己确定比对规则。
HashSet:不允许元素重复,如果重复后面的元素会覆盖掉集合中与之相同的元素,所有的元素无序,底层由HashMap实现,每个元素的位置由Hash算法计算得出,因此查询效率很高,增删效率也一样。
TreeSet:内部由TreeMap实现通过比对元素的大小来确定元素的位置,元素可以通过实现Comparable接口实现其ConpareTo方法来自定义比对规则。
Map:双向列表,通过key获取/定位value
TreeMap:该集合中的元素具有一定的顺序,同TreeSet一样,在增删上比HashMap稍差,不允许键对象是null
HashMap:通过哈希算法对对象进行查找,允许使用null键和null值,必须保证键的唯一性,线程不安全。线程不安全的意思是在多线程并对该集合进行删改时会出现数据不一致现象。
另外还有两种集合类型:也很常见:
Properties:HashTable的子类key和value要求都是string类型。
HashTable:线程安全,但是效率低,不允许使用null值和null键。