复习贴:Java集合包详解

博主好久没写博客了,正当最近要找暑假实习,要把之前学过的Java基础拿出来好好复习一下。

刚刚看牛客网,看到一道有关集合的题目,现在把学习到的Java集合只是总结下来。

1)我们看一下这张图

                                   

首先在最顶端就是两个接口类,分别是Collection和Map

解释:Collection就是集合的意思,他存放的就是一个一个对象,这些对象可以是自己定义的JavaBean对象,也可以是Java本身API就是存在的Interger,String等对象

而Map呢,就是以Key-Value形式存储的数据结构,Key和Value可以自定义对象

如:               Map<Integer,String> map = new HashMap<>();

2)大致了解了两个接口后,我们一刀一刀的切入他们

首先是Colletion集合,子类为List接口和Set接口

相比这个我也无需多讲,就比如Set集合,在我们高一的数学课本中其实就已经学到了,这个集合是无序的,不可重复的。

相反,List集合就是有序的,可重复的。

2.1 List列表下有三个接口

最常用的是LinkList和ArraryList,这两个列表区别在他们的存储方式不同,一个在内存中是以顺序存储,一个在内存中是以链表存储

相信学过数据结构的童鞋,这个难不倒你们,我也不在这里解释顺序存储和链表存储了,有需要的同学的去学学数据结构,这是一门好课程,程序员必备!!!

反正要记住一点,如果只是查找数据,首先顺序存储

                             如果是在List表中有大量的删除和插入数据,那么选择链表存储

于此同时这两种列表是非线程安全

2.2 常被忽视的Vetctor

   Vetcor有三个构造方法,其中值得我们注意的是下面这个构造方法

 vector(int initialcapacity,int capacityIncrement) 

   参数1:initialcapacity代表初始化的容量

   参数2:capacityIncrement代表增长量

容量扩充策略:如果capacityIncrement大于0,则将Object数组的大小扩大为现有size加上capacityIncrement的值;如果capacity等于或小于0,则将Object数组的大小扩大为现有size的两倍,这种容量的控制策略比ArrayList更为可控。

Vector是基于Synchronized实现的线程安全的ArrayList,但在插入元素时容量扩充的机制和ArrayList稍有不同,并可通过传入capacityIncrement来控制容量的扩充。

Stack是Vector的子类,他实现了栈的理念,即先进后出的思想,于此同时,他也是线程安全的!

记得博主写过一到leetcode题,题目的要求是实现编译器的{ 是否匹配的算法,这里面的算法实现,就可以用到栈

2.3 Set下面有两个实现类,分别是HashSetSortedSet

HashSet的原理,就是在内部创建一个HashMap

其中add其进入的值,作为Map的key,value值用一个默认的object对象

HastSet无法get某个值,毕竟他是无序的,无法查找

所以要得到Set里面的值,只能使用iterator来遍历

该类是非线程安全

SortedSet是接口类型,TreeSet是基础TreeMap实现,底层的二叉树

他对集合实现类了排序,即为排序二叉树。

线程安全。

3.刚刚在说Set的时候提高了Map,Map是面试经常考到的知识点

3.1其实HashMap是最为重要

HashMap就是以Key值,计算出HashCode值,形成一个散列表,每个HashCode值对应一个或多个value值(链表存储)

其中查询的时间复杂度为O(1)

非线程安全

3.2TreeMap 是基于红黑树

红黑树有一定难度,涉及到一些规则,还包括变色和旋转,有一定难度,这里就不再讨论

我们这里只要知道,TreeMap是有序的,线程安全的就行。

好了,今天就分享到这里,谢谢大噶!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值