Map(Java)
双列集合的特点
- 双列集合一次添加一对数据,分别为键和值
- 键不能重复,值可以重复
- 键和值是一一对应的,每一个键只能找到自己对应的值
- 键+值这个整体 我们称之为”键值对“或者”键值对对象“,在java中叫做”Entry对象“
Map的常用方法及代码展示
Map是双列集合中的顶层接口,功能是全部双列集合都可以继承使用
方法名称 | 说明 |
---|---|
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除键值对元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中的键值对的个数 |
方法代码展示
添加元素
import java.util.HashMap;
import java.util.Map;
public class Mapdemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
//2.添加元素
//put方法的细节
//添加/覆盖
//在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合当中,方法返回null
//在添加数据的时候,如果键是存在的,那么会把原有的键值对对象进行覆盖,会把被覆盖的值进行返回
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
System.out.println(m);
String value1 = m.put("b1", "b3");
System.out.println(value1);
System.out.println(m);
}
}
根据键删除键值对元素
import java.util.HashMap;
import java.util.Map;
public class Mapdemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//根据键或者键和值删除键值对元素
String remove1 = m.remove("a1");
System.out.println(remove1);
System.out.println(m);
boolean remove2 = m.remove("b1", "d1");
System.out.println(remove2);
System.out.println(m);
boolean remove3 = m.remove("b1", "b2");
System.out.println(remove3);
System.out.println(m);
}
}
根据键来删除对象,返回值是对应的值的类型,返回的是对应的值
根据值来删除对象,返回boolean类型
清空
import java.util.HashMap;
import java.util.Map;
public class Mapdemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//清空
System.out.println(m);
m.clear();
System.out.println(m);
}
}
判断键值对是否存在
import java.util.HashMap;
import java.util.Map;
public class Mapdemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//判断是否存在
//判断键对应的键值对是否存在
boolean containsKey1 = m.containsKey("a1");
System.out.println(containsKey1);
boolean containsKey2 = m.containsKey("a2");
System.out.println(containsKey2);
//判断值对应的键值对是否存在
boolean containsValue1 = m.containsValue("a2");
System.out.println(containsValue1);
boolean containsValue2 = m.containsValue("a1");
System.out.println(containsValue2);
}
}
判断是否为空
import java.util.HashMap;
import java.util.Map;
public class Mapdemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//判断是否为空
boolean mEmpty1 = m.isEmpty();
System.out.println(mEmpty1);
m.clear();
boolean mEmpty2 = m.isEmpty();
System.out.println(mEmpty2);
}
}
获取集合长度
import java.util.HashMap;
import java.util.Map;
public class Mapdemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//集合长度
int size1 = m.size();
System.out.println(size1);
m.put("e1","e2");
int size2 = m.size();
System.out.println(size2);
}
}
Map的遍历方式
键找值 键值对 Lambda表达式
键找值
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
public class MapTraversalDemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
//添加元素
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//键找值
//获取所有的键,把这些键放到一个单列集合中
Set<String> keySet = m.keySet();
// //迭代器遍历
// Iterator<String> keyiterator = keySet.iterator();
// while (keyiterator.hasNext()) {
// String key = keyiterator.next();
// //System.out.println(key);
// String value = m.get(key);
// System.out.println(key + "=" + value);
// }
// //增强for遍历
// for (String key : keySet) {
// //System.out.println(key);
// String value = m.get(key);
// System.out.println(key + "=" + value);
// }
//Lambda表达式遍历
keySet.forEach(key -> {
//System.out.println(key);
String value = m.get(key);
System.out.println(key + "=" + value);
});
}
}
键值对
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;
public class MapTraversalDemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
//添加元素
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//键值对
//通过一个方法获取所有的键值对对象,返回一个Set集合
Set<Map.Entry<String, String>> entries = m.entrySet();
// //迭代器遍历
// Iterator<Map.Entry<String, String>> keyiterator = entries.iterator();
// while (keyiterator.hasNext()){
// Map.Entry<String, String> entry = keyiterator.next();
// String key = entry.getKey();
// String value = entry.getValue();
// System.out.println(key+"="+value);
// //System.out.println(entry);
// }
// //增强for遍历
// for (Map.Entry<String, String> entry : entries) {
// System.out.println(entry);
// }
//lambda表达式
entries.forEach(Entry -> System.out.println(Entry));
}
}
Lambda表达式
方法名称 | 说明 |
---|---|
default void forEach(BiConsumer<? super K,? super V> action) | 结合lambda遍历Map集合 |
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class MapTraversalDemo {
public static void main(String[] args) {
//创建Map集合的对象
Map<String, String> m = new HashMap<>();
//添加元素
m.put("a1", "a2");
m.put("b1", "b2");
m.put("c1", "c2");
m.put("d1", "d2");
//lambda表达式
//利用lambda表达式进行遍历
// //匿名内部类的形式
// m.forEach(new BiConsumer<String, String>() {
// @Override
// public void accept(String key, String value) {
// System.out.println(key + "=" + value);
// }
// });
//简化成lambda表达式
m.forEach((key, value) -> System.out.println(key + "=" + value));
}
}