我正在尝试将哈希表1中的前5个键值对复制到哈希表2中 然后从哈希表1到哈希表3接下来的第6到第10个键值对。
我无法做到这一点,任何人都有任何提示请与我分享
答案 0 :(得分:1)
尝试这样的事情。
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));
}
}
适当添加泛型等。
答案 1 :(得分:0)
首先,您需要知道Hashtable
不能保持插入元素的顺序,因此前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;
}
然后只调用splitMap(yourMap,5)以获取每个包含5个条目的地图集合(实际上是一个列表)(如果初始地图中没有足够的条目,则为最后一个或更少)。