本文主要是介绍JavaMap集合--双列集合,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
Java集合API
双列集合(键:值)
Map接口
HashMap
概念
代码
运行
HashMap 结构 - - 源码
HashMap结构图
HashMap添加元素源码
链表转红黑树机制
编辑
代码
运行
TreeMap
概念
代码
运行
Hashtable
概念
Hashtable键值不能为空
代码
运行
Map集合遍历
方式一
代码
运行
方式二
代码
运行
Java集合API
集合体系概述 Java的集合框架是由很多接口、抽象类、具体类组成的,都位于java.util包中。
双列集合(键:值)
Map接口
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
HashMap
概念
HashMap<String,String> map = new HashMap<>();
底层是哈希表+链表+红黑树
键值可以为null
键无序
多线程情况下不安全
代码
Map
键:值对
键不能重复,值可以重复
一个键映射到一个值
HashMap
键是无序的
package com.ffyc.javacollection.map;import java.util.Collection;
import java.util.HashMap;
import java.util.Set;public class HashMapDemo1 { public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh");map.put(null, null);map.put("gg", null);System.out.println(map);//通过key获取到key所对应的value值System.out.println(map.get("x"));//删除键值映射,并返回该键对应的值System.out.println(map.remove("x"));//确认是否有指定键值映射 有--true 没有--falseSystem.out.println(map.containsKey("x"));//确认是否有指定值 有--true 没有--falseSystem.out.println(map.containsValue("hh"));//判断是否为空System.out.println(map.isEmpty());//键值段(长度)System.out.println(map.size());//把值拿出来存储在一个Collection类型数组Collection<String> values = map.values();System.out.println(values);//把键拿出来存储在一个Set类型数组Set<String> keys = map.keySet();System.out.println(keys);System.out.println(map);//删除所有的键值映射map.clear();System.out.println(map);}
}
运行
HashMap 结构 - - 源码
HashMap结构图
HashMap添加元素源码
链表转红黑树机制
代码
public V put(K key, V value) {return putVal(hash(key), key, value, false, true); }
package com.ffyc.javacollection.map;import java.util.Collection;
import java.util.HashMap;
import java.util.Set;public class HashMapDemo2 { public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh");System.out.println(map);}
}
运行
TreeMap
概念
TreeMap<String, String> tmap = new TreeMap<>();
底层是红黑树结构
键是有序的 可以排序
代码
Map
键值对
键不能重复 值可以重复
TreeMap
底层使用的是树型结构
键可以排序(有序),键的类型必须实现Comparable接口
package com.ffyc.javacollection.map;import java.util.TreeMap;public class TreeMapDemo { public static void main(String[] args) {TreeMap<String, String> tmap = new TreeMap<>();tmap.put("c", "c");tmap.put("b", "b");tmap.put("d", "d");tmap.put("a", "a");tmap.put("b", "bb");System.out.println(tmap);}
}
运行
Hashtable
概念
Hashtable<String, String> hmap = new Hashtable<>();
底层与HashMap一致
不可以存储为null的键值
键也是无序的
多线程情况下是安全的
Hashtable键值不能为空
代码
Map
键值对
键不能重复 值可以重复
Hashtable
底层结构与HashMap相同,但是是线程安全 方法添加synchronized关键字
Hashtable不可以存储为null的键和值
HashMap可以存储一个为null的键,值也可以为null
package com.ffyc.javacollection.map;import java.util.Hashtable;public class HashtableDemo { public static void main(String[] args) {Hashtable<String, String> hmap = new Hashtable<>();hmap.put("x","x");hmap.put("a","a");hmap.put("g","g");hmap.put("i","i");hmap.put("x","x");/*hmap.put(null, null);//NullPointerExceptionhmap.put("gg", null);*/System.out.println(hmap);}
}
运行
Map集合遍历
方式一
方式1:根据键找值
• 获取所有键的集合
• 遍历键的集合,获取到每一个键
• 根据键找值
代码
package com.ffyc.javacollection.map;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class HashMapDemo3 {public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh");//方式一:keySet()获取到所有的键 遍历键的集合Set<String> keySet = map.keySet();for (String key:keySet) {System.out.println(key+":" + map.get(key));}}
}
运行
方式二
方式2:根据键值对对象找键和值
• 获取所有键值对对象的集合
• 遍历键值对对象的集合,获取到每一个键值对对象
• 根据键值对对象找键和值
代码
package com.ffyc.javacollection.map;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class HashMapDemo3 {public static void main(String[] args) {HashMap<String,String> map = new HashMap<>();map.put("c", "gg");map.put("x", "ax");map.put("a", "cm");map.put("h", "CC");map.put("c", "hh"); //方式二:通过entrySet()获取到一个Entry类型的集合,Entry中放有键值对Set<Map.Entry<String, String>> entries = map.entrySet();for(Map.Entry entry : entries){System.out.println(entry.getKey()+":"+entry.getValue());}}
}
运行
这篇关于JavaMap集合--双列集合的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!