如何在java中根据HashSet的顺序创建HashMap
我有一个LinkedHashMap,想根据HashSet下的条目创建一个新LinkedHashMap如何在java中根据HashSet的顺序创建HashMap,java,Java,我有一个LinkedHashMap,想根据HashSet下的条目创建一个新LinkedHashMap import java.util.*; public class LinkedHashMapDemo { public static void main(String args[]) { // Currently empty LinkedHashMap<String, String> newhashmap = new LinkedHashMa
import java.util.*;
public class LinkedHashMapDemo {
public static void main(String args[]) {
// Currently empty
LinkedHashMap<String, String> newhashmap = new LinkedHashMap<String, String>();
// old hash map
LinkedHashMap<String, String> oldhashmap = new LinkedHashMap<String, String>();
// Put elements to the map
oldhashmap.put("Zara", "zaravalue");
oldhashmap.put("Mahnaz", "Mahnazvalue");
oldhashmap.put("Ayan", "Ayanvalue");
oldhashmap.put("Daisy", "Daisyvalue");
oldhashmap.put("Qadir", "Qadirvalue");
HashSet<String> hs = new HashSet<String>();
// add elements to the hash set
hs.add("Zara");
hs.add("Ayan");
hs.add("Qadir");
Iterator iterator = hs.iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String val = oldhashmap.get(key);
}
}
}
如果可能,请告诉我如果您愿意从旧哈希集中删除,您可以使用
remove()
方法
while (iterator.hasNext()) {
String key = (String) iterator.next();
String val = oldhashmap.remove(key);
newhashmap.put(key, val);
}
newhashmap.putAll(oldhashmap);
您可能还想考虑使用所需的顺序创建具有自定义的,但对于您的示例来说,这可能有点过于复杂
编辑:您还需要将哈希集更改为LinkedHashSet,以便依赖于排序。如果您愿意从旧哈希集中删除,可以使用
remove()
方法
while (iterator.hasNext()) {
String key = (String) iterator.next();
String val = oldhashmap.remove(key);
newhashmap.put(key, val);
}
newhashmap.putAll(oldhashmap);
您可能还想考虑使用所需的顺序创建具有自定义的,但对于您的示例来说,这可能有点过于复杂
编辑:您还需要将哈希集更改为LinkedHashSet,以便您可以依赖于排序。我的第一种方法如下所示:
...
LinkedHashMap<String, String> storage = new LinkedHashMap<String, String>();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String val = oldhashmap.get(key);
if(hs.contains(val){
newhashmap.put(key, val);
}else {
storage.put(key, val);
}
}
newhashmap.putAll(storage);
...
。。。
LinkedHashMap存储=新建LinkedHashMap();
while(iterator.hasNext()){
字符串键=(字符串)迭代器。下一步();
字符串val=oldhashmap.get(键);
如果(hs.contains)(val){
newhashmap.put(key,val);
}否则{
存储。放置(键,val);
}
}
newhashmap.putAll(存储);
...
这样可以避免修改旧的hashmap或重复数据两次。我的第一种方法如下所示:
...
LinkedHashMap<String, String> storage = new LinkedHashMap<String, String>();
while (iterator.hasNext()) {
String key = (String) iterator.next();
String val = oldhashmap.get(key);
if(hs.contains(val){
newhashmap.put(key, val);
}else {
storage.put(key, val);
}
}
newhashmap.putAll(storage);
...
。。。
LinkedHashMap存储=新建LinkedHashMap();
while(iterator.hasNext()){
字符串键=(字符串)迭代器。下一步();
字符串val=oldhashmap.get(键);
如果(hs.contains)(val){
newhashmap.put(key,val);
}否则{
存储。放置(键,val);
}
}
newhashmap.putAll(存储);
...
通过这种方式,您可以避免修改旧的hashmap或重复数据两次。您不能依赖HashSet或hashmap中元素的顺序。当您的HashSet仅包含
Zara、Ayan、Qadir
时,条目Mahnaz、Daisy
将基于哪个规则添加到newhashmap
?@Eran,这就是他使用链接的原因edHashMap@jimmycarr他还使用了一个HashSet
。哎呀,我错过了。是的,他需要把它改成linkedhashset。你不能依赖HashSet或HashMap中元素的顺序。当你的HashSet只包含Zara、Ayan、Qadir
时,条目Mahnaz、Daisy
是根据哪个规则添加到newhashmap?@Eran这就是为什么他使用LinkedHashMap@jimmycarr他还使用了一个哈希集
。哎呀,我错过了。是的,他需要把它改成LinkedHashSet