java学习笔记之Map接口及其常用方法 2019/5/9

本文深入讲解Java中的Map接口,包括其基本概念、不同实现类的特点,以及HashMap、TreeMap的常用方法。对比了HashMap与HashTable的异同,阐述了如何根据场景选择合适的Map实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Map接口及其常用方法

写在开头

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

Map接口

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

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

常用方法

在这里插入图片描述

【示例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);
    }
}

执行结果如图:
在这里插入图片描述

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 接口)
在这里插入图片描述

【示例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
}
}

结果:
在这里插入图片描述

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("结束!");  
	}
}  

参考:

https://lixh1986.iteye.com/blog/1757589
https://www.imooc.com/article/72213
http://www.sxt.cn/Java_jQuery_in_action/nine-mapinterface.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值