关于集合List、Set 和 Map


前言

\quad\quad 集合类是 Java 数据结构实现,是 java.util 包下的重要内容,以不同的方式对元素进行分组,以及各种元素的操作方法。
\quad\quad 集合类是可以用来存放多个对象的类,不同集合类拥有不同的手段,适合不同的场合。


集合

\quad\quad 类似于用来存储对象数据的数组集合是能够用来存放对象的一种存储工具,特别是加入了泛型的使用,为我们数据的存储拓展了思路。


集合类分类

\quad\quad Java 的集合可以分为两大类:Collection 接口 和 Map 接口。
用我理解的来说,Collection 是单列集合, Map 是双列集合:用键值对来表示( 配对
\quad\quad 其中,Collection 又能分别两个子接口 ListSet,如图:集合分类主脉络
在这里插入图片描述

\quad\quad 接下来的有关集合类的子类,可能会因为学习进度而部分内容尚未更新,比如 Vector 集合、 TreeSet 集合、 Hashtable 集合等,所以会有些内容上会有欠缺


Collection

\quad\quad Collection 表示一组对象,这些对象也称为 collection 的元素,在存储元素上,由于有了不同的需求,比如是否允许重复元素,是否需要有序之类的。
\quad\quad 在java中,提供了 Collection 接口, Collection 接口分别由两个子接口 List 接口和 Set 接口进行了继承(extends):
Collection接口


List

List extends Collection

\quad\quad List ,可以简单视之为双向连结串行,以线性列的方式管理物件集合。有以下特点:

  1. 索引
  2. 允许存储重复元素
  3. 有序集合,元素存取顺序一致

注意:防止索引越界异常

\quad 常用方法:

public void add (int index, E element )//指定元素 添加到 指定位置;中间插入(区分于set)

public E get (int index) :  //返回 集合指定位置的 元素;

public E remove (int index) :  //移除集合 位置 中的元素,返回 被移除元素;

public E set (int index, E element ) : //用 指定元素 替换集合中 位置 的元素 ,返回 替换前 元素
......

在这里插入图片描述


ArrayList

 ArrayList implements List

\quad\quad ArrayList 是 List 接口的实现类,是一个长度可变的数组,地址连续。
\quad\quad 有以下特点:

  • 是一个长度可变的数组
  • 底层是数组实现,查询快,增删慢
  • 有序,可重复
.contains(Object obj)//判断是否拥有 Obj,返回 true/ false

.clear();      // 清空集合

.isEmpty();      // 判断集合是否为空

.size();        // 获取集合长度

.toArray();   //集合转数组,然后可以用遍历
......

LinkedList

 LinkedList implements List

\quad\quad LinkedList 也是 List 接口的实现类,由如下特点;

  • 底层是链表结构:查询慢,增删快;
  • 包含大量首位元素操作方法
.addFirst()

.addLast()

.getFirst()

.getLast()

.removeFirst()

.removeLast()

Vector


Set

Set extends Collection

\quad\quad 注重独一无二,该体系集合不会存储重复的元素

在这里插入图片描述
\quad\quad Set 有如下特点:

  • 不允许存储重复元素
  • 没有索引,索引方法也无,也不能使用普通for循环遍历
  • 无序,唯一

HashSet

HashSet  implements Set

HashSet 的特点:

  • 不允许存储重复元素
  • 没有索引,索引方法也无,也不能使用普通for循环遍历
  • 无序的集合(存取元素的顺序有可能不一致)
  • 底层是一个哈希表结构(查询非常快)

哈希表依赖两个方法:hashCode()equals()

LinkHashSet
LinkHashSet extends HashSet 

LinkHashSet 的特点:

  • 底层是哈希表(数组+链表/红黑树)+链表:多一条链表(记录元素存储顺序
  • 链表保证有序
  • 哈希表保证不重复

哈希表依赖两个方法:hashCode()equals()

TreeSet


Map

在这里插入图片描述

\quad\quad Collections是单列集合,而Map是双列集合。
\quad\quad 有如下特点:

  • 双列集合,每个元素包含键值对
  • key 不允许重复, value允许重复
  • key 与 value 一一对应

Map<k,v>,k 代表键,v代表值,一一对应。
Map 接口常用方法:

public V put (k key, v value )   //指定 键 与 值 添加到 Map 集合中,key重复与否有不同的操作

public V remove (Object key) //删除指定键对于的键值对,返回被删除值;不存在, null

public V get (Object key) // 获取集合中该键位对应的值

boolean containKey (Object key)  // 判断集合中是否有这个 键
...

HashMap

HashMap<k,v> implements Map<k,v>

\quad\quad HashMap 实现了 Map,底层是哈希表,有以下特点:

  • 查询速度很
  • 无序的集合,存取的元素顺序可能不一致

哈希表依赖两个方法:hashCode()equals()

LinkedHashMap
LinkedHashMap<k,v> extends HashMap<k,v>

\quad\quad LinkedHashMap : 哈希表+链表,有以下特点:

  • 元素唯一
  • 有序

Hashtable


参考资料

[1] https://www.bilibili.com/video/BV1uJ411k7wy?t=1015
[2] https://www.cnblogs.com/EasonJim/p/7967138.html
[3] https://www.cnblogs.com/111testing/p/8100101.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值