Java – 如何通过这些对象中的String字段最有效地对SomeClass对象数组进行排序?

我有一个类,它有一个名为name的String字段。 我有一个SomeClass[]类型的数组,我想在它们的名称上按字符串顺序迭代这些SomeClass对象。

我很好奇最有效的方法是什么。 我应该使用某种比较器吗? 将它们全部放入TreeMap然后遍历那个或类似的东西是不是一个好主意? 我确信我能想出一个解决方案,但我也确信它不会有效率。

任何帮助表示赞赏。

将您的类放在Arraylist并使用其sort方法。 未validation的代码:

 yourArray.sort(new YourNameComparator()); class YourNameComparator implements Comparator { int compare(YourNameClass y1, YourNameClass y2) { return y1.getName().compareTo(y2.getName()); } } 

你可以只使用Arrays.sort你的Comparable类,比如Arrays.sort(a) (参见代码)

或者,如果您想使用Collections框架

Arrays.asList(...)Collections.sort(..)是关键。


如果SomeClass是这样的

 public class SomeClass implements Comparable{ public String val; @Override public int compareTo(SomeClass that) { return this.val.compareTo(that.val); } @Override public String toString() { return this.val; } } 

你可以这样排序

  SomeClass o = new SomeClass(); o.val = "z"; SomeClass t = new SomeClass(); t.val = "a"; SomeClass th = new SomeClass(); th.val = "m"; SomeClass[] a = new SomeClass[]{o, t, th}; //this Arrays.sort(a); //or this List l = Arrays.asList(a); System.out.println(l); Collections.sort(l); System.out.println(l); 

在我看来,你最好的选择是,如你所说,将它放在一个TreeMap(或一些为你排序的数据结构)中,然后读出它已经排序。 几乎没有办法加快速度,这种方式会产生最干净,最易读的代码。

您有两个选择:让您的类实现可比较并编写compareTo方法或创建比较器并将其提供给Collections.sort(列表列表,比较器c)

由于您要比较字符串,因此您可能希望使用可比较的字符串,因为StringY.compareTo(String x)已经存在。

http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Comparable.html

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html