基础--关于集合,我了解这些

集合

对于初学者来说,我们存储数据首先想到的是数组,但在Java当中,数组的长度是固定不变的,当我们想让容器的大小可变,这时就需要考虑到集合了,而集合又分为Collection体系和Map体系,Collection下有三个接口List、Queue、Set,Map下有三个实现类HashMap、TreeMap、HashTable。我们可以看下这个图,就能很清楚的了解集合的结构了。接下来我们就一一分析
在这里插入图片描述

1、List–可重复

对于List接口下,说出三个具体实现类,一个是ArrayList,一个是LinkedList,还有一个是Vector

1、ArrayList

ArrayList是使用最广泛的List实现类,它是底层是基于数组实现的,提供了对List的增加、删除和访问功能。由于它定位索引下标的时间复杂度是O(1),所以决定了它的优点查询效率快,优点之后也伴随着缺点,因为数组的存储的特点–需要连续空间存储,所以它在中间位置插入和删除的时候,需要移动该位置及以后的元素,所以插入和删除效率慢;还有一点就是,它是线程不安全的。

2、Vector

它和ArrayList的区别就是,它是线程安全的。它的所有方法都被synchronized关键字修饰,随之而来的便是他的查询效率要比ArrayList低

3、LinkedList

它底层是基于双向链表实现的,它不需要连续的存储空间,所以在对它进行插入和删除操作时,只需要在对应节点上插入或删除元素,并将上一个节点的下一个节点指针指向该元素,如果在中间插入,还需要将当前元素的下一节点指针指向对应下一个节点。所以它的插入和删除效率高,由于是不连续的存储空间,所以在查询上需要遍历链表,所以相应的查询效率低

2、Set–不可重复

1、HashSet:HashMap实现,无序

我们先来看下底层
在这里插入图片描述
在这里插入图片描述
其实,HashSet底层实现了一个HashMap对象和一个对象常量,利用HashMap的键来存储HashSet的值,HashMap的值就只是一个对象常量(不重要);这也就是为什么HashSet的值不能重复的原因。

2、TreeSet:二叉树实现

todo…

3、LinkedHashSet:继承HashSet

todo…

3、Map–键值对形式存储

1、HashMap

HashMap这里不做解释了,我另一篇博客对它做了一个较为详细的解答。—>传送门(戳戳戳)

2、HashTable

在这里插入图片描述
HashTable是一个遗留类,它从jdk1.0就引入了,它继承自Dictionary类,并且是线程安全的,同一时刻只有一个线程能写HashTable,常用的功能和HashTable类似

3、TreeMap

它是基于二叉树的数据结构,同时实现了SortedMap接口以保障元素的顺序存取,默认按键值的升序排序,也可以自定义排序比较器

4、总结

其实,在集合里面,面试常考的List的三个实现类、Set中的HashSet和Map中HashMap以及HashTable,这几个集合类型一定要掌握,其他可做了解

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值