集合中Collection方法詳解
阿新 • • 發佈:2019-01-27
有一個Cell類,程式碼如下:
public class Cell implements Comparable<Cell>{ public int x; public int y; public Cell(int x,int y){ this.x = x; this.y = y; } @Override public String toString() { return "(" + x + "," + y + ")"; } @Override public boolean equals(Object obj) { if(obj == null){ return false; } if(obj == this){ return true; } if(obj instanceof Cell){ Cell c = (Cell)obj; return this.x ==c.x && this.y == c.y; } return true; } /** * 比較大小的方法 * 返回值不關注具體的值,只關注取值範圍 * 返回值<0 : 當前物件比給定物件小 * 返回值=0 : 兩個物件相等 * 返回值>0 : 當前物件比給定物件大 */ @Override public int compareTo(Cell o) { /** * 比較規則:y值大的就大 */ return this.y - o.y; } }
有一個集合類,程式碼如下:
新的比較器實現類程式碼如下:public class SortCollection3 { public static void main(String[] args) { List<Cell> list = new ArrayList<Cell>(); list.add(new Cell(4,5)); list.add(new Cell(1,7)); list.add(new Cell(1,2)); list.add(new Cell(3,3)); System.out.println(list); //如要以y的小和進行排序(若元素所在類中沒有實現Compareable介面,則要先在元素所在類中實現 Compareable介面,並重寫compareTo方法,自定義比較規則,見上面的Cell類) Collections.sort(list); System.out.println(list); //如要以x+y的和進行排序 則需要新建比較器(因為元素中已經實現了Comparable類,並重寫了compareTo方法,就必須定義一個新的比較器的實現類) Comparator<Cell> cc =new MyComparator(); Collections.sort(list,cc); System.out.println(list); } }
class MyComparator implements Comparator<Cell>{
//重新定義新的規則
@Override
public int compare(Cell o1, Cell o2) {
return (o1.x + o1.y) - (o2.x + o2.y);
}
測試結果如下:[(4,5), (1,7), (1,2), (3,3)]
[(1,2), (3,3), (4,5), (1,7)]
[(1,2), (3,3), (1,7), (4,5)]
以上比較如果只使用一次的話,也可以通過匿名內部類來實現
程式碼如下:
public class TestBook3 {
public static void main(String[] args) {
List<Cell> list = new ArrayList<Cell>();
list.add(new Cell(2,3));
list.add(new Cell(5,1));
list.add(new Cell(3,2));
System.out.println(list);
Collections.sort(list,new Comparator<Cell>(){//匿名內部類
@Override
public int compare(Cell o1, Cell o2) {//按照y值的升序排列
return o1.y - o2.y;
}
});
System.out.println(list);
}
}
測試結果如下:
[(2,3), (5,1), (3,2)]
[(5,1), (3,2), (2,3)]