文章目录
一、Map接口
1. HashMap
数据结构:JDK1.8之前:哈希表(数组+单向链表);JDK1.8之后:哈希表(数组+单向链表+红黑树),当链表长度超过阈值(8)时,链表将转换为红黑树。
特点:查询快,元素无序,key不允许重复但可以为null,value可以重复。
- HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。
- HashMap 实现了 Map 接口,根据键的 HashCode 值存储数据,具有很快的访问速度,最多允许一条记录的键为 null,不支持线程同步。
- HashMap 是无序的,即不会记录插入的顺序。
- HashMap 继承于AbstractMap,实现了 Map、Cloneable、java.io.Serializable 接口。
public class MapDemo {
public static void main(String[] args) {
Map<String, String> m = new TreeMap<>();
Map<String, String> h = new HashMap<>();// 创建 HashMap 对象 Sites
HashMap<Integer, String> Sites = new HashMap<Integer, String>();
// 添加键值对
Sites.put(1, "Google");
Sites.put(2, "Runoob");
Sites.put(3, "Taobao");
Sites.put(4, "Zhihu");
// 输出 key 和 value
for (Integer i : Sites.keySet()) {
System.out.println("key: " + i + " value: " + Sites.get(i));
}
// 返回所有 value 值
for (String value : Sites.values()) {
// 输出每一个value
System.out.print(value + ", ");
}
}
}
2. LinkedHashMap
JDK1.8之前:哈希表(数组+双向链表);JDK1.8之后:哈希表(数组+双向链表+红黑树),当链表长度超过阈值(8)时,转换为红黑树。
3. HashTable(不用)
哈希表 ,key不允许重复并且不可以为null,value可以重复。
底层分析:HashTable和Vector一样是古老的集合,有遗留缺陷,在JDK1.2之后 被更先进的集合取代了;HashTable是线程安全的,速度慢,HashMap是线程不安全的,速度快;
ps:Hashtable的子类Properties现在依然活跃,Properties集合是一个唯一和IO流结合的集合。
4. TreeMap
数据结构: 红黑树
特点:查询快,元素有序,key不允许重复并且不可以为null,value可以重复。
5. ConcurrentHashMap
JDK1.7 Segment 数组、HashEntry 组成,和 HashMap 一样,仍然是数组加链表。
JDK1.8 采用红黑树等
二、工具类
1. Collections工具类
// 对list集合排序
sort(list);
sort(list,comparator)
// 二分查找
int binarySearch(list,key);
int binarySearch(list,key,Comparator);
// 按照指定比较器进行排序
max(Collection);
max(Collection,comparator);
min(Collection);
min(Collection,comparator);
// 反转
reverse(list);
// 将不同步的集合变为同步的集合
Set synchronizedSet(SET<t> s)
Map synchronizedMaP(Map<K,V> m)
List synchronizedList(List<T> list)
2. Arrays工具类
// 二分查找
binarySearch(int[]);
binarySearch(double[]);
// 数组排序
sort(int [])
sort(char[])
// 将数组变成字符串
toString(int []);
// 复制数组
copyOf(int/boolean...[] original,int newLength);
original:源数组
newLenght:新数组长度
copyOfRange(int/float[]... original, int from, int
// 比较数组是否相同
equals(int[],int[]);
// 数组变成集合
Arrays.asList(T[]);