Java 创建忽略案例的树集
Java集合框架Java教程中的一个练习要求使用SortedSet消除重复的参数,并指定一个比较器,以便在排序和标识集合元素时忽略大小写 具体要求如下: “以FindDups为例,将其修改为使用SortedSet而不是Set。指定一个比较器,以便在对集合元素进行排序和标识时忽略该大小写。” 下面是FindDups示例:Java 创建忽略案例的树集,java,collections,set,comparator,sortedset,Java,Collections,Set,Comparator,Sortedset,Java集合框架Java教程中的一个练习要求使用SortedSet消除重复的参数,并指定一个比较器,以便在排序和标识集合元素时忽略大小写 具体要求如下: “以FindDups为例,将其修改为使用SortedSet而不是Set。指定一个比较器,以便在对集合元素进行排序和标识时忽略该大小写。” 下面是FindDups示例: import java.util.*; public class FindDups { public static void main(String[] args) {
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);
}
}
import java.util.*;
公共类查找{
公共静态void main(字符串[]args){
Set s=新的HashSet();
for(字符串a:args)
s、 添加(a);
System.out.println(s.size()+“不同单词:”+s);
}
}
为了达到预期的效果,我能想到的最多的代码是下面的代码(通过考虑一次用小号大写字母书写一个单词,另一次用大号大写字母书写一个单词作为副本来消除重复),但我不知道如何使用比较器和SortedSet。我在示例中使用SortedSet,但我可以使用一个简单的集合:
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);
}
公共类查找{
公共静态void main(字符串[]args){
Set s=新的HashSet();
列表=新的ArrayList();
SortedSet eliminatedDups=null;
for(字符串a:args){
s、 添加(a);
list.add(a.toLowerCase());
}
eliminatedDups=新树集(列表);
System.out.println(s.size()+”通过考虑大小写“+s”来区分单词);
System.out.println(list.size()+“初始列表转换为所有小写:“+list”);
System.out.println(eliminatedDups.size()+“通过忽略大小写来区分单词:”+eliminatedDups);
}
}
如何使用SortedSet和比较器获得所需的效果
谢谢
受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);
}
};
公共类FindDupsFinal{
公共静态void main(字符串[]args){
SortedSet eliminatedDups2=新树集(忽略案例);
for(字符串a:args){
2.加入(a);
}
System.out.println(通过忽略大小写:“+eliminatedDups2.size()+”不同的单词);
}
静态最终比较器忽略\案例=新比较器(){
公共整数比较(字符串s1、字符串s2){
返回s1.compareToIgnoreCase(s2);
}
};
}已清除的分拣集UPS=
新树集(字符串.不区分大小写\u顺序);
集合.addAll(已删除的ups、args);
您是否浏览了树集
javadoc?它的构造函数列表?…感谢您的提示-构造函数使用比较器作为参数!伟大的甚至不需要我写一个新的比较器什么是两个参数?如果提供1,则将添加。
SortedSet<String> eliminatedDups =
new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
Collections.addAll(eliminatedDups, args);