集合Map以及HashMap

  • Post author:
  • Post category:其他


一、集合Map

Map是一个双列集合,一个元素包含两个值(一个key,一个value);

Map集合中的元素,key和value的数据类型可以相同,也可以不同 ;

Map中的元素,key不允许重复,value可以重复 ;

Map里的key和value是一一对应的。

二、HashMap

HashMap底是哈希表,查询速度非常快(jdk1.8之前是数组+单向链表,1.8之后是数组+单向 链表/红黑树 ,链表长度超过8时,换成红黑树);

HashMap是无序的集合,存储元素和取出元素的顺序有可能不一致 ;

HashMap集合是不同步的,也就是说是多线程不安全,单速度快。

HashMap<String, String> map = new HashMap<>();

HashMap常用操作:

import java.util.HashMap;

public class Practice14 {
    public static void main(String[] args) {
        //实例化
        HashMap<String,String> hm = new HashMap<>();
        System.out.println(hm.isEmpty());
        //插入元素
        hm.put("1","java");
        hm.put("2","mysql");
        hm.put("3","javascript");
        System.out.println(hm);
        System.out.println(hm.isEmpty());
        System.out.println(hm.size());
        System.out.println("---");
        System.out.println(hm.containsKey("s3"));
        System.out.println(hm.containsValue("java"));
        System.out.println("---");
        //删除
        //hm.clear();
        //hm.remove("s1");//根据key删除元素
        //hm.remove("s1","myjava");//根据key value删除元素
        //修改
        String str = hm.replace("s1","java18");

        System.out.println(str);
        System.out.println(hm);
        //获取元素
        System.out.println(hm.get("s1"));//java
        System.out.println(hm.getOrDefault("s3","html"));
        System.out.println(hm.get("s3"));
    }
}

运行结果:

true
{1=java, 2=mysql, 3=javascript}
false
3
---
false
true
---
null
{1=java, 2=mysql, 3=javascript}
null
html
null

二、HashMap遍历

有以下几种遍历方式:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Practice15 {
    public static void main(String[] args) {
        HashMap<String, String> map = new HashMap<>();
        map.put("北京", "火锅");
        map.put("上海", "东方明珠");
        map.put("郑州", "方特");
        map.putIfAbsent("杭州", "大闸蟹");
        map.replace("武汉", "热干面");
        //第一种遍历
        for(Object key : map.keySet()) {
            System.out.println("key:" + key + ",vaule:" + map.get(key));
        }
        System.out.println("--------------------");
        //第二种遍历
        Iterator<String > it = map.keySet().iterator();
        while (it.hasNext()) {
            Object key = it.next();
            System.out.println("key:" + key + ",vaule:" + map.get(key));
        }
        System.out.println("--------------------");
        //第三种遍历
        Iterator<Map.Entry<String , String>> iterator = map.entrySet().iterator();
        while (iterator.hasNext()) {
            Map.Entry<String , String> entry = iterator.next();
            System.out.println("key:" + entry.getKey() + ",vaule:" +
                    entry.getValue());
        }
        System.out.println("--------------------");
        //第四种遍历
        for (Map.Entry<String,String> entry: map.entrySet()) {
            System.out.println("key:" + entry.getKey() + ",vaule:" +
                    entry.getValue());
        }
        System.out.println("--------------------");
        //第五种遍历
        map.forEach((key,value) -> {
            System.out.println("key:" + key + ",vaule:" + value);
        });
        System.out.println("--------------------");
        //第六种遍历
        map.entrySet().forEach(item -> {
            System.out.println("key:" + item.getKey() + ",vaule:" +
                    item.getValue());
        });
        System.out.println("--------------------");
        //第七种遍历
        map.keySet().forEach(item -> {
            System.out.println("key:" + item + ",vaule:" + map.get(item));
        });

    }

}

运行结果:

key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅
--------------------
key:上海,vaule:东方明珠
key:郑州,vaule:方特
key:杭州,vaule:大闸蟹
key:北京,vaule:火锅



版权声明:本文为xiaobaistudyjava原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。