map集合特点就是采用了 Key-value键值对映射的方式进行存储
key在Map里面是唯一的但是value可以重复,一个key对应一个value。
key是无序、唯一的
value是无序不唯一的
Map接口有两个集合HashMap和TreeMap及LinkedHashMap
HashMap采用哈希表的存储结构所以里面的数据是无序但是唯一的。(实现唯一的方式就是重写 Hashcode和equals方法)
TreeMap采用的是二叉树的存储方式里面的数据是唯一而且有序的而且一般是按升序的方式排列 (要实现comparable接口并且重写compareTo的方法用来实现它的排序)
LinkedHashMap是HashMap的进化版它比HashMap速度更快而且还可以保证唯一性和有序性。(它的实现方式是哈希表和链表的结合)
HashMap的例子:
package com.map;
/**
* 创建一个 HashMap的 集合
*
*/
import java.util.Collection;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class MapDemo {
public static void main(String[] args) {
// Map需要两个值 Key-value 用来装东西 两个必须是对着的 而且 Key只有一个 不能重复 不考虑 value的概念 Key重复
// 就覆盖掉
HashMap<Integer, String> hm = new HashMap<Integer, String>();
// 添加 Map特有的 不是add而是 put
hm.put(1, "一");
hm.put(2, "二");
hm.put(1, "三");
hm.put(4, "四");
hm.put(5, "五");
// 长度 返回一个int值
int a = hm.size();
// key的唯一性 所以 会将相同的key覆盖掉
System.out.println(a);
// 删除 里面填key值
hm.remove(1);
System.out.println(hm.size());
// 判断是否 存在 判断key
boolean flag = hm.containsKey(4);
System.out.println(flag);
// 判断是否存在 判断 value
boolean flag1 = hm.containsValue("五");
System.out.println(flag1);
// 判断是否 为空 返回值是 boolean类型的
boolean flag2 = hm.isEmpty();
System.out.println(flag2);
// 拿出key的值 返回一个set型的集合
Set<Integer> b = hm.keySet();
System.out.println(b);
// 拿出value的值 返回一个 Collection的 集合
Collection<String> b2 = hm.values();
System.out.println(b2);
// get 方法是 引入key的值得到对应的value的值
String s = hm.get(2);
System.out.println(s);
Set<Entry<Integer, String>> e = hm.entrySet();
for (Entry<Integer, String> k : e) {
System.out.println(k);
}
// 利用hm.keySet的返回值 输出 value的内容
for (Integer k : b) {
String l = hm.get(k);
System.out.println(l);
}
// 通过 values返回的collection接口 循环输出所有的 value内容
for (String h : b2) {
System.out.println(h);
}
}
}
Map中的两个对象的使用方法和Set中很是相似 但是他们并没有什么关系
只是采用了相同的数据结构,Map的节点是一对数据,Set的节点是一个数据但是Map与Set都是唯一的
而且其中各个方法的使用方式很相似注意Map中添加数据的方式和LIst跟Set不相同