Map实现类,集合工具类
发布日期:2021-05-07 08:21:02 浏览次数:20 分类:精选文章

本文共 2235 字,大约阅读时间需要 7 分钟。

文章目录

一、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
m = new TreeMap<>(); Map
h = new HashMap<>();// 创建 HashMap 对象 Sites HashMap
Sites = new HashMap
(); // 添加键值对 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
s) Map synchronizedMaP(Map
m) List synchronizedList(List
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[]);
上一篇:线性扫描--求数组中三个数最大乘积
下一篇:Collection之List、Set

发表评论

最新留言

不错!
[***.144.177.141]2025年03月25日 06时55分36秒