单列集合只能一次添加一个元素;而双列集合(Map)可以一次添加一对元素(键、值)。
键值对(Entry):键不能重复,值可以重复。键和值是一一对应的,每一个键只能找到自己对应的值。键+值的整体称为“键值对”或者“键值对对象”,Java中叫做“Entry对象”。
Map:分为HashMap、TreeMap, HashMap里面又包括LinkedHashMap。
方法名称 | 说明 |
V put(K key , V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty( ) | 判断集合是否为空 |
int size( ) | 集合长度(键值对个数) |
1.创建Map集合对象:
Map map = new HashMap<>(); //键为String 值也为String
2.Map中的方法示例:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Map map = new HashMap<>(); //键为String 值也为String
map.put("御坂美琴","白井黑子");
map.put("桐谷和人","亚斯娜");
map.put("大雄","静香");
map.put("空","白"); // 添加键值对
map.remove("大雄"); // 根据键删除键值对元素
System.out.println(map); // 打印集合
}
}
运行结果:(输出是无序的)
{桐谷和人=亚斯娜, 御坂美琴=白井黑子, 空=白}
1.键找值:用keySet方法和get方法通过键找到对应的值。(结合Collection的单列集合遍历方法)
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("御坂美琴", "白井黑子");
map.put("桐谷和人", "亚斯娜");
map.put("大雄", "静香");
map.put("空", "白");
//键找值
Set k = map.keySet(); //获取所有的键,并把它们全部放到单列集合k中
//遍历单列循环(用Collection的三种遍历方式)
for (String s : k) {
String val = map.get(s);//通过遍历的键s找值val
System.out.print(s + " ");
System.out.println(val);
}
}
}
2.键值对:用entrySet方法把键值对都添加进单列集合。增强for(或其他单列集合遍历方式)遍历,getKey()方法获取键,用getValue()方法获取值。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class Main {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("御坂美琴", "白井黑子");
map.put("桐谷和人", "亚斯娜");
map.put("大雄", "静香");
map.put("空", "白");
//键值对
Set> en = map.entrySet();
//遍历en集合,去得到里面的每一个键值对对象
for (Map.Entry entry : en) {//运用增强for遍历集合获取键值对对象
String k = entry.getKey();
String val = entry.getValue();
System.out.println(k + " " + val);
}
}
}
3.Lamda表达式:代码简便快捷。
示例一:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.function.BiConsumer;
public class Main {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("御坂美琴", "白井黑子");
map.put("桐谷和人", "亚斯娜");
map.put("大雄", "静香");
map.put("空", "白");
//Lamda表达式
map.forEach(new BiConsumer() { // 匿名内部类
@Override
public void accept(String k, String val) {
System.out.println(k + " " + val);
}
});
}
}
示例二:
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.function.BiConsumer;
public class Main {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("御坂美琴", "白井黑子");
map.put("桐谷和人", "亚斯娜");
map.put("大雄", "静香");
map.put("空", "白");
//Lamda表达式
map.forEach((String k, String val) -> System.out.println(k + " " + val));
}
}
LinkedHashMap:输出的键有序,不重复,无索引。
import java.util.*;
public class Main {
public static void main(String[] args) {
LinkedHashMap map = new LinkedHashMap<>();
//添加键值对元素
map.put("Bill", 2);
map.put("Zone", 5);
map.put("Ankha", 3);
map.put("Link", 1);
//输出
System.out.println(map);
}
}
//输出结果:{Bill=2, Zone=5, Ankha=3, Link=1}
TreeMap:键可排序,不重复,无索引。(默认键是从小到大排序)
{Ankha=3, Bill=2, Link=1, Zone=5}