集合框架详解 [精选]
Hi i,m JinXiang
⭐ 前言 ⭐
本篇文章主要介绍集合框架的两个接口超级详细介绍,集合框架的使用以及部分理论知识
🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁
🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言
⭐ 什么是集合?
集合是Java中提供的一种容器,可以用来存储多个数据,根据不同存储方式形成的体系结构,就叫做集合框架体系(掌握)。集合也时常被称为容器。
Java集合体系框架:
Java集合类主要由两个根接口Collection和Map派生出来的。如上图,左边的Collection接口为单列集合的接口,右边的Map接口为双列集合的接口,下面分别对应他们的子接口以及对应的实现类。
Collection派生出了两个子接口:
- 1)List:List代表了有序可重复集合,可直接根据元素的索引来访问
- 2)Set:Set代表无序不可重复集合,只能根据元素本身来访问
集合Map:
Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。
⭐ 为什么使用集合
相对比于数组:
1、数组初始化后,其长度不可以再被改变,也就是说数组存放数据的个数是事先确定的。
2、数组中对于插入元素和删除元素的操作是很繁琐的,因为涉及到了数组元素的移位操作。
3、数组存放数据的方式是有序的,可重复的,而对于那些需要去掉重复数据的需求就无法满足了。
但是对于数组以上的三点缺陷,在集合中就得到了很好的解决。
使用集合框架的好处:
-
集合的长度可变的。
-
使用Java类封装出一个个容器类,开发者只需要直接调用即可,不用再手动创建容器类。
⭐ 使用集合框架:
🍧一、Collection基本概念:
Collection: 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)进行实现。
🍧二、Collection类的解释与使用:
Java集合List
List代表了有序可重复集合,可直接根据元素的索引来访问。
List接口常用的实现类有:ArrayList、LinkedList、Vector。
List集合特点
集合中的元素允许重复
集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
集合中的元素可以通过索引来访问或者设置
实现类:ArryList
ArrayList的底层结构:是一个数组,根据索引定位元素快,增加、删除操作需要数组的移位,第一次创建集合并添加一个元素时,底层就会创建一个大小为10的数组。
实现类:vector
面试题;vector与ArrayList的区别?
1、底层的扩容机制不同:vector扩容为原数组的两倍,而ArrayList扩容为原数组的1.5倍。
2、内部实现机制不同:vector类的操作方法采用的都是synchronize同步处理,线程安全但效率低。ArrayList类的操作方法却并没有采用synchronize同步处理,线程不安全但效率高。
实现类:LinkedList
LinkedList的底层结构:是一个双向链表,可以充分利用碎片化空间进行存储,查找,修改数据的时间复杂度都是O(n),因为都要遍历整个链表。
Java List总结
1==):ArrayList
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程不安全,效率高
2==):Vector
优点: 底层数据结构是数组,查询快,增删慢。
缺点: 线程安全,效率低
3==):LinkedList
优点: 底层数据结构是链表,查询慢,增删快。
缺点: 线程不安全,效率高
🍧三、Map的基本概念
一般的,我们依然习惯把Map称之为集合,不过要注意区分,Set和List是单元素集合,Map是双元素集合。
单元素集合:每次只能存储一个元素,比如Set和List。
双元素集合:每次需要存储两个元素(一个key和一个value),比如Map。
注意:
1、Map接口并没有继承于Collection接口也没有继承于Iterable接口,所以不能直接对Map使用for-each操作。
2、如果不能理解Map的结构,就直接记住Map每次需要存储两个值,一个是key,一个是value,其中value表示存储的数据,而key就是这一个value的名字。
Map的4个实现类:
1、HashMap
Map接口基于哈希表的实现,是使用频率最高的用于键值对处理的数据类型。
2、Hashtable
Hashtable和HashMap从存储结构和实现来讲有很多相似之处,而且是线程安全的。
3、LinkedHashMap
LinkedHashMap继承了HashMap,是Map接口的哈希表和链接列表实现,它维护着一个双重链接列表,此链接列表定义了迭代顺序,该迭代顺序可以是插入顺序或者是访问顺序。
4、TreeMap
TreeMap实现SortMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序(自然顺序)
🍧四、Map类的使用:
敲黑板!重点:Map中得每个元素属于键值对模式。
如果往map中添加元素时 需要添加key 和 value. 它也属于一个接口,该接口常见得实现类有: HashMap. Map中key有唯一性的特点,不能重复。
1、添加
import java.util.HashMap; import java.util.Map; public class dome { public static void main(String[] args) { Map map = new HashMap<>(); Map map1 = new HashMap<>(); map.put("name","张三"); map.put(18,12); map.put("age",19); //因为 Map具有唯一不能重复的特性,所以后者会把前者覆盖 map.put("name","李四"); map1.put("name","王五"); map1.put("age","20"); //如果指定得key存在,则不放入map中,如果不存在则放入map中 map.putIfAbsent("age",28) ; System.out.println(map); System.out.println(map); //将 map1 中的每一个元素都添加到 map中,如果其中 key值重复,会将前者覆盖 map.putAll(map1); System.out.println(map); } }
2、删除
//根据 key 来删除元素 map.remove(18); System.out.println(map); //清空整个容器 map.clear(); System.out.println(map);
3、修改
//根据 key值来修改元素,但是我们可以直接使用添加功能将前者覆盖可以达到相同效果 map.replace("name","刘德华");//替换元素 System.out.println(map);
4、查询
//判断Map中是否有指定的key boolean a = map.containsKey("name"); System.out.println(a); //根据指定的key返回 相应的Value值 Object b = map.get("name"); System.out.println(b); //返回这个Map 中的所有 key Set s = map.keySet(); System.out.println(s);
5、增强循环--遍历
//返回这个Map 中的所有 key Set s = map.keySet(); System.out.println(s); for(Object k:s){ Object value= map.get(k);// System.out.println(k+"================>"+value); }
总结不易,希望uu们不要吝啬亲爱的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁