Java 试图理解hashmap数据结构
我正在做一个关于构建hashmap数据结构的家庭作业,但我不理解给我们的一行代码。在程序中,变量按如下方式启动:Java 试图理解hashmap数据结构,java,data-structures,hashmap,Java,Data Structures,Hashmap,我正在做一个关于构建hashmap数据结构的家庭作业,但我不理解给我们的一行代码。在程序中,变量按如下方式启动: private Map<K,V>[] buckets; private Map[]bucket; 我知道在hashmap中使用bucket的概念是什么,但是如何使用map数组来创建bucket呢?当我看这段代码时,似乎我需要创建一个哈希映射数组,但这根本没有意义 如果你需要更多的信息,请告诉我 非常感谢您的帮助 下面是提供的代码 package cs2321; im
private Map<K,V>[] buckets;
private Map[]bucket;
我知道在hashmap中使用bucket的概念是什么,但是如何使用map数组来创建bucket呢?当我看这段代码时,似乎我需要创建一个哈希映射数组,但这根本没有意义
如果你需要更多的信息,请告诉我
非常感谢您的帮助
下面是提供的代码
package cs2321;
import net.datastructures.*;
public class HashMap<K, V> implements Map<K, V> {
private Map<K,V>[] buckets;
protected final int mDefaultHashSize = 1021;
/**
* Constructor that takes a hash size
* @param hashsize The number of buckets to initialize
* in the HashMap
*/
public HashMap(int hashsize){
// TODO: Be sure to initialize the bucket array
// using the hashsize given as the number of buckets
}
public HashMap(){
// TODO: Be sure to initialize the bucket array
// using the default hash size provided.
}
public Iterable<Entry<K, V>> entrySet() {
// TODO Auto-generated method stub
return null;
}
public V get(K key) throws InvalidKeyException {
// TODO Auto-generated method stub
return null;
}
public boolean isEmpty() {
// TODO Auto-generated method stub
return false;
}
public Iterable<K> keySet() {
// TODO Auto-generated method stub
return null;
}
public V put(K key, V value) throws InvalidKeyException {
// TODO Auto-generated method stub
return null;
}
public V remove(K key) throws InvalidKeyException {
// TODO Auto-generated method stub
return null;
}
public int size() {
// TODO Auto-generated method stub
return 0;
}
public Iterable<V> values() {
// TODO Auto-generated method stub
return null;
}
包cs2321;
导入net.datastructures.*;
公共类HashMap实现映射{
私人地图[]桶;
受保护的最终int-mDefaultHashSize=1021;
/**
*采用哈希大小的构造函数
*@param hashsize要初始化的存储桶数
*在HashMap中
*/
公共HashMap(int hashsize){
//TODO:确保初始化bucket数组
//使用给定的hashsize作为存储桶数
}
公共HashMap(){
//TODO:确保初始化bucket数组
//使用提供的默认哈希大小。
}
公共Iterable入口集(){
//TODO自动生成的方法存根
返回null;
}
public V get(K键)抛出InvalidKeyException{
//TODO自动生成的方法存根
返回null;
}
公共布尔值为空(){
//TODO自动生成的方法存根
返回false;
}
公共可编辑键集(){
//TODO自动生成的方法存根
返回null;
}
公共V put(K键,V值)抛出InvalidKeyException{
//TODO自动生成的方法存根
返回null;
}
public V remove(K键)抛出InvalidKeyException{
//TODO自动生成的方法存根
返回null;
}
公共整数大小(){
//TODO自动生成的方法存根
返回0;
}
公共Iterable值(){
//TODO自动生成的方法存根
返回null;
}
}如果没有更广泛的代码基础,很难准确地说,但是从给出的信息来看,我怀疑在本文中“Map”实际上是指“MapEntry”或类似的东西,并且Map条目表示键/值对 请记住,hashmap存储桶需要同时包含键和值,以便能够区分具有不同键但具有相同哈希值的条目 请注意,Java中的映射项通常应符合。如果您案例中使用的“Map”类支持此接口,那么这是一个很好的线索,表明它正在扮演此角色:-) 当然,另一种可能性是它们实际上是表示每个bucket内容的hashmap。但这似乎很奇怪,原因有二:
- 在单个bucket中使用hashmap没有任何好处,因为您已经知道它们具有相同的hashcode
- 如果您已经有了一个hashmap实现,那么使用它来重新实现另一个hashmap会很奇怪
从现在发布的代码中可以清楚地看出,其意图是最后两个选项之一,即使用另一个映射结构来实现hashmap,以表示每个bucket的内容。出于上面给出的原因,这似乎有些奇怪,但我认为从模板代码中可以清楚地看出,这正是它的意图。这里有一组HashMap,用于演示HashMap的工作原理。研究它,告诉我们它是如何工作的,以及为什么HashMaps被如此广泛地使用
public class Test {
static private Map<String,String>[] buckets;
static int numberOfBuckets = 3;
static public void main(String...strings) {
buckets = new Map[numberOfBuckets];
for (int x=0; x!=numberOfBuckets; x++) {
buckets[x]=new HashMap<String,String>();
}
String s1 = "one ijsiji jdj i";
String s2 = "two ijs42i jdj i";
String s3 = "th3 ijsiji 42j i";
String s4 = "i42 ji jdj i";
buckets[(Math.abs(s1.hashCode()) % numberOfBuckets)].put(s1,"");
buckets[(Math.abs(s2.hashCode()) % numberOfBuckets)].put(s2,"");
buckets[(Math.abs(s3.hashCode()) % numberOfBuckets)].put(s3,"");
buckets[(Math.abs(s4.hashCode()) % numberOfBuckets)].put(s4,"");
for (int x=0; x!=numberOfBuckets; x++) {
System.out.println(buckets[x]);
}
}
}
你说得对,那没有道理。通常桶是用链表实现的。谢谢你,米凯拉,我明白你的意思。在我们使用的书《Java中的数据结构和算法,第五版》中,它使用Entry[]来创建bucket数组。一旦我弄明白如何正确使用这个网站,我将发布我们的讲师提供的整个课程。
{two ijs42i jdj i=}
{one ijsiji jdj i=, i42 ji jdj i=}
{th3 ijsiji 42j i=}