【问题标题】:Using comparator without adding class使用比较器而不添加类
【发布时间】:2013-09-27 04:54:33
【问题描述】:

我正在尝试按字符串长度对数组列表进行排序,我知道实现比较器,但我想知道这是否可以在我的函数中完成,而不添加任何额外的类或方法?理想情况下,我想从最短到最长输出它们,但我可以做到!

这是我想用来实现比较器的方法的 sn-p。

public static void sCompare(BufferedReader r, PrintWriter w) throws IOException {

    ArrayList<String> s= new ArrayList<String>();

    String line;
    int n = 0;
    while ((line = r.readLine()) != null) {
        s.add(line);
        n++;
    }
    //Collections.sort(s);  

    Iterator<String> i = s.iterator();
    while (i.hasNext()) {
        w.println(i.next());
    }
  }

提前感谢您的任何意见!

【问题讨论】:

  • 你可以用循环来实现排序的逻辑,但你为什么不去比较器呢?
  • 如果你愿意,你可以使用匿名类..
  • @JigarJoshi 我正在寻找最有效的方法。并且更喜欢使用一个类。有没有可能的有效解决方案?
  • 添加另一个类不会影响效率,Collections.sort() 工作于n log(n)
  • 第一部分获取您的文件,并为每一行生成其长度,后跟空格,然后是行。第二部分在第 1 列(即长度)上按数字排序。最后一部分通过用虚无替换数字序列和空间来消除长度列。这都是非常基本的 shell 东西;如果你不熟悉,那也没关系。但恕我直言,非常值得学习。

标签: java string sorting comparator


【解决方案1】:

我认为实现Comparator 接口没有任何问题。 如果您唯一关心的是在函数中执行所有操作,则可以使用匿名实现。类似于:

    Collections.sort(s, new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return o1.length() - o2.length();
        }
    });  

(将替换您当前的行 //Collections.sort(s);

PS : 你永远不会使用n 的值。

PPS:根据return 语句中所需的顺序,您可能需要颠倒 o1 和 o2。

implementing an interface with an anonymous class 的另一个例子

【讨论】:

  • 是否可以对其进行编辑以处理相同长度的字符串按自然顺序排序的情况?
  • 感谢您接受我的回答。 “自然秩序”是什么意思?您要哪种顺序?
  • 假设我有 {hello,heelloooo,apple,appppplleee} 输出将是 apple helloheelloooo apppppplleee...所以基本上长度相同的情况下,按字母顺序排列
  • 我明白了。你更愿意拥有什么?相同长度单词的反字母?还是您指的是某种stability
  • 我想,相同长度单词的正常拼音
【解决方案2】:

我假设“类”是指“顶级类”,因此允许使用anonymous class

Collections.sort(s, new Comparator<String>() {
    public int compare(String a, String b) {
        // java 1.7:
        return Integer.compare(a.length(), b.length());
        // java 1.6
        return a.length() - b.length();
    }
});

【讨论】:

  • 感谢您的帮助@Bohemian。你会碰巧知道这个错误是什么意思吗?它来自最后一行代码的“.compare”
  • Integer.compare 在 Java 1.7 中被添加。你用的是 1.6 吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-01
  • 1970-01-01
  • 2015-09-11
  • 2020-03-28
  • 2019-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多