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是线程安全的。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。