• 47 容器(六)——HashMap


    HashMap的概念

    HashMap底层实现了哈希表,这是一种非常重要的数据结构,对于以后我们理解很多技术都有帮助,例如 redis数据库的核心技术和HashMap一样,因此,非常有必要让大家理解。

    HashMap的数据结构由数组和链表来实现对数据的存储,它们各有特点:

    1. 数组:占用空间连续,寻址容易,查询速度快。但是增删效率低。
    2. 链表:占用空间不连续,寻址困难,查询速度慢。但是增删效率高。

    将数据与链表的优点结合起来,就得到了我们的哈希表。因此哈希表的本质就是数组+链表。

    HashMap的常用方法

    关键点摘要:

    • 泛型可以使用基本数据类型,也可以使用引用数据类型
    • 使用put填入同一个key,后面的key对应的值会替换前面的key对应的值
    • 替换replace与remove方法都有两种形式,返回被删除/替换的值和返回boolean。
    package _20191211;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /**
     * HashMap部分方法测试
     * @author TEDU
     *
     */
    public class HashMapTest {
    	public static void main(String[] args) {
    		Map<Integer,String> myMap = new HashMap<>();
    		myMap.put(1,"one");
    		myMap.put(2,"two");
    		myMap.put(3,"three");
    		System.out.println(myMap.get(1));//返回key对应的值
    		System.out.println(myMap.containsKey(3));//是否包含指定的key
    		System.out.println(myMap.containsValue("One"));//是否包含指定的值
    		//移除方法
    		System.out.println(myMap.remove(2));//移除指定的key,返回其值
    		System.out.println(myMap);
    		System.out.println(myMap.remove(1,"one"));//移除指定的key与value,返回boolean
    		System.out.println(myMap);
    		//key不能重复,若重复,会将该key对应的value覆盖,不可以将此方法做替换方法用,不便于阅读
    		myMap.put(3,"三");
    		System.out.println(myMap);
    		//替换方法 replace 只能替换已存在的键值对
    		System.out.println(myMap.replace(3,"three"));//返回被替换的值
    		System.out.println(myMap.replace(1,"one"));//只能替换已存在的
    		System.out.println(myMap.replace(3, "three", "叁"));//返回布尔值
    		System.out.println(myMap);
    		//putAll 将一个map添加到另一个map
    		Map<Integer,String> myMap2 = new HashMap<>();
    		myMap2.put(4, "肆");
    		myMap.putAll(myMap2);
    		System.out.println(myMap);
    		//返回key的set集合
    		Set<Integer> keySet = myMap.keySet();
    		System.out.println(keySet);
    		//返回value的集合
    		Collection values = myMap.values();
    		System.out.println(values);
    		
    		
    	}
    }
    

      

    一个例子:

    使用HashMap存储一个公司的员工信息。(泛型可以使用基本数据类型,也可以使用引用数据类型)

    package _20191211;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class HashMapTest02 {
    	public static void main(String[] args) {
    		Employee ep1 = new Employee("小白",20000);
    		Employee ep2 = new Employee("小黑",10000);
    		Map<Integer,Employee> mp = new HashMap<>();
    		mp.put(1001,ep1);
    		mp.put(1002,ep2);
    		System.out.println(mp);
    		
    	}
    }
    
    class Employee{
    	private String name;
    	private int salary;
    	public Employee(String name, int salary) {
    		super();
    		this.name = name;
    		this.salary = salary;
    	}
    	
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public int getSalary() {
    		return salary;
    	}
    	public void setSalary(int salary) {
    		this.salary = salary;
    	}
    	@Override
    	public String toString() {
    		return " 姓名:"+name+" 薪水:"+salary;
    	}
    }
    

      

    HashMap与HashTable的区别

    HashMap:线程不安全,效率高,允许key与value为null

    HashTable:线程安全,效率低,不允许key与value为null

  • 相关阅读:
    (六)目标文件目录探测
    (五)物理路径探测
    (四)目标后台的探测
    小妙招
    MFC的一些常用操作
    UNICODE,GBK,UTF-8区别
    c++编程的字符集及其转换
    windows消息的循环机制
    c++ mfc和win32项目
    c++ 一些注意事项
  • 原文地址:https://www.cnblogs.com/Scorpicat/p/12021147.html
Copyright © 2020-2023  润新知