Java 如何将键值元素从一个哈希表复制到另一个哈希表

Java 如何将键值元素从一个哈希表复制到另一个哈希表,java,Java,我正在尝试将前5个键值对从哈希表1复制到哈希表2 然后是从哈希表1到哈希表3的第6到第10个键值对 我无法继续进行此操作,任何人是否有任何提示请与我共享尝试类似的操作 Hashtable h = new Hashtable(); Hashtable h1 = new Hashtable(); Hashtable h2 = new Hashtable(); Set s = h.keySet(); int i = 0; for (Object key : s) { if ( i++ <

我正在尝试将前5个键值对从哈希表1复制到哈希表2 然后是从哈希表1到哈希表3的第6到第10个键值对


我无法继续进行此操作,任何人是否有任何提示请与我共享

尝试类似的操作

Hashtable h = new Hashtable();
Hashtable h1 = new Hashtable();
Hashtable h2 = new Hashtable();
Set s = h.keySet();
int i = 0;
for (Object key : s) {
    if ( i++ < 3) {
        h1.put(key, h.get(key));
    } else {
        h2.put(key, h.get(key));
    }
}
Hashtable h=新的Hashtable();
Hashtable h1=新的Hashtable();
Hashtable h2=新的Hashtable();
设置s=h.键集();
int i=0;
用于(对象键:s){
if(i++<3){
h1.put(key,h.get(key));
}否则{
h2.put(key,h.get(key));
}
}

根据需要添加泛型等。

首先,您需要知道
哈希表不能保持插入元素的顺序,因此前5个可以是任意的

如果希望保留插入顺序,请使用
LinkedHashMap
(如果希望它是线程安全的,可以将其包装在
Collections.synchronizedMap()
中)

此外,还有一个名为
NavigableMap
的界面,由
TreeMap
实现,它提供了类似
subMap()
的方法,但您需要知道从哪个键到哪个键(而不是使用索引)。这也将保存按键排序的条目

如果您只能依赖索引,除了使用
LinkedHashMap
,我建议您使用以下通用解决方案:

<K, V> Collection<Map<K, V>> splitMap(Map<K, V> map, int count) {
    if (count <= 0) {
        throw new IllegalArgumentException("zero or negative count");
    }
    List<Map<K, V>> list = new ArrayList<Map<K, V>>();
    Iterator<Entry<K, V>> entries = map.entrySet().iterator();
    while (entries.hasNext()) {
        list.add(subMap(entries, count));
    }
    return list;
}

<K, V> Map<K, V> subMap(Iterator<Entry<K, V>> iterator, int count) {
    Map<K, V> map = new LinkedHashMap<K, V>();
    for (int i = 0; i < count && iterator.hasNext(); i++) {
        Entry<K, V> entry = iterator.next();
        map.put(entry.getKey(), entry.getValue());
    }
    return map;
}
集合拆分映射(映射映射,整数计数){

if(count抱歉,但我不知道这会造成什么困难。你能说明你到目前为止是否尝试过,并解释为什么它不起作用吗?哈希表条目通常是无序的。你能解释一下“前5个键值对”是什么意思吗?首先是什么顺序吗?@Matt,在我复制之前,每次我将条目添加到哈希表中,