Java 集合框架只收藏这一篇就够了

                                   ++写在前面++

如果觉得有帮助可以点赞收藏支持一下,如果能关注一下就再好不过了ヾ(≧▽≦*)o,之后还会分享许多干货,话不多说

java类集(动态对象数组)Java 集合框架

Java类集常用可分为SetListMap三种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合。Java 5之后,增加了Queue体系集合,代表一种队列集合实现。
思维导图
在这里插入图片描述
如果看不清楚 可以关注私信思维导图即可获得

Collection接口

在这里插入图片描述

List集合接口

在这里插入图片描述

List特点

1有序
2可重复
3动态增长

ArrayList

ArrayList是基于数组实现的线性表,本质是动态修改数组
ArrayList objectName =new ArrayList<>(); // 初始化

常用方法

在这里插入图片描述

适用的场景

1 频繁的查询元素
2 只需要在列表末尾进行添加和删除元素操作

ArrayList扩容机制

在这里插入图片描述
两种情况
1无参构造

ArrayList<String> list = new ArrayList<>();//无参的构造方法创建ArrayList对象

点进去分析代码
在这里插入图片描述
2指定初始容量的构造方法

ArrayList<String> list2 = new ArrayList<>(9);//设置大小以后的构造方法创建ArrayList对象

在这里插入图片描述
3使用add(T t)方法
在这里插入图片描述
在这里插入图片描述

LinkList

本质一种线性表,并不会按线性的顺序存储数据 而是在每一个节点里存到下一个节点的地址。
LinkedList list=new LinkedList();

常用方法

在这里插入图片描述

适用的场景

频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

Vector

Vector提供一个子类Stack,可以挺方便的模拟“栈”这种数据结构(LIFO,后进先出)

适用的场景

现在不推荐使用Vector

ArrayList和Vector的区别

1 ArrayList从JDK1.2开始,而Vector从JDK1.0开始
2 ArrayLis是非线程安全,而Vector是线程安全的
3 ArrayLis异步处理,性能高,而Vector同步处理,性能低
4 ArrayLis可以使用Iterator、ListIterator、foreach.输出,而Vector除了Iterator、ListIterator、foreach还可以用Enumeration

ArrayList和LinkList的区别

1 ArrayList封装的是一个数组,而LinkList是链表实现
2 ArrayList的时间复杂度是1,而LinkList是n.

Set集合接口

在这里插入图片描述

Set特点

内部不允许保存重复元素

HashSet

HashSet sites = new HashSet();//初始化
本质一个不允许有重复元素的集合,但是可以为一个NULL

常用方法

在这里插入图片描述

适用场景

需要使用集合保存一组对象时,同时要求对象不重复,并且对存取的速度快的场景

TreeSet

Set treeSet=new TreeSet();//初始化
本质使用升序去排序的集合,不允许放入null值

常用方法

在这里插入图片描述

适用场景

需要使用 SortedSet 中的操作,或者按顺序迭代对你来说是重要的

重复元素消除

重复元素消除依靠的是两个方法
1 hash码:Public int hashCode();
2 对象比较:Public boolean equals(Object obj)
在进行对象比较的过程中,首先会使用hashCode()方法与集合中已经保存的代码进行匹配比较;如果代码相同则再使用equals()方法进行属性的依次比较;如果全部相同;则为相同元素;

什么时候适用List时候使用Set?

保存自定义类对象时优先使用List接口
保存系统类的信息的时候优先使用Set接口

Map集合接口

在这里插入图片描述

Iterator输出Map集合:

Map接口中保存的数据是多个Map.Entry接口封装的二元偶对象,所以就必须采用Map集合的迭代输出;
1 使得Map接口中的entrySet(),将Map集合变为Set集合;
2 取得Set接口实例后就可以利用iterator方法取得iterator的实例化对象;
3 使用iterator迭代找到每一个Map.Entry对象,并进行Key与Value

Set<Map.Entry<String, Integer>> set = map.entrySet();//将Map集合转变为Set集合
Iterator<Map.Entry<String,Integer>> iter = set.iterator();  //获取Iterator接口

Map集合的特点

键值对一一对应,可重复

HashMap实现原理

HashMap<E, E> Sites = new HashMap<E, E>();

常用方法

在这里插入图片描述

适用场景

只要是key-value结构的,一般我们就用HashMap

ConCurrentMap

ConcurrentHashMap是一个线程安全,并且是一个高效的HashMap。

ConCurrentMap的原理

当多个线程对公共数据访问时,采用ConcurrentMap,当需要对数据进行更新时,会对数据进行上锁,其他数据正常访问,实现线程安全,避免线程阻塞。

常用方法

在这里插入图片描述

适用场景

多线程情况下。

总结

collection是为了便于输出,而Map便于根据Key去寻找value。
开发中优先使用ArrayList(可重复)、HashSet(不可重复)、HashMap(key-value)。
如果觉得有帮助可以点赞收藏支持一下,如果能关注一下就再好不过了ヾ(≧▽≦*)o

  • 7
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值