📅  最后修改于: 2023-12-03 15:02:01.540000             🧑  作者: Mango
哈希表(Hash table)是一种用于存储键值对的数据结构。在Java中,哈希表也被称作HashMap。它是一种基于哈希算法实现的数据结构,可以快速地插入、查找、删除数据。
哈希算法是一种可以将任意长度的数据转换为固定长度(通常比原始数据要小)的算法。这个转换过程其实就是哈希函数的计算过程。通过哈希函数的计算,可以将数据映射到哈希表的特定位置,从而实现快速的数据存储和查询。
在Java中,哈希函数主要是通过对键值进行哈希计算来实现的。哈希函数使用了键值的所有信息来生成哈希值,而哈希值则用来确定键值在哈希表中的位置。因此,如果两个键值的哈希值相同,它们就会被存储在哈希表中的同一个位置。这种情况叫做哈希冲突(Hash Collision)。
哈希表具有以下几个特点:
在Java中,可以通过Hashtable或HashMap类来创建哈希表。
Hashtable是一个线程安全的哈希表,因此它具有较高的开销,对于多线程环境下的操作,使用Hashtable更为安全。Hashtable的使用方式和HashMap相似,可以使用put()方法来插入数据,使用get()方法来查找数据,使用remove()方法来删除数据。
Hashtable的创建方式如下:
Hashtable<String, Integer> table = new Hashtable<>();
上面的代码创建了一个存储String类型的键和Integer类型的值的哈希表对象。可以使用put()方法来插入数据,如下所示:
table.put("one", 1);
table.put("two", 2);
table.put("three", 3);
HashMap是一个非线程安全的哈希表,因此它的开销相对较小,对于单线程环境下的操作,使用HashMap更加高效。HashMap的使用方式和Hashtable相似,可以使用put()方法来插入数据,使用get()方法来查找数据,使用remove()方法来删除数据。
HashMap的创建方式如下:
HashMap<String, Integer> map = new HashMap<>();
上面的代码创建了一个存储String类型的键和Integer类型的值的哈希表对象。可以使用put()方法来插入数据,如下所示:
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
使用HashMap或Hashtable创建的哈希表都可以使用迭代器(Iterator)进行遍历。在Java中,可以使用以下三种方式进行哈希表的遍历:
可以使用HashMap或Hashtable自带的keySet方法获取键集,通过键集获取值,然后用迭代器遍历。
Iterator<String> iterator = map.keySet().iterator();
while(iterator.hasNext()){
String key = iterator.next();
Integer value = map.get(key);
System.out.println("key: " + key + ", value: " + value);
}
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String, Integer> entry = iterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("key: " + key + ", value: " + value);
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("key: " + key + ", value: " + value);
}
在Java中的哈希表提供了以下常用的方法:
HashMap<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
if (map.containsKey("one")) {
System.out.println("one: " + map.get("one"));
}
if (map.containsValue(3)) {
System.out.println("3 exists");
}
map.remove("two");
System.out.println("keys: " + map.keySet());
System.out.println("values: " + map.values());
System.out.println("size: " + map.size());
以上代码演示了哈希表的插入、查找、删除等常用操作。
哈希表是一种高效的数据结构,对于存储键值对的数据处理场景非常适用。在Java中,可以使用Hashtable或HashMap来创建哈希表,并通过put、get、remove等方法进行操作。此外,还可以使用迭代器或foreach方法对哈希表进行遍历,并提供了containsKey、containsValue、size等常用方法供使用者使用。