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接口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值