Java-集合
前言
介绍Java集合相关的内容。
集合体系结构
集合整体上来说可以分为两类:
- Collection:单列集合。(集合元素为一个数据)
- Map:双列集合。(集合元素为一对数据(键值对))
下面将展开详细介绍。
Collection(单列集合)
Collection集合又可以分为两类:
- List:添加的元素有序、可重复、有索引。
- Set:添加的元素无序、不重复、无索引。
Collection接口的一些常用方法:
方法名称 | 说明 |
---|---|
public boolean add (E e) | 把给定的对象添加到当前集合中 |
public void clear ( ) | 清空集合中所有的元素 |
public boolean remove (E e) | 把给定的对象在当前集合中删除 |
public boolean contains (Object obj) | 判断当前集合中是否包含给定的对象 |
public boolean isEmpty ( ) | 判断当前集合是否为空 |
public int size ( ) | 返回集合中元素的个数/集合的长度 |
List集合
List集合的特点:
- 有序:存和取的元素顺序一致。
- 有索引:可以通过索引操作元素。
- 可重复:存储的元素可以重复。
List接口一些常用的特有方法(有索引):
方法名称 | 说明 |
---|---|
void add (int index, E element) | 在此集合中的指定位置插入指定的元素 |
E remove (int index) | 删除指定索引处的元素,返回被删除的元素 |
E set (int index, E element) | 修改指定索引处的元素,返回被修改的元素 |
E get (int index) | 返回指定索引处的元素 |
ArrayList
- 底层是数组结构。
其他无需特别说明,如有再补充。
LinkedList
- 底层是双向链表的数据结构。
- 查询慢,增删快。
LinkedList集合一些特有的方法(针对首尾元素):
方法名称 | 说明 |
---|---|
public void addFirst (E e) | 在该列表开头插入指定元素 |
public void addLast (E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst ( ) | 返回此列表中的第一个元素 |
public E getLast ( ) | 返回此列表中的最后一个元素 |
public E removeFirst ( ) | 从此列表中删除并返回第一个元素 |
public E removeLast ( ) | 从此列表中删除并返回最后一个元素 |
Vector
已淘汰。
Set集合
Set集合的特点:
- 无序:存和取的元素顺序不一致。
- 无索引:没有带索引的方法,不能通过索引来操作元素。
- 不重复:存储的元素不可以重复。(可以利用该特性进行元素去重)
Set集合的一些实现类通过底层的数据结构可以实现部分特有属性:
- HashSet:无序、不重复、无索引。
- LinkedHashSet:有序、不重复、无索引。
- TreeSet:可排序、不重复、无索引。
HashSet
-
底层采用哈希表存储数据。
- 哈希表是一种对增删改查数据性能都较好的数据结构。
- 在JDK8之后,哈希表的组成结构为:数组 + 链表 + 红黑树
LinkedHashSet
-
底层采用哈希表存储数据,但是在每个元素上又增加了双链表机制记录存储顺序。
-
特性:有序、不重复、无索引。
可以保证存和取的元素顺序一致。
TreeSet
-
底层基于红黑树的数据结构实现元素排序,增删改查性能都较好。
-
特性:可排序、不重复、无索引。
按照元素的默认规则(由小到大)排序:
- 对于数值类型(Integer、Double),默认按照从小到大的顺序进行排序。
- 对于字符、字符串类型,默认按照字符在ASCII码表中的数字升序进行排序。
Map(双列集合)
Map双列集合的特点:
- 双列集合一次需要存取一对数据(键 + 值)
- 键不能重复,值可以重复
- 键和值是一一对应的,每一个键只能找到自己对应的值
- “键 + 值” 这个整体称之为 “键值对” / “键值对对象”,在Java中叫做 “Entry对象”
Map接口的一些常用方法:
方法名称 | 说明 |
---|---|
V put (K key, V value) | 添加元素 |
V remove (Object key) | 根据键删除键值对元素 |
void clear ( ) | 移除所有键值对元素 |
boolean containsKey (Object key) | 判断集合是否包含指定的键 |
boolean containsValue (Object value) | 判断集合是否包含指定的值 |
boolean isEmpty ( ) | 判断集合是否为空 |
int size ( ) | 集合的长度,也就是集合中键值对的个数 |
HashMap
- 底层基于哈希表结构实现。
- 特性由键决定:无序、不重复、无索引。
- 如果键存储的是自定义对象,则需要重写hashCode()和equals()方法;如果值存储的是自定义对象,则无需重写hashCode()和equals()方法。
LinkedHashMap
- 底层采用哈希表存储数据,但是在每个键值对元素上又增加了双链表机制记录存储顺序。
- 特性由键决定:有序、不重复、无索引。
TreeMap
-
底层基于红黑树的数据结构实现元素排序,增删改查性能都较好。
-
特性由键决定:可排序、不重复、无索引。
可排序:对键进行排序。
Collections
Collections不是集合,而是集合的工具类。
Collections常用的方法:
方法名称 | 说明 |
---|---|
public static < T > boolean addAll (Collection < T > c, T … elements) | 批量添加元素 |
public static void shuffle (List < ? > list) | 打乱List集合元素的顺序 |
public static < T > sort (List < T > list) | 排序 |
public static < T > sort (List < T > list, Comparator < T > c) | 根据指定的规则进行排序 |
public static < T > int binarySearch (List < T > list, T key) | 以二分法查找元素 |
public static < T > copy (List < T > dest, List < T > src) | 拷贝集合中的元素 |
public static < T > fill (List < T > list, T obj) | 使用指定的元素填充集合 |
public static < T > max/min (Collection < T > coll) | 根据默认的自然排序获取最大/最小值 |
public static < T > (List < ? > list, int i, int j) | 交换集合中指定位置的元素 |
后记
长时间不用java基础的内容,偶然刷leetcode时发现忘记了,故写此篇总结一下。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 花猪のBlog!
评论
TwikooWaline