Java 集合框架
++写在前面++
如果觉得有帮助可以点赞收藏支持一下,如果能关注一下就再好不过了ヾ(≧▽≦*)o,之后还会分享许多干货,话不多说
java类集(动态对象数组)Java 集合框架
Java类集常用可分为Set、List和Map三种体系,其中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