0

我正在使用一个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], ]

不知道我做错了什么,或者是否有其他方法可以做到这一点。感谢所有评论。

4

3 回答 3

1

像这样修改您的代码:

Iterator<? extends K> nextKey = map.keySet().iterator();
    while(nextKey.hasNext()){
        put((K)nextKey.next(), map.get(nextKey.next()));
    }
于 2013-08-25T03:04:41.197 回答
1

这是 G V 的代码(不想在未经同意的情况下编辑他/她的代码)。

Iterator<? extends K> nextKey = map.keySet().iterator();
    while(nextKey.hasNext()){
        K key = nextKey.next();
        put(key, map.get(key));
    }
于 2013-08-25T06:54:10.973 回答
0

您的putAll方法有问题,因为不需要匹配keySet()and 。values()而是使用Map#entrySet()将它们作为匹配对检索。

于 2013-08-25T03:19:51.297 回答