33、Map简介

Map接口概述

除了Collection之外,常用的集合还有Map接口,里面常用的实现类图如下:

map中的元素是以键-值的方式存在的,通过键可以获取到值,键是不可以重复的,跟地图比较像,通过一个坐标就可以找到具体的位置。

package com.sutaoyu.Map;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class Map_test_1 {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap();
        String s1 = map.put(1001, "成龙");
        map.put(1002, "周润发");
        map.put(1003, "周星驰");
        
        //将1001 成龙替换掉,并且返回被替换的成龙
        String s2 = map.put(1001, "房祖名");
        
        System.out.println(s1);
        System.out.println(s2);
        
        //判断是否包含传入的键
        System.out.println(map.containsKey(1002));
        
        //判断是否包含传入的值
        System.out.println(map.containsValue("周星驰"));
        
        //获取map的大小
        System.out.println(map.size());
        
        //将map中的值返回
        Collection<String> c = map.values();
        System.out.println(c);
        System.out.println(map);
        
        //删除键是1001的数据并且将值返回
        
        String s3 = map.remove(1001);
        System.out.println(s3);
    }
}

Map的遍历

方式一:Map中的keySet()返回的是一个包含所有键的Set类型的对象,通过键获取值

package com.sutaoyu.Map;

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

public class Map_test_2 {
    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1001, "成龙");
        map.put(1002, "周润发");
        map.put(1003, "周星驰");
        map.put(1004, "刘德华");

        // 通过键获取值
        String s = map.get(1004);
        System.out.println(s);
        
        // 获取map中所有的键返回给Set
        Set<Integer> keySet = map.keySet();
        
        //遍历set获取键,根据键获取值
        Iterator<Integer> iter = keySet.iterator();
        while(iter.hasNext()) {
            Integer key = (Integer)iter.next();
            System.out.println("键:" + key + ",值:" + map.get(key));
        }
        
        ////使用增强for循环遍历
        for(Integer key : map.keySet()) {
            System.out.println("键:" + key + ",值:" + map.get(key));
        }
    }
}

方式二:Map中的键和值被封装成了Entry对象,并存储在Set集合中,通过entrySet()可以获取到这个Set集合。

package com.monkey1024.map;

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

/**
 * Map的遍历
 *
 */
public class MapTest03 {

    public static void main(String[] args) {
        Map<Integer, String> map = new HashMap<>();
        map.put(1001, "成龙");
        map.put(1002, "周润发");
        map.put(1003, "周星驰");
        map.put(1004, "刘德华");

        //键和值被封装成了Entry对象,并存储在Set集合中
        Set<Map.Entry<Integer,String>> entrySet = map.entrySet();
        Iterator<Map.Entry<Integer,String>> it = entrySet.iterator();
        while(it.hasNext()) {
            //获取每一个Entry对象
            Entry<Integer,String> en = it.next();    
            //根据键值对对象获取键
            Integer key = en.getKey();        
            //根据键值对对象获取值
            String value = en.getValue();    
            System.out.println("键:" + key + ",值:" + value);
        }


        //增强for循环
        for (Entry<Integer, String> en : map.entrySet()) {
            System.out.println("键:" + en.getKey() + ",值:" + en.getValue());
        }
    }
}

LinkedHashMap

LinkedHashMap的特点:存取顺序一致

package com.monkey1024.map;

import java.util.LinkedHashMap;

/**
 * LinkedHashMap简介
 *
 */
public class MapTest04 {

    public static void main(String[] args) {
        LinkedHashMap<Integer,String> lhm = new LinkedHashMap<>();
        lhm.put(1003, "周星驰");
        lhm.put(1004, "刘德华");
        lhm.put(1001, "成龙");
        lhm.put(1002, "周润发");

        System.out.println(lhm);
    }
}

TreeMap

TreeMap的特点:可以对存储的元素进行排序

package com.monkey1024.map;

import java.util.TreeMap;

/**
 * TreeMap简介
 *
 */
public class MapTest05 {

    public static void main(String[] args) {
        TreeMap<Integer,String> tm = new TreeMap<>();
        tm.put(1003, "周星驰");
        tm.put(1004, "刘德华");
        tm.put(1001, "成龙");
        tm.put(1002, "周润发");

        System.out.println(tm);
    }
}

HashMap和Hashtable的区别

Hashtable是JDK1.0版本出现的,是线程安全的,效率低,不可以存储null键和null值
HashMap是JDK1.2版本出现的,可以存储null键和null值

原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/10136768.html