JAVA集合二:HashMap和Hashtable

参考链接:

HOW2J.CN

HashMap

HashMap实现了JAVA的Map接口,类似于C++的STL框架的Map,是存储键值对的数据结构。键(key)是唯一的,但值(value)可以重复,如果向HashMap的对象中插入一个键值对,但键已经在HashMap对象中存在了,则会覆盖之前的键值对。

package blog;

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

public class Main {
    public static void main(String[] args) {
    	HashMap<Integer, String> map = new HashMap<Integer, String>();
    	//向HashMap中插入键值对
    	map.put(1, "xsy");
    	map.put(2,"theory");
    	map.put(3,"衍射");
    	//检验HashMap中是否包含某个键值
    	System.out.println("HashMap中是否包含key 1: "+map.containsKey(1));
    	//通过指定key获取值
    	System.out.println("HashMap中key为1的值是:"+map.get(1));
    	//删除key为1的元素
    	map.remove(1);
    	//遍历HashMap(推荐)
    	for(Map.Entry<Integer, String> entry: map.entrySet()){
    		System.out.println("Key: "+ entry.getKey()+ " Value: "+entry.getValue());
        }
    }
}

运行结果如下:

HashMap中是否包含key 1: true
HashMap中key为1的值是:xsy
Key: 2 Value: theory
Key: 3 Value: 衍射

Hashtable

HashSet同样实现了JAVA的Map接口,和HashMap基本同样的操作,但是HashMap可以用null做键和值,Hashtable不能用null做键和值。

除此之外,HashMap不是线程安全的类,Hashtable是线程安全的类

HashMap的函数没有synchronize修饰,不能保证同一时刻只有一个方法可以进入到临界区,当多个线程同时工作时,可能共同操作共享数据。
在这里插入图片描述
Hashtable的函数有synchronize修饰,可以保证同一时刻只有一个方法进入到临界区,避免了脏数据,线程安全。
在这里插入图片描述

原文地址:https://www.cnblogs.com/theory/p/11884322.html