【问题标题】:Creating a TreeSet that would ignore the case创建一个忽略大小写的 TreeSet
【发布时间】:2014-04-02 22:37:38
【问题描述】:

Java Collections Framework 的 Java 教程中的一个练习要求使用 SortedSet 来消除参数的重复项并指定 Comparator,以便在排序和识别集合元素时忽略大小写。

以下是具体要求: “以 FindDups 示例并对其进行修改以使用 SortedSet 而不是 Set。指定一个 Comparator,以便在排序和识别集合元素时忽略大小写。”

这里是 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);
}
}

为了实现所需的行为,我能想到的最多(通过考虑一个用小写字母写的单词和另一个用大写字母写的单词作为重复来消除重复)是下面的代码,但我不知道如何使用比较器和排序集。我在示例中使用了 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);
}

}

如何使用 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);
    }
};

}

【问题讨论】:

  • 您浏览过TreeSet javadoc吗?它的构造函数列表?...
  • 感谢您的提示 - 使用 Comparator 作为参数的构造函数!

标签: java collections set comparator sortedset


【解决方案1】:
SortedSet<String> eliminatedDups =
   new TreeSet<String>(String.CASE_INSENSITIVE_ORDER);
Collections.addAll(eliminatedDups, args);

【讨论】:

  • 太棒了!甚至不需要我写一个新的比较器
  • 两个两个参数是什么?如果提供 1,它将添加。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-08
  • 2021-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多