List和Set都是继承Collection类,而Map不是。

List和Set是单列存储数据的集合,Map是键值对的双列存储数据的集合。

List特点:元素有序,可重复,查询快。

Set特点:元素无序,不可重复,重复元素会被覆盖,(元素随无序,但是元素的顺序是HashCode决定的,其他位置是固定的,list支持for循环,或者下标遍历,但是Set只能通过迭代器,因为无序,无法通过下标获取值)

Set和List对比:

Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

List:跟数组类似,可以动态增长,查找元素效率高,增删元素效率低,因为会引起别的元素位置改变。

实现类

List 接口有三个实现类 :
LinkedList:基于链表实现,链表内存是散乱的,每一个元素存储本身内存地址的同时还存储下一个元素的地址。链表增删快,查找慢;

ArrayList:基于数组实现,非线程安全的,效率高,便于索引,但不便于插入删除;
Vector:基于数组实现,线程安全的,效率低。

Set 接口有两个实现类:
HashSet:底层是由 HashMap 实现,不允
许集合中有重复的值,使用该方式时需要重写 equals()和 hashCode()方法;
LinkedHashSet:继承与 HashSet,同时又基于 LinkedHashMap 来进行实
现,底层使用的是 LinkedHashMp。

Map 接口有三个实现类:
HashMap:基于 hash 表的 Map 接口实
现,非线程安全,高效,支持 null 值和 null 键;HashTable:线程安全,低效,
不支持 null 值和 null 键;
LinkedHashMap:是 HashMap 的一个子类,保
存了记录的插入顺序;
SortMap 接口:TreeMap,能够把它保存的记录根据键
排序,默认是键值的升序排序。

线程安全集合类与非线程安全集合

  • LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
  • HashMap是非线程安全的,HashTable是线程安全的;
  • StringBuilder是非线程安全的,StringBuffer是线程安全的。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注