对ArrayList进行排序
由于我刚开始使用JAVA,我很好奇在JAVA中实现排序的最佳选择是什么(对于ArrayLists)。 下面我提供我的PHP代码。
public int cmp($a, $b) { if ( $a[0] $b[0] ) return -1; else if ( $a[1] $b[1] ) return -1; else return 0; } $selected = array(); for ($i=0; $i<$len; $i++) { $rank = getRank(); $cub = getCub_len(); $selected[] = array($rank,$cub); } uasort($selected, 'cmp')
好吧,我在JAVA中编写了以下代码:
ArrayList<ArrayList> selected = new ArrayList<ArrayList>(); ArrayList rank = new ArrayList(); ArrayList cub = new ArrayList(); for (int i=0; i<len; i++) { rank.add(getRank(i)); cub.add(getCub(i)); } selected.add(0,rank); selected.add(1,cub);
如何以正确的方式对selected
进行排序(类似于PHP函数cmp
)?
试试这个例子:
public static void main(String[] args) throws Exception { ArrayList listOfStringArrays = new ArrayList(); listOfStringArrays.add(new String[] {"x","y","z"}); listOfStringArrays.add(new String[] {"a","b","c"}); listOfStringArrays.add(new String[] {"m","n","o"}); Collections.sort(listOfStringArrays,new Comparator() { public int compare(String[] strings, String[] otherStrings) { return strings[1].compareTo(otherStrings[1]); } }); for (String[] sa : listOfStringArrays) { System.out.println(Arrays.toString(sa)); } /* prints out [a, b, c] [m, n, o] [x, y, z] */ }
Collections.sort(a);
来源: 对ArrayList进行排序
试试这个解决方案
public class SortArrayList{ public static void main(String args[]){ List unsortList = new ArrayList (); unsortList.add("CCC"); unsortList.add("111"); unsortList.add("AAA"); unsortList.add("BBB"); unsortList.add("ccc"); unsortList.add("bbb"); unsortList.add("aaa"); unsortList.add("333"); unsortList.add("222"); //before sort System.out.println("ArrayList is unsort"); for(String temp: unsortList){ System.out.println(temp); } //sort the list Collections.sort(unsortList); //after sorted System.out.println("ArrayList is sorted"); for(String temp: unsortList){ System.out.println(temp); } } }
for(int j = 0; j < myArray.size(); j++) { for (int i = j+1 ; i < myArray.size(); i++){ if(myArray.get(i)[2].compareTo(myArray.get(j)[2]) < 0){ String[] temp = myArray.get(j); myArray.set(j, myArray.get(i)); myArray.set(i, temp); } } }
我正在使用第三个字段(myArray.get(j)[2])
进行比较。 我希望这会对某人有所帮助。
在Java Collections中实现排序的最简单方法是使用Collections#排序方法。
它使用修改后的合并排序算法来完成工作。
重要的是,它只能对实现Comparable接口的类的对象进行排序,因此您可能需要考虑这一点。 实现此接口时,您应该知道最好考虑相关对象的自然顺序。 例如,字符串的字母顺序,如果您需要在特定上下文中以不自然的方式对其进行排序,请不要使用此接口。
为此,最好在调用方法时定义Comparator 。
执行此操作的方法是使用Collections类,并在列表上调用Collections.sort(java.util.List, java.util.Comparator)
。 这里记录在案。 这里的比较器是一个接口,您需要实现该接口以进行自定义排序。 要实现Comparator
接口,您需要提供实现
int compare(T o1,T o2)
和boolean equals(Object obj)
。
使用PHP文件中已有的逻辑。