Java学习笔记(一)
Java学习:关于集合List、Set 和 Map
前言
集合类是 Java 数据结构实现,是 java.util 包下的重要内容,以不同的方式对元素进行分组,以及各种元素的操作方法。
集合类是可以用来存放多个对象的类,不同集合类拥有不同的手段,适合不同的场合。
集合
类似于用来存储对象数据的数组,集合是能够用来存放对象的一种存储工具,特别是加入了泛型的使用,为我们数据的存储拓展了思路。
集合类分类
Java 的集合可以分为两大类:Collection 接口 和 Map 接口。
用我理解的来说,Collection 是单列集合, Map 是双列集合:用键值对来表示(键 配对 值)
其中,Collection 又能分别两个子接口 List 和 Set,如图:
接下来的有关集合类的子类,可能会因为学习进度而部分内容尚未更新,比如 Vector 集合、 TreeSet 集合、 Hashtable 集合等,所以会有些内容上会有欠缺
Collection
Collection 表示一组对象,这些对象也称为 collection 的元素,在存储元素上,由于有了不同的需求,比如是否允许重复元素,是否需要有序之类的。
在java中,提供了 Collection 接口, Collection 接口分别由两个子接口 List 接口和 Set 接口进行了继承(extends):
List
List extends Collection
List ,可以简单视之为双向连结串行,以线性列的方式管理物件集合。有以下特点:
- 有索引
- 允许存储重复元素
- 有序集合,元素存取顺序一致
注意:防止索引越界异常
常用方法:
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
ArrayList 是 List 接口的实现类,是一个长度可变的数组,地址连续。
有以下特点:
- 是一个长度可变的数组
- 底层是数组实现,查询快,增删慢
- 有序,可重复
.contains(Object obj)//判断是否拥有 Obj,返回 true/ false
.clear(); // 清空集合
.isEmpty(); // 判断集合是否为空
.size(); // 获取集合长度
.toArray(); //集合转数组,然后可以用遍历
......
LinkedList
LinkedList implements List
LinkedList 也是 List 接口的实现类,由如下特点;
- 底层是链表结构:查询慢,增删快;
- 包含大量首位元素操作方法
.addFirst()
.addLast()
.getFirst()
.getLast()
.removeFirst()
.removeLast()
Vector
…
Set
Set extends Collection
注重独一无二,该体系集合不会存储重复的元素
Set 有如下特点:
- 不允许存储重复元素
- 没有索引,索引方法也无,也不能使用普通for循环遍历
- 无序,唯一
HashSet
HashSet implements Set
HashSet 的特点:
- 不允许存储重复元素
- 没有索引,索引方法也无,也不能使用普通for循环遍历
- 无序的集合(存取元素的顺序有可能不一致)
- 底层是一个哈希表结构(查询非常快)
哈希表依赖两个方法:hashCode()和equals()
LinkHashSet
LinkHashSet extends HashSet
LinkHashSet 的特点:
- 底层是哈希表(数组+链表/红黑树)+链表:多一条链表(记录元素存储顺序)
- 链表保证有序,
- 哈希表保证不重复
哈希表依赖两个方法:hashCode()和equals()
TreeSet
…
Map
Collections是单列集合,而Map是双列集合。
有如下特点:
- 双列集合,每个元素包含键值对
- 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>
HashMap 实现了 Map,底层是哈希表,有以下特点:
- 查询速度很快
- 无序的集合,存取的元素顺序可能不一致
哈希表依赖两个方法:hashCode()和equals()
LinkedHashMap
LinkedHashMap<k,v> extends HashMap<k,v>
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
下一篇: Java学习笔记(一)