文中部分數據來源於網絡其他文章,由於未能分辨出真正源頭,遂不在此說明引用地址,如有疑問,可留言,謝謝。
一、java實現排序的方式:
Java中 根據對象的某一個成員變量對集合進行排序,有兩種情況,一種是將要排序的類直接實現接口 java.lang.Comparable,另一種是使用比較器 java.util.Comparator。
要求:有一個集合 List<Person> list, Person.java中有兩個變量 String name 和 int age,請分別依據 name 和 age 對 list 進行升序排序。
我們使用實現接口 java.lang.Comparable 的方法來完成依據 name 的排序,使用比較器 java.util.Comparator 來完成依據 age 的排序。
上代碼:
CompareMethods.java 如下:
public class CompareMethods {
public static void main(String[] args) {
List<Person> list = new ArrayList<Person>();
list.add(new Person("aaa",50));
list.add(new Person("ccc",20));
list.add(new Person("bbb",30));
list.add(new Person("ddd",10));
printList("未排序:",list);
//方法一使用 Collections.sort(list); 進行排序
Collections.sort(list);
printList("comparable排序:",list);
System.out.println("---------------分割線-------------------");
printList("未排序:",list);
//方法一使用 Collections.sort(list,Comparator); 進行排序,第二個參數是下面定義的比較器
Collections.sort(list,new PersonByComparator());
printList("comparator排序:",list);
}
/**
* 用於打印信息
*/
private static void printList(String mark,List<Person> list) {
for(Person p : list) {
System.out.println(mark+"name is:"+p.getName()+" age is:"+p.getAge());
}
}
/**
* 實現比較器的內部類
*/
private static class PersonByComparator implements Comparator<Person> {
@Override
public int compare(Person o1, Person o2) {
return o1.getAge() - o2.getAge();
}
}
}
Person.java 如下:
public class Person implements Comparable<Person>{
private String name;
private int age;
public Person(String name,int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
@Override
public int compareTo(Person o) {
// TODO Auto-generated method stub
return name.compareTo(o.getName());
}
}
最終打印結果如下:
未排序:name is:aaa age is:50
未排序:name is:ccc age is:20
未排序:name is:bbb age is:30
未排序:name is:ddd age is:10
comparable排序:name is:aaa age is:50
comparable排序:name is:bbb age is:30
comparable排序:name is:ccc age is:20
comparable排序:name is:ddd age is:10
---------------分割線-------------------
未排序:name is:aaa age is:50
未排序:name is:bbb age is:30
未排序:name is:ccc age is:20
未排序:name is:ddd age is:10
comparator排序:name is:ddd age is:10
comparator排序:name is:ccc age is:20
comparator排序:name is:bbb age is:30
comparator排序:name is:aaa age is:50
二、js實現排序的方式:
js中實現數組的排序和上文中的java第二種排序方式(使用比較器排序)相仿,本文只對數組進行排序,對象的排序筆者還沒有研究過,如有好的辦法,請留言,謝謝。
要求 找出指定數組 arr 中,最接近20的數字,並按照離20的差距從小到大進行排序。
上代碼:
var arr = [1, 52, 23, 30, 26, 38, 59, 44, 15, 10];
var this_arr = 20;
arr.sort(function(a, b) {
//Math.abs方法是取絕對值
return Math.abs(a - this_arr) - Math.abs(b - this_arr);
})
console.log(arr[0]);
代碼中的 function(a,b) 就類似 java 中的比較器 java.util.Comparator