java基础学习笔记——集合

集合可以动态的把多个的引用加入其中,并且可以动态的扩容缩容。

java 集合类图

在这里插入图片描述
UML类图基础知识:
实现:虚线+空心三角形
继承:实线+空心三角形
虚线框:接口
大间距的虚线框:抽象类

各个类简介

ArrayList

基于数组实现,无容量限制。在插入元素时可能要扩容,在删除元素时不会减小数组的容量,但是提供了trimToSize()方法,用于缩减多余的容量。
非线程安全。

LinkedList

基于双向链表机制实现。插入删除复杂度低,查询复杂度高。
非线程安全

Vector

使用synchronized实现的线程安全的ArrayList。除了扩容方式和线程安全外,其余和ArrayList完全相同。

Stack

Stack继承自Vector,提供了push,pop,peek3个主要方法。
线程安全

HashSet

基于HashMap实现,无容量限制。各种方法都是通过调用hashMap中提供的方法来实现的。
不支持get(int)的方式获取指定位置的元素,既然本质上就是一个数组,为什么不提供获取指定位置元素的方法呢?个人理解是因为HashSet不保证有序,获取指定位置的元素是没有意义的。
但是如果有些场景你非要获取指定位置的元素,可以考虑这个方法:

List<String> list3 = new ArrayList<String>(set1);

先转换成list,再使用list的get(int)方法获取。
非线程安全。

LinkedHashSet

继承自HashSet,同时使用一个双向链表维护插入顺序信息,能够保证输出的顺序和输入的顺序相同。在插入和删除元素时,需要同步处理链表信息,所以比HashSet稍慢。一般来说,HashSet的遍历效率可能更高一些,但是当数组容量远大于元素个数时,LinkedHashSet遍历效率比HashSet高。
非线程安全。

TreeSet

基于TreeMap实现,支持排序。
非线程安全

HashMap

采用数组方式存储key,value构成的entry对象,无容量限制。
对key使用hash算法,寻找对象存储到数组的位置,对于hash冲突采用链表方式来解决。
在插入元素时可能会扩大数组的容量,需要重新计算hash,并复制到新的数组。
非线程安全。

LinkedHashMap

继承自HashMap,同样使用双向链表来维护顺序信息,可以保证输出的顺序和插入的顺序一致。

TreeMap

基于红黑树实现,可以对元素进行排序。

参考:

https://blog.csdn.net/liulin_good/article/details/6213815
https://blog.csdn.net/gaoxin12345679/article/details/19339111
Java LinkedHashMap工作原理及实现

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值