集合框架详解 [精选]

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!!如有问题,欢迎评论区批评指正😁

posted @ 2023-11-24 09:42  锦湘  阅读(28)  评论(0编辑  收藏  举报