Map特点Map是一种依照键(key)存储元素的容器,键(key)很像下标,在List中下标是整数。在Map中键(key)可以使任意类型的对象。Map中不能有重复的键(Key),每个键(key)都有一个对应的值(value)。一个键(key)和它对应的值构成map集合中的一个元素。
Map集合的功能
- 键值对应关系
- 一个键对应一个值
- 键不能重复,值可以重复
- 元素存取无序
import java.util.HashMap;
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map map = new HashMap<>();
Boolean flag = map.isEmpty(); //判断集合是否为空
System.out.println(flag);
map.put("name", "张三"); //添加集合元素
map.put("age", "27");
map.put("gender", "女");
System.out.println("集合:"+map);
System.out.println("集合长度:"+map.size());
System.out.println("获取集合的某个键的值:"+map.get("name"));
System.out.println("获取集合所有的键:"+map.keySet());
System.out.println("获取集合所有的值:"+map.values());
System.out.println("获取集合所有的键和值:"+map.entrySet());
System.out.println("根据键删除键值对元素:"+map.remove("age"));
}
}
Map集合的各个子类
ArrayList、linkedList、Vector三者区别:1)Hashtable:
底层是哈希表数据结构,线程是同步的,不可以存入null键,null值。
效率较低,被HashMap 替代。
2)HashMap:(数据无序、唯一)
底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。
要保证键的唯一性,需要覆盖hashCode方法,和equals方法。
3)linkedHashMap:(数据有序、唯一)
该子类基于哈希表又融入了链表。可以Map集合进行增删提高效率。
4)TreeMap:(数据有序、唯一)
底层是二叉树数据结构。可以对map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。return 0,来判断键的唯一性。
HashMap与HashTable区别:Vector:数组,线程安全
ArrayList:List子类,数据存取有序,可重复;底层是数组结构实现,有索引,查询快、增删慢;线程不安全
linkedList:List子类,数据存取有序,可重复;底层是链表结构实现,指针,查询慢、增删快;线程不安全
HashSet与TreeSet区别:1)底层数据结构不同:HashTable只有数组+链表(JDK1就提出);HashMap在JDK1.8之前 数组+链表,在1.8之后 数组+链表/红黑树
2)初始化容量不同:HashMap 的初始容量为:16,Hashtable 初始容量为:11,两者的负载因子默认都是:0.75
3)扩容机制不同:当已用容量>总容量 * 负载因子时,HashMap 扩容规则为当前容量翻倍,Hashtable 扩容规则为当前容量翻倍 +1
4)Hashtable是不允许键或值为 null 的,HashMap 的键值则都可以为 null
Collection和Collections的区别:HashSet:
1)不能保证元素的排列顺序,顺序有可能发生变化
2)集合元素可以是null,但只能放入一个null
3)HashSet底层是采用HashMap实现的
4)HashSet底层是哈希表实现的
TreeSet:
1)Treeset中的数据是排好序的,不允许放入null值
2)TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
3)TreeSet的底层实现是采用二叉树(红-黑树)的数据结构
Collection:
一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。实现接口的类主要有List和Set,该接口的设计目标是为了各种具体的集合提供最大化的统一的操作方式
Collections:
针对集合类的一个包裹类,它提供了一系列静态方法实现对各种集合的搜索、排序以及线程安全化等操作,其中的大多数方法都是用于处理线性表。Collections类不能实例化,如同一个工具类,服务于Collection框架。如果在使用Collections类的方法时,对应的Collection对象null,则这些方法都会抛出NullPointerException



