Я работаю с цепочкой таблиц хэши java (массив отсортирован по индексу ключа, где индексы связаны списком). Вот инициализации хэш-таблицы для тестового кода:Hash table Chain puttall()
Map<String, Integer> myMap = new HashtableChain<String, Integer>();
myMap.put("ACTG", 120);
myMap.put("ABC", 123);
myMap.put("XYZ", 123);
myMap.put("HTML", 404);
myMap.put("LOL", 999);
myMap.put("OMG", 911);
Map<String, Integer> otherMap =
new HashtableChain<String, Integer>();
otherMap.put("ARC", 121);
otherMap.put("ACT", 102);
otherMap.put("AUT", 109);
myMap.putAll(otherMap);
System.out.println("myMap pairs:");
System.out.println(myMap);
Это то, что это, как предполагается выход:
myMap pairs:
[[OMG=911][LOL=999], [ARC=121], [AUT=109, ABC=123], [AUT=109, ABC=123], [ACTG=120], [XYZ=123], [CIT=245], [HTML=404], [ACT=102], ]
С помощью этого метода:
public void putAll(Map<? extends K, ? extends V> map){
Iterator<? extends K> nextKey = map.keySet().iterator();
Iterator<? extends V> nextValue = map.values().iterator();
while(nextKey.hasNext() && nextValue.hasNext()){
put((K)nextKey.next(), (V)nextValue.next());
}
}
методы, используемые в метод выше:
public Set<K> keySet(){
Set<K> coll = new HashSet<K>();
for(int i = 0; i < table.length; i++){
if(table[i] != null){
for(Entry<K, V> nextItem : table[i]){
coll.add(nextItem.key);
}
}
}
return coll;
}
public Collection<V> values(){
Collection<V> coll = new LinkedList<V>();
for(int i = 0; i < table.length; i++){
if(table[i] != null){
for(Entry<K, V> nextItem : table[i]){
if(nextItem.value != null){
coll.add(nextItem.value);
}
}
}
}
return coll;
}
Эти выходы:
[[OMG=911][LOL=999], [ARC=109], [AUT=102, ABC=123], [AUT=102, ABC=123], [ACTG=120], [XYZ=123], [CIT=245], [HTML=404], [ACT=121], ]
Не уверен, что я делаю неправильно, или если есть другой способ сделать это. Все комментарии оценены.
Почти работали, вместо: положить ((K) nextKey.next(), map.get (nextKey.next())); Я сделал: K key = nextKey.next(); положить (ключ, map.get (ключ)); Потому что это давало мне нулевой указатель (значение на один шаг впереди ключа). Не могу поверить, что я смотрел функцию get() в первую очередь ... слишком много часов, играя главную роль в том же коде, который, я думаю ... – Kerher