java 有序map_Java常用集合总结

Java集合框架是Java设计者非常重要的一个设计灵感体现。相对数组,Java提供的集合框架是非常高效且方便的,同时也易于操作。根据我们平时书写代码的频率以及面试时经常被问到的知识点里,都不可或缺的提到集合框架,好多同学其实都学过集合框架,但是用的时候却发现自己从没仔细想过,我为什么要用这个集合呢?以及集合框架之间的区别到底是什么呢?

62885024fe054a11b1a76fd7d661e4f6.png

今天,我就在这里和大家简单的聊聊Java的三大集合框架

1、Java集合框架图

d4a7f29ca2ce92b5408be72c264e3589.png

Java集合框架简图

从这个图中我们可以看到Java集合框架的组成以及他们之间的关系,其中有四大接口,如下:

Collection 接口:存储一组不唯一,无序的对象

List 接口:存储一组不唯一,有序(索引顺序)的对象

Set 接口:存储一组唯一,无序的对象

Map接口:存储一组键值对象,提供key到value的映射

--- Key 唯一 无序

--- value 不唯一无序

接口之下都是接口对应的实现类,也是我们经常使用的集合框架类。

2、常用集合类比较

List类和Set类

List类和Set类是Collection集合接口的子接口。

Set子接口:无序,不允许重复。

List子接口:有序,可以有重复元素。

Set和List对比

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

List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。

Set和List具体子类

Set
|————HashSet:以哈希表的形式存放元素,插入删除速度很快。

|————LinkedHashSet:采用哈希表存储结构,同时使用链表维护次序。

|————TreeSet:采用二叉树(红黑树)的存储结构。


List
|————ArrayList:动态数组

|————LinkedList:链表、队列、堆栈。

Map接口

Map接口是独立的一个接口,与Collection接口没有关系。

特点是:数据是 key-value 映射

具体子类:

|———— HashMap

Key 无序 唯一 (Set)

Value 无序 不唯一 (Collection)

|———— LinkedHashMap

有序的HashMap 速度快

|———— TreeMap

有序 速度没有hash快

注意:HashSet底层结构其实就是调用HashMap

3、如何应对面试中关于集合框架的问题呢?

(1)、从线程安全方面比较

线程安全就是说多线程访问同一代码,不会产生不确定的结果。集合框架之间的区别和比较的一个点,也就是包括是否线程安全,一般情况下,线程安全就必定速度或效率相对就低,这是由设计决定的。

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

LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;

HashMap是非线程安全的,HashTable是线程安全的;

StringBuilder是非线程安全的,StringBuffer是线程安全的。

(2)、从适用场景比较

对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;

ArrayList适用于通过为位置来读取元素的场景;

LinkedList 适用于要头尾操作或插入指定位置的场景;

Vector 适用于要线程安全的ArrayList的场景;

Stack 适用于线程安全的LIFO场景;

HashSet 适用于对排序没有要求的非重复元素的存放;

TreeSet 适用于要排序的非重复元素的存放;

HashMap 适用于大部分key-value的存取场景;

TreeMap 适用于需排序存放的key-value场景。

最后附上集合框架比较的详细图

ff74019972f9443ff1046c6e5b10c279.png

集合框架不要死记硬背,一定要理解他们的数据结构及底层实现原理,实际工作中,我们常用的也就那么几个,只是面试过程中,会经常被问到它们之间的区别和差异!

好啦!今天就写到这里,有对集合框架不同看法和意见的同学,也可以给我留言!谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值