Map接口及其常用方法

写在开头

我是一名java小白,目前在B站学习java,学习的视频是尚学堂高琪老师的java300集课程,笔记大部分参考老师的随堂笔记,我仅以博客的方式记录下我的笔记代码和一些个人见解,对一些问题的考虑可能不周全,代码也不够好看,希望大家多多包涵,有意见的也可以在下面评论,我会好好总结错误,慢慢进步的。

Map接口

Map就是用来存储“键(key)-值(value) 对”的。 Map类中存储的“键值对”通过键来标识,所以“键对象”不能重复。

Map 接口的实现类有HashMap、TreeMap、HashTable、Properties等。

常用方法

Java接口 如何接受map集合参数 java中的map接口_Java接口 如何接受map集合参数

【示例1】Map接口中(HashMap)的常用方法

public class TestMap {
    public static void main(String[] args) {
        Map<Integer, String> m1 = new HashMap<Integer, String>();
        Map<Integer, String> m2 = new HashMap<Integer, String>();
        m1.put(1, "one");
        m1.put(2, "two");
        m1.put(3, "three");
        m2.put(1, "一");
        m2.put(2, "二");
        System.out.println(m1.size());
        System.out.println(m1.containsKey(1));
        System.out.println(m2.containsValue("two"));
        m1.put(3, "third"); //键重复了,则会替换旧的键值对
        Map<Integer, String> m3 = new HashMap<Integer, String>();
        m3.putAll(m1);
        m3.putAll(m2);
        System.out.println("m1:" + m1);
        System.out.println("m2:" + m2);
        System.out.println("m3:" + m3);
    }
}

执行结果如图:

Java接口 如何接受map集合参数 java中的map接口_System_02

HashMap与HashTable的区别

HashTable类和HashMap用法几乎一样,底层实现几乎一样,只不过HashTable的方法添加了synchronized关键字确保线程同步检查,效率较低。

  1. HashMap: 线程不安全,效率高。允许key或value为null。
  2. HashTable: 线程安全,效率低。不允许key或value为null。

Map接口中(TreeMap)的常用方法

TreeMap 类不仅实现了 Map 接口,还实现了 Map 接口的子接口 java.util.SortedMap

TreeMap 类中不允许键对象为 null 或是 基本数据类型,这是因为 TreeMap 中的对象必须是可排序的(即对象需要实现 java.lang.Comparable 接口)

Java接口 如何接受map集合参数 java中的map接口_常用方法_03

【示例2】TreeMap常用方法

import java.util.TreeMap;

public class TestTreeMap {
public static void main(String[] args) {
    TreeMap< Integer,String> map2 = new TreeMap<>();
    map2.put(10, "bbbb");
    map2.put(5, "aaaa");
    map2.put(20, "ddd");
    map2.put(15, "ccc");
    map2.put(25, "eee");
    System.out.println(map2);
    System.out.println(map2.subMap(6, 15));//获取一个子集。其所有对象的 key 的值小于 toKey ,大于等于 fromKey
    System.out.println(map2.subMap(6,true ,15,true));
    System.out.println(map2.tailMap(15));//获取一个子集。其所有对象的 key 的值大于等于 fromKey
    System.out.println(map2.headMap(20));//获取一个子集。其所有对象的 key 的值小于 toKey
    System.out.println(map2.firstKey());//获取第一个(排在最低的)对象的 Key
    System.out.println(map2.lastKey());//获取最后个(排在最高的)对象的 Key
}
}

结果:

Java接口 如何接受map集合参数 java中的map接口_System_04

HashMap与TreeMap区别

如果不需要一个有序的集合,则建议使用HashMap类;如果需要进行有序的遍历输出,则建议使用TreeMap类。 在这种情况下,可以先使用 HashMap。在需要排序时,利用现有的 HashMap,创建一个 TreeMap 类型的实例(例如下面的例子)

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

public class TestCollection {
public static void main(String[] args) {  
    System.out.println("开始:");    
            
    Person person1 = new Person("马先生", 220181);  
    Person person2 = new Person("李先生", 220193);  
    Person person3 = new Person("王小姐", 220186);  
      
    Map<Number, Person> map = new HashMap<Number, Person>();  
    map.put(person1.getId_card(), person1);  
    map.put(person2.getId_card(), person2);  
    map.put(person3.getId_card(), person3);  
      
    // HashMap  
    System.out.println("HashMap,无序:");  
    for (Iterator<Number> it = map.keySet().iterator(); it.hasNext();) {  
        Person person = map.get(it.next());  
        System.out.println(person.getId_card() + " " + person.getName());  
    }  
      
    // TreeMap  
    System.out.println("TreeMap,升序:");  
    TreeMap<Number, Person> treeMap = new TreeMap<Number, Person>();  
    treeMap.putAll(map);  
    for (Iterator<Number> it = treeMap.keySet().iterator(); it.hasNext();) {  
        Person person = treeMap.get(it.next());  
        System.out.println(person.getId_card() + " " + person.getName());  
    }  
      
    System.out.println("TreeMap,降序:");  
    TreeMap<Number, Person> treeMap2 =   
        new TreeMap<Number, Person>(Collections.reverseOrder());  
    treeMap2.putAll(map);  
    for (Iterator it = treeMap2.keySet().iterator(); it.hasNext();) {  
        Person person = (Person) treeMap2.get(it.next());  
        System.out.println(person.getId_card() + " " + person.getName());  
    }  
      
    System.out.println("结束!");  
	}
}