Java 学习:集合
集合
一、集合说明
Java集合类存放在 java.util包中,是用来存放对象的容器。
注意:集合只能存放对象。就算将基本数据类型添加到集合中,它底层会自动转成包装类。
二、集合框架图
从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个个元素集合,另一种是图(Map),存储键/值对映射。
三、常用集合分类
Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素有序保存,保存的元素可重复,查找元素效率高,增删效率低,因为会引起其他元素位置改变
│—————-├ LinkedList: 接口实现类,底层是链表, 增删快,查询慢, 线程不安全
│—————-├ ArrayList: 接口实现类, 底层是数组, 增删慢,查询快, 线程不安全
│—————-└ Vector: 接口实现类, 底层是数组, 增删慢, 查询快, 线程安全
│ ———————-└ Stack: 是Vector类的实现类,它实现了一个标准的后进先出的栈。
│
└——-Set 接口: 元素无序保存,不可存放重复的元素,检索效率低下,增删效率高,增删不会引起元素位置改变
├—————-└HashSet: 底层使用hash表(数组)存储元素,线程不安全,可以且只能放一个null
│————————└ LinkedHashSet: 底层是链表+哈希表,链表维护元素的插入次序,哈希表保证了元素的唯一性
└ —————-TreeSet: 底层是二叉树,元素是自动排好序,不允许放null
Map 接口 键值对的集合 (双列集合)
├———Hashtable: 接口实现类, 线程安全,不允许null的键或值,比HashMap效率低
├———HashMap: 接口实现类,线程不安全,key实现就是HashSet所以不能重复,value可以重复;有且只能有一个key为null,value可以为null
│—————–├ LinkedHashMap: 继承于HashMap,双向链表和哈希表实现,线程不安全
│—————–└ WeakHashMap: 继承AbstractMap类
├ ——–TreeMap: 继承了AbstractMap类,基于红黑树并对所有的key进行排好序,线程不安全
└———IdentityHashMap: 继承AbstractMap类,线程不安全
四、Arrays 和 Collections
为了方便对Array对象、Collection对象进行操作,在 java.util包中提供了Arrays类和Collections类对其进行操作。
Arrsys:是数组的工具类,提供了对数组操作的工具方法。
Collections:是集合对象的工具类,提供了操作集合的工具方法。
其中Arrays和Collections中所有的方法都为静态的,不需要创建对象,直接使用类名调用即可,简便了用户写代码,不需要每次自己写操作的代码了
Collections常用方法:
-
void reverse(List list) //反转list列表中元素的顺序
-
void shuffle(List list) //打乱list列表中的元素顺序
-
void sort(List list) //将list列表中的元素进行升序排序
-
void sort(List list,Comparator c) //将list列表中的元素按照 c 中定制的排序逻辑进行排序
-
void swap(List list,int i,int j) //将list列表中的 i和j 索引处的元素交换
-
int frequency(Collection c,Object o) //统计并返回 c 集合中,o 元素出现的次数
-
boolean replaceAll(List list,Object oldVal,Object newVal) //在list集合中将所有的oldVal元素替换成newVal,如有成功替换的元素就返回true
Arrays常用方法:
-
List<T> asList(T... a) //将a数组或多个a对象,转化并返回成大小固定的列表,该列表不能使用add和remove方法改变其长度
-
void sort(Object[] a) //对a数组进行升序排序
-
void sort(T[] a,Comparator c) //对a数组进行 c 定制的排序逻辑进行排序
-
String toString(Object[] a) //将a数组转成字符串
-
T[] copyOf(T[] a,int length) //对a数组进行复制length长度,返回新的数组
-
void fill(Object[] a,Object val) //使用指定的val元素对a数组进行填充
常用集合中的数据结构:
ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表,依赖hashCode()和equals()
TreeXxx:底层数据结构是二叉树,两种方式排序:自然排序和比较器排序
文连接,否则保留追究法律责任的权利。