iul*_*kia 6 java collections set sortedset comparator
来自Java Collections Framework的Java教程的练习要求使用SortedSet来消除参数的重复,并指定Comparator,以便在排序和标识set元素时忽略大小写.
这是确切的要求:"获取FindDupsexample并修改它以使用SortedSet而不是Set.指定一个Comparator,以便在排序和识别set元素时忽略大小写."
这是FindDupsExample:
import java.util.*;
public class FindDups {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
for (String a : args)
s.add(a);
System.out.println(s.size() + " distinct words: " + s);
}
}
Run Code Online (Sandbox Code Playgroud)
我能想出的最多可以达到预期的行为(通过考虑用小型大写字母写一次的单词来消除重复,而另一次用大大写字母作为副本来消除重复)是下面的代码,但我对如何使用比较器毫无头绪和SortedSet.我在我的例子中使用了SortedSet,但我可以很好地使用一个简单的Set:
public class FindDups {
public static void main(String[] args) {
Set<String> s = new HashSet<String>();
List<String> list = new ArrayList<String>();
SortedSet<String> eliminatedDups = null;
for (String a : args) {
s.add(a);
list.add(a.toLowerCase());
}
eliminatedDups = new TreeSet<String>(list);
System.out.println(s.size() + " distinct words by taking into consideration the case: " + s);
System.out.println(list.size() + " initial list translated into all small caps: " + list);
System.out.println(eliminatedDups.size() + " distinct words by ignoring case: " + eliminatedDups);
}
Run Code Online (Sandbox Code Playgroud)
}
我怎样才能使用SortedSet和Comparator来获得所需的效果?
谢谢,
受到SJuan76的启发,终于拿出:
public class FindDupsFinal {
public static void main(String[] args) {
SortedSet<String> eliminatedDups2 = new TreeSet<String>(IGNORE_CASE);
for (String a : args) {
eliminatedDups2.add(a);
}
System.out.println(eliminatedDups2.size() + " distinct words by ignoring case: " + eliminatedDups2);
}
static final Comparator<String> IGNORE_CASE = new Comparator<String>() {
public int compare(String s1, String s2) {
return s1.compareToIgnoreCase(s2);
}
};
Run Code Online (Sandbox Code Playgroud)
}
Lou*_*man 18
SortedSet<String> eliminatedDups =
new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
Collections.addAll(eliminatedDups, args);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3801 次 |
| 最近记录: |