HashMap和Hashtable以 key-value 的形式存储值。
HashSet包含惟一的元素,HashMap、HashTable包含惟一的key。
HashSet
HashSet继承了AbstractSet类并实现了Set接口。Set对象总是唯一的,不允许有重复的对象。允许一个空键值。哈希机制用于将对象插入到HashSet中。
import java.util.*;
public class Main {
public static void main(String args[])
{
//Creating HashSet Object
HashSet angularDevepolers = new HashSet();
//Adding objects in HashSet
angularDevepolers.add("Navdeep");
angularDevepolers.add("Anil");
angularDevepolers.add("Lokesh");
angularDevepolers.add("Sushil");
angularDevepolers.add("Amrita");
//Printing HashSet
System.out.println(angularDevepolers);
}
}
[Amrita, Sushil, Navdeep, Lokesh, Anil]
HashMap
java中的HashMap类,通过使用HashTable实现映射接口。它继承了AbstractMap类并实现了Map接口。它表示一组对象,每个对象都是键值对形式。它不维护其元素的顺序。不允许复制 Key。它只能有一个null作为键,多个null作为 value。
import java.util.*;
public class Main {
public static void main(String args[])
{
//Creating HashMap Object
HashMap<Integer,String> angularDevepolers = new HashMap<Integer,String>();
//Adding objects in HashMap
angularDevepolers.put(1, "Navdeep");
angularDevepolers.put(4, "Anil");
angularDevepolers.put(5, "Lokesh");
angularDevepolers.put(2, "Sushil");
angularDevepolers.put(3, "Amrita");
//Printing HashMap objects
for (Map.Entry entry : angularDevepolers.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
1 - Navdeep
2 - Sushil
3 - Amrita
4 - Anil
5 - Lokesh
HashTable
Hashtable继承了Dictionary类并实现了Map接口。哈希表包含key-value 对中elements/objects/items,并且不允许任何重复key。它是线程安全的,因为它的同步特性。key和value都不允许为空。
import java.util.*;
public class Main {
public static void main(String args[])
{
//Creating Hashtable Object
Hashtable<Integer,String> angularDevepolers = new Hashtable<Integer,String>();
//Adding objects in Hashtable
angularDevepolers.put(1, "Navdeep");
angularDevepolers.put(4, "Anil");
angularDevepolers.put(5, "Lokesh");
angularDevepolers.put(2, "Sushil");
angularDevepolers.put(3, "Amrita");
//Printing Hashtable objects
for (Map.Entry entry : angularDevepolers.entrySet()) {
System.out.println(entry.getKey() + " - " + entry.getValue());
}
}
}
5 - Lokesh
4 - Anil
3 - Amrita
2 - Sushil
1 - Navdeep
总结:
HashSet
- 可以包括一个 null value, 所储存元素无序。
- add 添加元素。
- 因为不同步性,所有线程不安全。
HashMap
- 可以包括一个 null key, 多个null value, 所储存元素无序。
- put 添加元素。
- 因为不同步性,所有线程不安全,性能相对优势。
Hashtable
- 不能包括 null key 和 value, 所储存元素无序。
- put 添加元素。
- 因为同步性,所有线程安全。