这有效:
static class HashMap {
private final int initialCapacity;
private final double loadFactor;
private List<Data<Character, Integer>> [] table;
public HashMap() {
this.initialCapacity = 16;
this.loadFactor = 0.75;
table = (List<Data<Character, Integer>> [])new Object[initialCapacity];
}
}
这不起作用(给出通用数组创建错误):
static class HashMap<K, V> {
private final int initialCapacity;
private final double loadFactor;
private List<Data<K, V>> [] table;
public HashMap() {
this.initialCapacity = 16;
this.loadFactor = 0.75;
table = (List<Data<K, V>> [])new Object[initialCapacity];
}
}
如何让第二个版本正常工作?
你可能会说,我正在尝试实现一个通用的HashMap以获得乐趣。 Data类只是我编写的一个简单的自定义元组类,我希望我的HashMap能够使用用户可能提供的任何键/值类型。表数组是一个包含元组的链表的数组(基本上是一个哈希表)。注意:这里的List类不是内置的Java List类,它也是我WROTE MYSELF的类!
关于通用数组创建错误,有一些关于SO的问题,但它们都没有解决这种情况。任何想法都表示赞赏!
P.S这是Data类,以防有人想要测试代码:
static class Data<K, V> {
private final K key;
private final V value;
public Data(K key, V value) {
this.key = key;
this.value = value;
}
public K getKey() {
return key;
}
public V getValue() {
return value;
}
@Override
public boolean equals(Object obj) {
if (obj == null)
return false;
if (!Data.class.isAssignableFrom(obj.getClass()))
return false;
final Data<K, V> b = (Data<K, V>) obj;
return this.key.equals(b.getKey());
}
}