一、集合Map
Map是一个双列集合,一个元素包含两个值(一个key,一个value);
Map集合中的元素,key和value的数据类型可以相同,也可以不同 ;
Map中的元素,key不允许重复,value可以重复 ;
Map里的key和value是一一对应的。
二、HashMap
HashMap底是哈希表,查询速度非常快(jdk1.8之前是数组+单向链表,1.8之后是数组+单向 链表/红黑树 ,链表长度超过8时,换成红黑树);
HashMap是无序的集合,存储元素和取出元素的顺序有可能不一致 ;
HashMap集合是不同步的,也就是说是多线程不安全,单速度快。
HashMap<String, String> map = new HashMap<>();
HashMap常用操作:
import java.util.HashMap;
public class Practice14 {
public static void main(String[] args) {
//实例化
HashMap<String,String> hm = new HashMap<>();
System.out.println(hm.isEmpty());
//插入元素
hm.put("1","java");
hm.put("2","mysql");
hm.put("3","javascript");
System.out.println(hm);
System.out.println(hm.isEmpty());
System.out.println(hm.size());
System.out.println("---");
System.out.println(hm.containsKey("s3"));
System.out.println(hm.containsValue("java"));
System.out.println("---");
//删除
//hm.clear();
//hm.remove("s1");//根据key删除元素
//hm.remove("s1","myjava");//根据key value删除元素
//修改
String str = hm.replace("s1","java18");
System.out.println(str);
System.out.println(hm);
//获取元素
System.out.println(hm.get("s1"));//java
System.out.println(hm.getOrDefault("s3","html"));
System.out.println(hm.get("s3"));
}
}
运行结果:
true
{1=java, 2=mysql, 3=javascript}
false
3
---
false
true
---
null
{1=java, 2=mysql, 3=javascript}
null
html
null
二、HashMap遍历
有以下几种遍历方式:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
public class Practice15 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("北京", "火锅");
map.put("上海", "东方明珠");
map.put("郑州", "方特");
map.putIfAbsent("杭州", "大闸蟹");
map.replace("武汉", "热干面");
//第一种遍历
for(Object key : map.keySet()) {
System.out.println("key:" + key + ",vaule:" + map.get(key));
}
System.out.println("--------------------");
//第二种遍历
Iterator<String > it = map.keySet().iterator();
while (it.hasNext()) {
Object key = it.next();
System.out.println("key:" + key + ",vaule:" + map.get(key));
}
System.out.println("--------------------");
//第三种遍历
Iterator<Map.Entry<String , String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String , String> entry = iterator.next();
System.out.println("key:" + entry.getKey() + ",vaule:" +
entry.getValue());
}
System.out.println("--------------------");
//第四种遍历
for (Map.Entry<String,String> entry: map.entrySet()) {
System.out.println("key:" + entry.getKey() + ",vaule:" +
entry.getValue());
}
System.out.println("--------------------");
//第五种遍历
map.forEach((key,value) -> {
System.out.println("key:" + key + ",vaule:" + value);
});
System.out.println("--------------------");
//第六种遍历
map.entrySet().forEach(item -> {
System.out.println("key:" + item.getKey() + ",vaule:" +
item.getValue());
});
System.out.println("--------------------");
//第七种遍历
map.keySet().forEach(item -> {
System.out.println("key:" + item + ",vaule:" + map.get(item));
});
}
}
运行结果:
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅