当前位置:  开发笔记 > 编程语言 > 正文

将给定String的唯一字母添加到List

如何解决《将给定String的唯一字母添加到List》经验,为你挑选了2个好方法。

我想在列表中添加一个字符串的字母,但我只想添加一次字母.例如,如果字符串是"HELLO AM CHRISTOS WHITE",则某些字母会出现多次,所以我希望它们只能添加一次.

我正在考虑两个for循环:

for (int i=0; i< str.length(); i++){
    for(int j=0; j< str.length(); j++){
        if (str.charAt(i) != str.charAt(j)) {
            myList.add(charAt(i));
        }
    }
}

但是这段代码不能避免重复.



1> Eran..:

使用a LinkedHashSet来确定唯一字符会更有效.如果使用a LinkedHashSet,则将保留输入String的唯一字符的顺序.

在单个循环之后,这将花费线性时间,您可以将所有唯一字符添加到输出中List.

Set unique = new LinkedHashSet<>();
for (int i = 0; i < str.length(); i++){
    unique.add(str.charAt(i));
}
myList.addAll(unique);



2> Mena..:

为了防止集合中的重复,您不需要List,您需要Set(例如HashSet).

如果您想保留添加Strings 的订单,请使用LinkedHashSet.

最后,如果您希望Set自然地对您的Strings 进行排序(或者能够Comparator使用a 对它们进行排序),请使用a TreeSet.

String foo = "ghghababcdef";
Set hash = new HashSet<>();
Set linked = new LinkedHashSet<>();
Set tree = new TreeSet<>();
// iterating characters
for (char c: foo.toCharArray()) {
    // adding String representation of character to each set
    hash.add(Character.toString(c));
    linked.add(Character.toString(c));
    tree.add(Character.toString(c));
}
// printing...
System.out.println(hash);
System.out.println(linked);
System.out.println(tree);

产量

[a, b, c, d, e, f, g, h] // this may vary
[g, h, a, b, c, d, e, f] // keeps insertion order
[a, b, c, d, e, f, g, h] // sorted lexicographically by default

推荐阅读
echo7111436
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有