Chr*_*ael 11 java loops for-loop arraylist
我想在列表中添加一个字符串的字母,但我只想添加一次字母.例如,如果字符串是"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));
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不能避免重复.
Era*_*ran 14
使用a LinkedHashSet来确定唯一字符会更有效.如果使用a LinkedHashSet,则将保留输入String的唯一字符的顺序.
在单个循环之后,这将花费线性时间,您可以将所有唯一字符添加到输出中List.
Set<Character> unique = new LinkedHashSet<>();
for (int i = 0; i < str.length(); i++){
unique.add(str.charAt(i));
}
myList.addAll(unique);
Run Code Online (Sandbox Code Playgroud)
Men*_*ena 13
为了防止集合中的重复,您不需要List,您需要Set(例如HashSet).
如果您想保留添加Strings 的订单,请使用LinkedHashSet.
最后,如果您希望Set自然地对您的Strings 进行排序(或者能够Comparator使用a 对它们进行排序),请使用a TreeSet.
例
String foo = "ghghababcdef";
Set<String> hash = new HashSet<>();
Set<String> linked = new LinkedHashSet<>();
Set<String> 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);
Run Code Online (Sandbox Code Playgroud)
产量
[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
Run Code Online (Sandbox Code Playgroud)