Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建忽略案例的树集_Java_Collections_Set_Comparator_Sortedset - Fatal编程技术网

Java 创建忽略案例的树集

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) {

Java集合框架Java教程中的一个练习要求使用SortedSet消除重复的参数,并指定一个比较器,以便在排序和标识集合元素时忽略大小写

具体要求如下: “以FindDups为例,将其修改为使用SortedSet而不是Set。指定一个比较器,以便在对集合元素进行排序和标识时忽略该大小写。”

下面是FindDups示例:

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);