类
| 描述
|
AbstractCollection
| 实现了大部分的聚集接口。
|
AbstractList
| 继续于AbstractCollection 而且实现了大部分List接口。
|
AbstractSequentialList
| 继续于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。
|
LinkedList
| 该类实现了List接口,允许有null(空)元素。重要用于创建链表数据布局,该类没有同步方法,如果多个线程同时访问一个List,则必须自己实现访问同步,办理方法就是在创建List时间构造一个同步的List。比方:
List list=Collections.synchronizedList(newLinkedList(...));
LinkedList 查找服从低。
|
ArrayList
| 该类也是实现了List的接口,实现了可变巨细的数组,随机访问和遍历元素时,提供更好的性能。该类也黑白同步的,在多线程的环境下不要使用。ArrayList 增长当前长度的50%,插入删除服从低。
|
AbstractSet
| 继续于AbstractCollection 而且实现了大部分Set接口。
|
HashSet
| 该类实现了Set接口,不允许出现重复元素,不保证集会合元素的顺序,允许包罗值为null的元素,但最多只能一个。
|
LinkedHashSet
| 具有可预知迭代顺序的Set接口的哈希表和链接列表实现。
|
TreeSet
| 该类实现了Set接口,可以实现排序等功能。
|
AbstractMap
| 实现了大部分的Map接口。
|
HashMap
| HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
该类实现了Map接口,根据键的HashCode值存储数据,具有很快的访问速率,最多允许一条记录的键为null,不支持线程同步。
|
TreeMap
| 继续了AbstractMap,而且使用一颗树。
|
WeakHashMap
| 继续AbstractMap类,使用弱密钥的哈希表。
|
LinkedHashMap
| 继续于HashMap,使用元素的自然顺序对元素进行排序.
|
IdentityHashMap
| 继续AbstractMap类,比较文档时使用引用相当。
|
其他聚集类 数据布局
| 特点
| 长处
| 缺点
| 说明
| 实例
|
数组(Arrays)
| 固定巨细,存储相同类型的元素
| 随机访问元素服从高
| 巨细固定,插入和删除元素相对较慢
| 一种基本的数据布局,可以存储固定巨细的相同类型的元素。
| int[] array = new int[5];
|
列表(Lists)—ArrayList
| 动态数组,可变巨细
| 高效的随机访问和快速尾部插入
| 中间插入和删除相对较慢
|
| List<String> arrayList = new ArrayList<>();
|
列表(Lists)—LinkedList
| 双向链表,元素之间通过指针连接
| 插入和删除元素高效,迭代器性能好
| 随机访问相对较慢
|
| List<Integer> linkedList = new LinkedList<>();
|
聚集(Sets)—HashSet
| 无序聚集,基于HashMap实现
| 高效的查找和插入操作
| 不保证顺序
| 用于存储不重复的元素
| Set<String> hashSet = new HashSet<>();
|
聚集(Sets)—TreeSet
| 是有序聚集,底层基于红黑树实现,不允许重复元素
| 提供自动排序功能,适用于需要按顺序存储元素的场景
| 性能相对较差,不允许插入 null 元素
| 用于存储不重复的元素
| Set<Integer> treeSet = new TreeSet<>();
|
映射(Maps)—HashMap
| 基于哈希表实现的键值对存储布局
| 高效的查找、插入和删除操作
| 无序,不保证顺序
| 用于存储键值对
| Map<String, Integer> hashMap = new HashMap<>();
|
映射(Maps)—TreeMap
| 基于红黑树实现的有序键值对存储布局
| 有序,支持按照键的顺序遍历
| 插入和删除相对较慢
| 用于存储键值对
| Map<String, Integer> treeMap = new TreeMap<>();
|
栈(Stack)
| 代表一个栈,通常按照后进先出(LIFO)的顺序操作元素
|
| 新元素被添加到栈的顶部,而只能从栈的顶部移除元素。最后添加的元素是第一个被移除的。
| 是一种线性数据布局,它按照后进先出(Last In, First Out,LIFO)的原则管理元素
| Stack<Integer> stack = new Stack<>();
|
队列(Queue)
| 代表一个队列,通常按照先进先出(FIFO)的顺序操作元素
|
|
| 遵循先进先出(FIFO)原则,常见的实现有 LinkedList 和 PriorityQueue
| Queue<String> queue = new LinkedList<>();
|
堆(Heap)
|
|
|
| 优先队列的基础,可以实现最大堆和最小堆
| PriorityQueue<Integer> minHeap = new PriorityQueue<>();
PriorityQueue<Integer> maxHeap = new PriorityQueue<>(Collections.reverseOrder());
|
树(Trees)
|
|
|
| TreeNode 类型,可以用于构建二叉树等数据布局
| class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
|
图(Graphs)
|
|
|
| 图的体现通常需要自界说数据布局或使用图库,Java 没有内建的图类
|
|
数据布局
| 说明
|
罗列(Enumeration)
| 罗列(Enumeration)接口虽然它自己不属于数据布局,但它在其他数据布局的范畴里应用很广。 罗列(The Enumeration)接口界说了一种从数据布局中取回连续元素的方式
|
位聚集(BitSet)
| 位聚集类实现了一组可以单独设置和清除的位或标记。该类在处置惩罚一组布尔值的时间非常有用,你只需要给每个值赋值一"位",然后对位进行得当的设置或清除,就可以对布尔值进行操作了。
|
向量(Vector)
| 向量(Vector)类和传统数组非常相似,但是Vector的巨细能根据需要动态的变化。
和数组一样,Vector对象的元素也能通过索引访问。
使用Vector类最重要的好处就是在创建对象的时间不必给对象指定巨细,它的巨细会根据需要动态的变化
|
栈(Stack)
| 栈(Stack)实现了一个后进先出(LIFO)的数据布局。
你可以把栈明白为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。
当你从栈中取元素的时间,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。
|
字典(Dictionary)
| 字典(Dictionary) 类是一个抽象类,它界说了键映射到值的数据布局。
当你想要通过特定的键而不是整数索引来访问数据的时间,这时间应该使用 Dictionary。
由于 Dictionary 类是抽象类,以是它只提供了键映射到值的数据布局,而没有提供特定的实现。
Dictionary 类在较新的 Java 版本中已经被弃用(deprecated),保举使用 Map 接口及其实现类,如 HashMap、TreeMap 等,来代替 Dictionary。
|
哈希表(Hashtable)
| Hashtable类提供了一种在用户界说键布局的基础上来构造数据的手段。
比方,在地点列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人名。
哈希表键的详细寄义完全取决于哈希表的使用情景和它包罗的数据。
|
属性(Properties)
| Properties 继续于 Hashtable.Properties 类体现了一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。
Properties 类被许多Java类使用。比方,在获取环境变量时它就作为System.getProperties()方法的返回值。
|
方法
| 描述
|
public boolean add(E e)
| 链表末尾添加元素,返回是否乐成,乐成为 true,失败为 false。
|
public void add(int index, E element)
| 向指定位置插入元素。
|
public boolean addAll(Collection c)
| 将一个聚集的所有元素添加到链表后面,返回是否乐成,乐成为 true,失败为 false。
|
public boolean addAll(int index, Collection c)
| 将一个聚集的所有元素添加到链表的指定位置后面,返回是否乐成,乐成为 true,失败为 false。
|
public void addFirst(E e)
| 元素添加到头部。
|
public void addLast(E e)
| 元素添加到尾部。
|
public boolean offer(E e)
| 向链表末尾添加元素,返回是否乐成,乐成为 true,失败为 false。
|
public boolean offerFirst(E e)
| 头部插入元素,返回是否乐成,乐成为 true,失败为 false。
|
public boolean offerLast(E e)
| 尾部插入元素,返回是否乐成,乐成为 true,失败为 false。
|
public void clear()
| 清空链表。
|
public E removeFirst()
| 删除并返回第一个元素。
|
public E removeLast()
| 删除并返回最后一个元素。
|
public boolean remove(Object o)
| 删除某一元素,返回是否乐成,乐成为 true,失败为 false。
|
public E remove(int index)
| 删除指定位置的元素。
|
public E poll()
| 删除并返回第一个元素。
|
public E remove()
| 删除并返回第一个元素。
|
public boolean contains(Object o)
| 判断是否含有某一元素。
|
public E get(int index)
| 返回指定位置的元素。
|
public E getFirst()
| 返回第一个元素。
|
public E getLast()
| 返回最后一个元素。
|
public int indexOf(Object o)
| 查找指定元素从前去后第一次出现的索引。
|
public int lastIndexOf(Object o)
| 查找指定元素最后一次出现的索引。
|
public E peek()
| 返回第一个元素。
|
public E element()
| 返回第一个元素。
|
public E peekFirst()
| 返转头部元素。
|
public E peekLast()
| 返回尾部元素。
|
public E set(int index, E element)
| 设置指定位置的元素。
|
public Object clone()
| 克隆该列表。
|
public Iterator descendingIterator()
| 返回倒序迭代器。
|
public int size()
| 返回链表元素个数。
|
public ListIterator listIterator(int index)
| 返回从指定位置开始到末尾的迭代器。
|
public Object[] toArray()
| 返回一个由链表元素构成的数组。
|
public T[] toArray(T[] a)
| 返回一个由链表元素转换类型而成的数组。
|
实例代码 方法
| 描述
|
clear()
| 删除 hashMap 中的所有键/值对
|
clone()
| 复制一份 hashMap
|
isEmpty()
| 判断 hashMap 是否为空
|
size()
| 计算 hashMap 中键/值对的数量
|
put()
| 将键/值对添加到 hashMap 中
|
putAll()
| 将所有键/值对添加到 hashMap 中
|
putIfAbsent()
| 如果 hashMap 中不存在指定的键,则将指定的键/值对插入到 hashMap 中。
|
remove()
| 删除 hashMap 中指定键 key 的映射关系
|
containsKey()
| 查抄 hashMap 中是否存在指定的 key 对应的映射关系。
|
containsValue()
| 查抄 hashMap 中是否存在指定的 value 对应的映射关系。
|
replace()
| 替换 hashMap 中是指定的 key 对应的 value。
|
replaceAll()
| 将 hashMap 中的所有映射关系替换成给定的函数所实行的结果。
|
get()
| 获取指定 key 对应对 value
|
getOrDefault()
| 获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值
|
forEach()
| 对 hashMap 中的每个映射实行指定的操作。
|
entrySet()
| 返回 hashMap 中所有映射项的聚集聚集视图。
|
keySet()
| 返回 hashMap 中所有 key 构成的聚集视图。
|
values()
| 返回 hashMap 中存在的所有 value 值。
|
merge()
| 添加键值对到 hashMap 中
|
compute()
| 对 hashMap 中指定 key 的值进行重新计算
|
computeIfAbsent()
| 对 hashMap 中指定 key 的值进行重新计算,如果不存在这个 key,则添加到 hasMap 中
|
computeIfPresent()
| 对 hashMap 中指定 key 的值进行重新计算,前提是该 key 存在于 hashMap 中。
|
实例代码