java排序和js排序

文中部分數據來源於網絡其他文章,由於未能分辨出真正源頭,遂不在此說明引用地址,如有疑問,可留言,謝謝。

一、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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章