第11章 – 持有对象 – 总结,Collection 和 Map
第11章 – 持有对象 – 总结,Collection 和 Map
1. Java集合主要有两类 Collection 和 Map(都是接口)
1.1 Collection 有 List,Set,Queue接口
1.1.1 List
List本身维持了元素的插入顺序,如ArrayList,LinkedList,
List实现中没有让元素按照自然排序方式存储的实现(类似TreeSet这类的).
但是可以使用工具类的下面两个方法来排序
static <T extends Comparable<? super T>> void sort(List<T> list)
根据元素的自然顺序 对指定列表按升序进行排序。
static <T> void sort(List<T> list, Comparator<? super T> c)
根据指定比较器产生的顺序对指定列表进行排序。
自然顺序排序时,要求放入List中的元素实现了comparable接口.
或者传入一个Comparator排序.
1.1.2 Set
Set不保存重复的元素,即Set中的元素是没有重复的.Set具有和Collection完全一样的接口.
Set常见的实现有HashSet,LinkedHashSet和TreeSet
其中,HashSet内部使用HashMap来保存元素,不保证元素按照插入顺序保存.
而LinkedHashSet在迭代时,保证按照元素的插入顺序迭代.
TreeSet可以将元素按照自然顺序排序,然后存放.所以TreeSet中的元素需要实现Comparable接口
或者在构造TreeSet时传入一个Comparator.实际上TreeSet实现了Set的一个子接口SortedSet,从而
实现了对Set中元素按照自然顺序排序.
1.1.3 Queue
Queue是一个典型的先进先出(FIFO)容器.
LinkedList实现了Queue.
Queue的另外一个实现类 public class PriorityQueue<E>extends AbstractQueue<E>implements Serializable
称为优先级队列,此队列中的元素需要实现Comparable接口以便按照自然顺序决定优先级.
此队列的头 是按指定排序方式确定的最小 元素。
如果多个元素都是最小值,则头是其中一个元素——选择方法是任意的。
队列获取操作 poll、remove、peek 和 element 访问处于队列头的元素。
1.2 Map
Map的地位是和Collection等同的.
Map保存的是键值对. 一个键对应一个对象,不能有重复的键.但是不同的键可以对应同一个对象.
这样一个Map就可以派生出以下三个视图:
(1) 包含所有键的Set(因为键是不能重复的),通过 Set<K> keySet() 返回此映射中包含的键的 Set 视图。
(2) 包含所有键对应的对象的对象Collection, 通过 Collection<V> values() 返回此映射中包含的值的 Collection 视图。
(3) 包含所有键值对的set.
通过Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 Set 视图。
因为Map的键值对都是一个实现了Map.Entry<K,V>接口的对象,因为键的唯一导致这个键值对也是唯一的.
所以所有键值对的集合就是一个Set.
Map.Entry<K,V>接口的方法如下:
boolean equals(Object o) 比较指定对象与此项的相等性。
K getKey() 返回与此项对应的键。
V getValue() 返回与此项对应的值。
int hashCode() 返回此映射项的哈希码值。
V setValue(V value) 用指定的值替换与此项对应的值(可选操作)。
Map实现类,HashMap,HashTable,LinkedHashMap,TreeMap等.
其中HashTable是线程安全的,
LinkedHashMap 维持着键值对的插入顺序,
TreeMap中的键是按照键对象进行自然排序法,排好序的.
赞 赏 微信赞赏
支付宝赞赏
本文固定链接: https://www.jack-yin.com/coding/thinking-in-java/2116.html | 边城网事