【发布时间】:2017-04-26 16:46:04
【问题描述】:
HashMap<Character,Character> h=new HashMap<>();
for(int i=0; i<str.length(); i++){
h.put(str.charAt(i),str.charAt(i));
}
Set<Character> keys=h.keySet();
Character [] arr=new Character[keys.size()];
keys.toArray(arr);
String ans="";
for(int i=0; i<arr.length; i++) {
ans+=arr[i];
}
在这个问题中,我必须从输入的字符串中删除重复项。它适用于普通字符,但当输入如下:o&6nQ0DT$3 即包含特殊字符时,它不会按顺序打印。
input: o&6nQ0DT$3
expected output: o&6nQ0DT$3
my output: 0Q3DT$&6no
我在一组“键”中获取keyset() 方法返回的值(因为返回类型是在keyset() 内部设置的),然后我创建了一个长度键数组并将字符串放入其中以供返回。但它的顺序不同。
【问题讨论】:
-
HashMap 没有固定的顺序。 (来自 HashMap javaDoc:“此类不保证映射的顺序;特别是,它不保证顺序会随着时间的推移保持不变。”)如果您希望 Map 保持插入顺序,请使用LinkedHashMap 代替
-
(1) 不要使用Map,因为你不需要映射,但要保证元素的唯一性,这是Set的作用。 (2) HashMap(或HashSet)不保留插入顺序(或任何特定顺序)。要保存它,请使用 LinkedHashMap,或者在您的情况下使用 LinkedHashSet。
标签: java string hashmap keyset