Java的List,Set和Map的理解和区别:

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

2.List,Set和Map的区别:

List:中存储的数据是有顺序的,并且值是允许重复的。

Set:中存储的数据是无序的,并且值是不允许重复的,但是元素在集合中的位置是由hashcode 决定的,即存进去的位置是固定的。

Map:中存储的数据是无序的,它的键是不允许 重复的,它的值允许重复。

3.List的接口有三个实现类:

(1).LinkedList:基于链表实现的,链表内存是散列的,增删快,查询慢。

(2).ArrayList:基于数组实现的,非线程安全的,效率高,增删慢,查询快。

(3).Vector:基于数组实现 的,线程安全的,效率低,增删慢,查找快。

4.Set接口有两个实现类:

(1).hashSet:底层是由HashMap实现的,不允许集合中有重复的值,使用该集合时需要重

写equals()和hashcode()方法。

(2).LinkedHashSet:继承与HashSet,同时又基于LinkedHashMap来进行实现,底层使用的

是LinkedHashMap。

5.Map接口有四个实现类:

(1).HashMap:基于hash表的Map接口实现,非线程安全,高效,支持null值和null键。

(2).HashTable:线程安全,低效,不支持null值和null键。

(3).LinkedHashMap:是Hash的一个子类,保存了记录的插入顺序。

(4).TreeMap:基于二叉树实现,能够把它保存的记录根据键排序,默认是键值的升序排序。

6.ArrayList和LinkedList的区别:

ArrayList:

(1).底层是由数组实现的,非线程安全的,建议单线程时使用,多线程中可以选择Vector。

(2)..对于随机访问get和set,ArrayList通过数组下标快速查找,效率高。

(3). 对于增加和删除时,因为是数组的数据结构,要移动数组里的元素,效率低;查询修改效率高。

LinkedList:

(1).底层是由双向链表实现的,线程安全的。

(2)..对于随机访问get和set,LinkedList要移动指针,从前往后找,效率低。

(3).对于增加和删除时,效率高,查询修改效率低。

7.hashMap的底层理解:

(1). 存储结构为:数组+链表+红黑树(jdk1.8以后有的),添加红黑树的目的是提高效率。

(2).hashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。

(3).HashMap的特性: 存储方式是键值对,实现快速存取数据;允许null键/值;非同步;不保证有序(比如插入的顺序)。实现map接口

经验分享 程序员 微信小程序 职场和发展