我正在使用java哈希表链(一个数组按键值的hascode排序,其中索引是链接列表的)。以下是测试代码哈希表的初始化:
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], ]
不确定我做错了什么,或者是否有不同的方法。所有评论都表示赞赏。
答案 0 :(得分:1)
像这样修改你的代码:
Iterator<? extends K> nextKey = map.keySet().iterator();
while(nextKey.hasNext()){
put((K)nextKey.next(), map.get(nextKey.next()));
}
答案 1 :(得分:1)
这正在解决G V的代码(不想在未经同意的情况下编辑他/她)。
Iterator<? extends K> nextKey = map.keySet().iterator();
while(nextKey.hasNext()){
K key = nextKey.next();
put(key, map.get(key));
}
答案 2 :(得分:0)
您的putAll
方法存在问题,因为并不要求keySet()
和values()
匹配。而是使用Map#entrySet()
将它们作为匹配对检索。