集合框架详解 [精选]

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍集合框架的两个接口超级详细介绍,集合框架的使用以及部分理论知识

欢迎点赞  收藏 ⭐留言评论 私信必回哟

博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

⭐ 什么是集合?

Java集合体系框架:

Collection派生出了两个子接口:

集合Map:

⭐ 为什么使用集合

相对比于数组:

使用集合框架的好处:

⭐ 使用集合框架:

一、Collection基本概念:

二、Collection类的解释与使用:

Java集合List

List集合特点

实现类:ArryList

实现类:vector

实现类:LinkedList

Java List总结

三、Map的基本概念

Map的4个实现类:

2、Hashtable

3、LinkedHashMap

4、TreeMap

四、Map类的使用:

                1、添加

2、删除

3、修改

4、查询

5、增强循环(遍历)


⭐ 什么是集合?

集合是Java中提供的一种容器,可以用来存储多个数据,根据不同存储方式形成的体系结构,就叫做集合框架体系(掌握)。集合也时常被称为容器。

Java集合体系框架:

集合框架详解 [精选]_第1张图片

Java集合类主要由两个根接口Collection和Map派生出来的。如上图,左边的Collection接口为单列集合的接口,右边的Map接口为双列集合的接口,下面分别对应他们的子接口以及对应的实现类。

Collection派生出了两个子接口:
  • 1)List:List代表了有序可重复集合,可直接根据元素的索引来访问
  • 2)Set:Set代表无序不可重复集合,只能根据元素本身来访问
集合Map:

Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。

集合框架详解 [精选]_第2张图片

⭐ 为什么使用集合

相对比于数组:

  • 1、数组初始化后,其长度不可以再被改变,也就是说数组存放数据的个数是事先确定的。
  • 2、数组中对于插入元素和删除元素的操作是很繁琐的,因为涉及到了数组元素的移位操作。
  • 3、数组存放数据的方式是有序的,可重复的,而对于那些需要去掉重复数据的需求就无法满足了。

但是对于数组以上的三点缺陷,在集合中就得到了很好的解决。

使用集合框架的好处:

  • 集合的长度可变的。

  • 使用Java类封装出一个个容器类,开发者只需要直接调用即可,不用再手动创建容器类。

⭐ 使用集合框架:

一、Collection基本概念:

Collection: 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)进行实现。

二、Collection类的解释与使用:

Java集合List
  • List代表了有序可重复集合,可直接根据元素的索引来访问。
  • List接口常用的实现类有:ArrayList、LinkedList、Vector。
List集合特点

集合中的元素允许重复
集合中的元素是有顺序的,各元素插入的顺序就是各元素的顺序
集合中的元素可以通过索引来访问或者设置

集合框架详解 [精选]_第3张图片

实现类: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是双元素集合。

  1. 单元素集合:每次只能存储一个元素,比如Set和List。
  2. 双元素集合:每次需要存储两个元素(一个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!!如有问题,欢迎评论区批评指正

你可能感兴趣的:(Java,开发语言,java,数据结构)