如何在java中根据HashSet的顺序创建HashMap

如何在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

我有一个LinkedHashMap,想根据HashSet下的条目创建一个新LinkedHashMap

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