Map hashmap、 TreeMap、 LinkedHashMap
作者:互联网
现实生活中,我们常会看到这样的一种集合:IP地址与主机名,身份证号与个人,系统用户名与系统用户对象等,这种一一对应的关系,就叫做映射。Java提供了专门的集合类用来存放这种对象关系的对象,即java.util.Map<K,V>
接口。
1Map常用方法
1、添加操作
-
V put(K key,V value)
-
void putAll(Map<? extends K,? extends V> m)
2、删除
-
void clear()
-
V remove(Object key)
3、元素查询的操作
-
V get(Object key)
-
boolean containsKey(Object key)
-
boolean containsValue(Object value)
-
boolean isEmpty()
4、元视图操作的方法:
-
Set<K> keySet()
-
Collection<V> values()
-
Set<Map.Entry<K,V>> entrySet()
5、其他方法
(2)成对遍历:
-
int size()
-
2Map集合的遍历
-
Collection集合的遍历:(1)foreach(2)通过Iterator对象遍历
Map的遍历,不能支持foreach,因为Map接口没有继承java.lang.Iterable<T>接口,也没有实现Iterator iterator()方法。只能用如下方式遍历:
(1)分开遍历:
-
单独遍历所有key
-
单独遍历所有value
-
遍历的是映射关系Map.Entry类型的对象,Map.Entry是Map接口的内部接口。每一种Map内部有自己的Map.Entry的实现类。在Map中存储数据,实际上是将Key---->value的数据存储在Map.Entry接口的实例中,再在Map集合中插入Map.Entry的实例化对象
-
public class TestMap { public static void main(String[] args) { HashMap<String,String> map = new HashMap<>(); map.put("许仙", "白娘子"); map.put("董永", "七仙女"); map.put("牛郎", "织女"); map.put("许仙", "小青"); System.out.println("所有的key:"); Set<String> keySet = map.keySet(); for (String key : keySet) { System.out.println(key); } Iterator<String> iterator =keyset.iterator(); while (iterator.hasNext()){ String ele = iterator.next(); System.out.println(ele+"-----"+map.get(ele)); } System.out.println("所有的value:"); Collection<String> values = map.values(); for (String value : values) { System.out.println(value); } System.out.println("所有的映射关系"); Set<Map.Entry<String,String>> entrySet = map.entrySet(); for (Map.Entry<String,String> entry : entrySet) { // System.out.println(entry); System.out.println(entry.getKey()+"->"+entry.getValue()); } } }
3 Map的实现类们
Map接口的常用实现类:HashMap、TreeMap、LinkedHashMap和Properties。其中HashMap是 Map 接口使用频率最高的实现类。
1、HashMap和Hashtable的区别与联系
-
HashMap和Hashtable都是哈希表。
-
HashMap和Hashtable判断两个 key 相等的标准是:两个 key 的hashCode 值相等,并且 equals() 方法也返回 true。因此,为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。
-
Hashtable是线程安全的,任何非 null 对象都可以用作键或值。
-
HashMap是线程不安全的,并允许使用 null 值和 null 键。
public static void main(String[] args) { HashMap<String,Double> map = new HashMap<>(); map.put("张三", 10000.0); //key相同,新的value会覆盖原来的value //因为String重写了hashCode和equals方法 map.put("张三", 12000.0); map.put("李四", 14000.0); //HashMap支持key和value为null值 String name = null; Double salary = null; map.put(name, salary); Set<Entry<String, Double>> entrySet = map.entrySet(); for (Entry<String, Double> entry : entrySet) { System.out.println(entry); } }
2、LinkedHashMap
-
LinkedHashMap 是 HashMap 的子类。此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。此链接列表定义了迭代顺序,该迭代顺序通常就是将键插入到映射中的顺序(插入顺序)。
-
public static void main(String[] args) { LinkedHashMap<String,Double> map = new LinkedHashMap<>(); map.put("张三", 10000.0); //key相同,新的value会覆盖原来的value //因为String重写了hashCode和equals方法 map.put("张三", 12000.0); map.put("李四", 14000.0); //HashMap支持key和value为null值 String name = null; Double salary = null; map.put(name, salary); Set<Entry<String, Double>> entrySet = map.entrySet(); for (Entry<String, Double> entry : entrySet) { System.out.println(entry); } }
3、TreeMap
基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
public class TestTreeMap { @Test public void test1() { TreeMap<String,Integer> map = new TreeMap<>(); map.put("Jack", 11000); map.put("Alice", 12000); map.put("zhangsan", 13000); map.put("baitao", 14000); map.put("Lucy", 15000); //String实现了Comparable接口,默认按照Unicode编码值排序 Set<Entry<String, Integer>> entrySet = map.entrySet(); for (Entry<String, Integer> entry : entrySet) { System.out.println(entry); } } @Test public void test2() { //指定定制比较器Comparator,按照Unicode编码值排序,但是忽略大小写 TreeMap<String,Integer> map = new TreeMap<>(new Comparator<String>() { @Override public int compare(String o1, String o2) { return o1.compareToIgnoreCase(o2); } }); map.put("Jack", 11000); map.put("Alice", 12000); map.put("zhangsan", 13000); map.put("baitao", 14000); map.put("Lucy", 15000); Set<Entry<String, Integer>> entrySet = map.entrySet(); for (Entry<String, Integer> entry : entrySet) { System.out.println(entry); } } }
标签:Map,hashmap,map,entrySet,key,put,LinkedHashMap,HashMap 来源: https://blog.csdn.net/qq_43555873/article/details/121451527