Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的HashMap函数keyset()_Java_String_Hashmap_Keyset - Fatal编程技术网

java中的HashMap函数keyset()

java中的HashMap函数keyset(),java,string,hashmap,keyset,Java,String,Hashmap,Keyset,我在一组“keys”中获取由keyset()方法返回的值(因为返回类型是在keyset()的内部设置的),然后我创建了一个长度键数组并将字符串放入其中进行返回。但其顺序不同。不保证/保留元素的插入顺序,因此使用LinkedHashMap保留插入字符的顺序: input: o&6nQ0DT$3 expected output: o&6nQ0DT$3 my output: 0Q3DT$&6no maph=newlinkedhashmap()//使用LinkedHashMa

我在一组“keys”中获取由
keyset()
方法返回的值(因为返回类型是在
keyset()
的内部设置的),然后我创建了一个长度键数组并将字符串放入其中进行返回。但其顺序不同。

不保证/保留元素的插入顺序,因此使用
LinkedHashMap
保留插入字符的顺序:

input: o&6nQ0DT$3
expected output: o&6nQ0DT$3 
my output: 0Q3DT$&6no
maph=newlinkedhashmap()//使用LinkedHashMap
A
HashMap
(或
HashSet
,就这一点而言)没有内在的顺序。事实上,这对某些输入有效,这只是一个幸运的一击。正如@javaguy所建议的,您可以使用
LinkedHashMap
,或者使用流实现整个练习可能更容易:

Map<Character,Character> h = new LinkedHashMap<>();//use LinkedHashMap

我不知道您是如何完全使用hashmap的,也许您想用ArrayList替换它,如下所示:

String input =  "o&6nQ0DT$3";
String output = input.chars()
                     .distinct()
                     .mapToObj(c -> String.valueOf((char) c))
                     .collect(Collectors.joining());
ArrayList h=新的ArrayList();

对于(inti=0;i,它可以在没有HashMap的情况下完成吗

ArrayList<Character> h = new ArrayList<>();
for(int i=0;i<str.length();i++)
{
   if(!h.contains(str.charAt(i)))
      h.add(str.charAt(i));
   }
...
改进,怎么样?使用TreeSet的解决方案

    String str = "Teste";
    String finalStr = ""; 

    for (Character charInString: str.toCharArray()) {
        if(!finalStr.contains(charInString.toString()))
        {
            finalStr += charInString;
        }

    }
    System.out.println(finalStr);
String str=“teste”;
HashMap=newHashMap();
对于(int i=0;iSystem.out.println(k+“value”+map.get(k.toString());

LinkedHashMap&LinkedHashSet维护插入顺序

    String str = "teste";
    HashMap<Integer, Character> map = new HashMap<>();
    for (int i = 0; i < str.length(); i++) {
        if (!map.containsValue(str.charAt(i))) {
            map.put(i, str.charAt(i));
        }
    }
    SortedSet<Integer> keys = new TreeSet<Integer>(map.keySet());
    keys.forEach(k -> System.out.println(k + " value " + map.get(k).toString()));

但是LinkedHashSet在内部使用hashmap来存储值,因此LinkedHashMap的性能会稍好一些。

hashmap没有固定的顺序。(来自hashmap javaDoc:“这个类不保证映射的顺序;特别是,它不保证随着时间的推移顺序保持不变。”)如果您希望映射保持插入顺序,请使用LinkedHashMap(1)不要使用映射,因为您不需要映射,但要保证元素的唯一性,这是集合的角色。(2)HashMap(或HashSet)不保留插入顺序(或任何特定顺序)。要保留它,请使用LinkedHashMap,或者在您的情况下使用LinkedHashSet。但他想删除重复项。这是必须使用的。我喜欢java 8的使用方式。
    String str = "teste";
    HashMap<Integer, Character> map = new HashMap<>();
    for (int i = 0; i < str.length(); i++) {
        if (!map.containsValue(str.charAt(i))) {
            map.put(i, str.charAt(i));
        }
    }
    SortedSet<Integer> keys = new TreeSet<Integer>(map.keySet());
    keys.forEach(k -> System.out.println(k + " value " + map.get(k).toString()));
String s = "o&6nQ0DT$3";
Map<Character,Character> hm = new LinkedHashMap<>();    
for(Character c:s.toCharArray())
    hm.put(c, c);
System.out.println(hm);
{o=o, &=&, 6=6, n=n, Q=Q, 0=0, D=D, T=T, $=$, 3=3}