我有一个HashMap
类,它将Object[]
类型的变量“table”实例化为Object[cap]
,其中cap在测试中等于10。我在HashMap
类中有以下put方法:
public void put(K key, V value){
HashEntry<K, V> newEntry = new HashEntry<K, V>(key, value);
location = Math.abs(key.hashCode()) % capacity;
//System.out.println(location);
if(table[location] == null){
table[location] = new ArrayList<HashEntry<K, V>>();
table[location] = newEntry;
numItems++;
}
else {
table[location] = newEntry;
}
}
为了使ArrayList
有效,我应该使用table[location].add(newEntry)
,而不是table[location] = newEntry
。但是,如果我使用前者,我会收到消息“方法add(HashEntry<K,V>)
未定义类型Object
。”当我使用后者时,我当然无法获得正确的输出,因为没有“bucket
”来从中检索信息。我更喜欢将ArrayList
用于二维数组,因为我根本没有得到2D arrays
!任何帮助都是值得赞赏的,因为我整天都在尝试一百万种不同的东西。
答案 0 :(得分:0)
if(table[location] == null){
table[location] = new ArrayList<HashEntry<K, V>>();
table[location] = newEntry;
numItems++;
}
else {
table[location] = newEntry;
}
这是错的。它应该是:
if(table[location] == null){
table[location] = new ArrayList<HashEntry<K, V>>();
}
table[location].add(newEntry);
该表是对ArrayList<HashEntry<K,V>>
的引用数组一旦找到了所需的存储桶(并在需要时对其进行了初始化),您希望将新条目添加到{{ 1}}。
答案 1 :(得分:-1)
将Array的元素直接分配给ArrayList的一种方法是:
String array[]={"Abc","Def"};
List<String> list=Arrays.asList(array);
第二种方法是通过for循环遍历数组元素,然后将它们分配给arrayList:
for(int i=0;i<array.length'i++)
{
list.add(arr[i]);
}