首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java中的HashMap函数keyset()

java中的HashMap函数keyset()
EN

Stack Overflow用户
提问于 2017-04-27 00:46:05
回答 5查看 691关注 0票数 3
代码语言:javascript
复制
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];
}

在这个问题中,我必须从字符串中删除重复项,对于普通字符,entered.It可以很好地工作,但是当输入像:o&6nQ0DT$3,即包含特殊字符时,它就不会按顺序打印。

代码语言:javascript
复制
input: o&6nQ0DT$3
expected output: o&6nQ0DT$3 
my output: 0Q3DT$&6no

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

EN

回答 5

Stack Overflow用户

发布于 2017-04-27 00:55:35

HashMap (或HashSet,就此而言)没有固有顺序。事实上,这对一些输入有效,这只是一个幸运的笔画。您可以使用LinkedHashMap,就像@javaguy建议的那样,或者使用streams实现整个练习可能更容易:

代码语言:javascript
复制
String input =  "o&6nQ0DT$3";
String output = input.chars()
                     .distinct()
                     .mapToObj(c -> String.valueOf((char) c))
                     .collect(Collectors.joining());
票数 2
EN

Stack Overflow用户

发布于 2017-04-27 00:50:48

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

代码语言:javascript
复制
Map<Character,Character> h = new LinkedHashMap<>();//use LinkedHashMap
票数 1
EN

Stack Overflow用户

发布于 2017-04-27 00:57:32

没有HashMap也能做到吗?

代码语言:javascript
复制
    String str = "Teste";
    String finalStr = ""; 

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

    }
    System.out.println(finalStr);

改进,那又如何呢?TreeSet的解决方法。

代码语言:javascript
复制
    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()));
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43640113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档