Map
Map: 映射, 是双列集合顶层接口
java.util.Map
k: key 键 唯一
v: value 值 可重复
常用方法和Entry
- public V put(K key,V Value)
- // 指定的键与指定值添加到Map集合中, 添加成功返回null, 添加失败返回之前的值
- public V putIfAbsent(K key,V Value)
- // jdk1.8后新增 键相同值不覆盖返回原来的值
- public V get(Object key)
- // 根据指定的键, 获取对应值, 不存在返回null
- public V getOrDefault(Object key, V defaultValue)
- // jdk1.8后新增 不存在返回defaultValue
- public boolean containsKey(Object key)
- // 判断集合中是否包含指定的键
- public V remove(Object key)
- // 根据指定的键, 删除一对元素, 返回被删除的值
- public V remove(Object key, Object value)
- // 根据指定的键和值, 都一致则删除, 返回被删除的值
- Set<K> keySet()
- // 获取存放所有键的Set集合
- Collection<V> values()
- // 获取存放所有值的集合
- Set<Map.Entry<K, V>> entrySet()
- // 获取键值对映射关系对象的Set集合
- interface Entry<K,V>
- K getKey()
- // 获取映射关系对象中的键
- V getValue()
- // 获取映射关系对象中的值
复制代码 LinkedHashMap
底层数据结构: 链表 + 哈希表
链表保证元素有序 哈希表保证元素唯一- public class Demo {
- public static void main(String[] args) {
- Map<String, Integer> map = new LinkedHashMap<>();
- map.put("1张三",14);
- map.put("2李四",17);
- // put
- // 添加成功返回 null
- System.out.println(map.put("3王五", null));
- // 添加失败返回之前的值, 并用新值覆盖
- System.out.println(map.put("2李四", 19));
- // putIfAbsent
- // 键不存在添加新的键值对, 添加成功返回null
- System.out.println(map.putIfAbsent("4刘六", 19));
- // 若键存在 原有值不改变 并返回原有值
- System.out.println(map.putIfAbsent("1张三", 11));
- // get
- // 根据键找值, 存在则返回键对应的值
- System.out.println(map.get("1张三"));
- // 不存在则返回null
- System.out.println(map.get("2"));
- // getOrDefault
- // 键存在 返回对应值
- System.out.println(map.getOrDefault("1张三", -1));
- // 若不存在 则返回defaultValue
- System.out.println(map.getOrDefault("2", -1));
- // 判断集合中是否包含指定的键, 存在返回true, 不存在返回false
- System.out.println(map.containsKey("2李四"));
- // 根据键删除一对元素 返回被删除的值
- // 不存在则返回null
- System.out.println(map.remove("1"));
- System.out.println(map.remove("1张三"));
- System.out.println(map);
- // 遍历
- // 方式1
- // 获取存放所有键的集合
- Set<String> set = map.keySet();
- // 获取存放所有值的集合
- Collection<Integer> values = map.values();
- // 迭代器
- Iterator<Integer> iterator = values.iterator();
- while (iterator.hasNext()) {
- System.out.print(iterator.next() + " ");
- }
- System.out.println();
- // 增强for
- for (Integer value : values) {
- System.out.print(value + " ");
- }
- System.out.println();
- // 迭代器
- Iterator<String> it = set.iterator();
- while (it.hasNext()) {
- String key = it.next();
- System.out.print(key + " = " + map.get(key) + "\t");
- }
- System.out.println();
- // 增强for
- for (String s : set) {
- System.out.print(s + " = " + map.get(s) + "\t");
- }
- System.out.println();
- // 方式2
- // Entry是Map的内部类 所以调用时需要Map.Entry
- Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
- // 迭代器
- Iterator< Map.Entry<String, Integer>> entries = entrySet.iterator();
- while (entries.hasNext()) {
- Map.Entry<String, Integer> next = entries.next();
- System.out.print(next.getKey() + " = " + next.getValue() + "\t");
- }
- System.out.println();
- // 增强for
- for (Map.Entry<String, Integer> entry : entrySet) {
- System.out.print(entry.getKey() + " = "+entry.getValue() + "\t");
- }
- }
- }
复制代码 TreeMap
java.util.TreeMap
底层数据结构是红黑树 键 排序 具有唯一性 不允许null键 允许null值
[code]/* java.util.TreeMap 底层数据结构是红黑树 键 排序 具有唯一性 不允许null键 允许null值 构造方法: public TreeMap() 空参构建, 集合中的键必须实现自然排序接口 Comparable 的方法 CompareTo public TreeMap(Comparator |