9. Map
将键映射到值的对象,一个映射不能包含重复的键,但值可以重复。每个键最多只能映射到一个值。
Map是双列的;Collection是单列的
Map的键唯一;Collection的子体系Set是唯一的
Map集合的数据结构只针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
1、添加:
1、V put(K key, V value) (可以相同的key值,但是添加的value值会覆盖前面的,返回值是前一个,如果没有就返回null)
2、putAll(Map<? extends K, ? extends V> m) 从指定映射中将所有映射关系复制到此映射中(可选操作)。
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("胖虎", 10);
map.put("小夫", 99);
map.put("大雄", 0);
Map<String, Integer> map2 = new HashMap<>();
map2.putAll(map);
}
}
2、删除
1、remove() 删除关联对象,指定key对象
2、clear() 清空集合对象
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("胖虎", 10);
map.put("小夫", 99);
map.put("大雄", 0);
System.out.println(map.size()); // 3
map.remove("胖虎");
System.out.println(map.size()); // 2
map.remove("胖虎");
System.out.println(map.size()); // 2
map.clear();
System.out.println(map.size()); // 0
}
}
3、获取
value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返回的是null。
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("胖虎", 10);
map.put("小夫", 99);
map.put("大雄", 0);
Integer num1 = map.get("胖虎");
Integer num2 = map.get("静香");
System.out.println(num1); // 10
System.out.println(num2); // null
}
}
4、判断:
1、boolean isEmpty() 长度为0返回true否则false
2、boolean containsKey(Object key) 判断集合中是否包含指定的key
3、boolean containsValue(Object value) 判断集合中是否包含指定的value
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("胖虎", 10);
map.put("小夫", 99);
map.put("大雄", 0);
System.out.println(map.containsKey("胖虎")); // true
System.out.println(map.containsValue("0")); // false
System.out.println(map.containsValue(0)); // true
}
}
5、长度:
int size() (前面已经有过了。。。)
迭代Map的方式:
1)使用Map.Entry<K, V> 与Map中的entrySet方法配合使用;2)增强for循环
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("胖虎", 10);
map.put("小夫", 99);
map.put("大雄", 0);
//Iterator遍历
Set<Map.Entry<String, Integer>> set = map.entrySet();
Iterator<Map.Entry<String, Integer>> iterator = set.iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println(entry.getKey() + "的成绩是:" + entry.getValue());
}
//增强for循环遍历
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "的成绩是:" + entry.getValue());
}
}
}
不要忘记!不能在for循环里进行增删操作!
-------------------HashMap与TreeMap-----------------------
对于K来讲与Set对应的部分完全一致,故不再赘述。
不过对于HashMap来讲,这是个蛮深奥的东西,我会另起一篇,深扒源码!