1. 程式人生 > >Java集合學習筆記(通過比較器對集合元素排序)

Java集合學習筆記(通過比較器對集合元素排序)

/**
 * 1.add方法的引數型別為物件,並且是物件的引用
 * 2.List元素是有序的,元素可以重複,因為該體系有索引
 *   list特有的方法都是和索引相關的操作
 *   List的子類物件有:
 *   ArrayList--陣列結構--JDK1.2開始--查詢速度快--預設為10的長度--50%延長
 *   LinkedList--連結串列結構--插入刪除快、
 *   Vector--陣列結構--JDK1.0開始--執行緒同步,被ArrayList替代了--預設為10的長度--100%延長
 * 3.set元素是無序(存入和取出的順序不一定一致)的,元素不可以重複
 *   HashSet--底層結構為hash表,hashset是通過hashcode和equals來保證元素唯一性
 *   如果元素的hashcode值相同,才會判斷equals是否為true
 *   如果元素的hashcode值不同,才會呼叫equals
 *   注意:對於判斷元素是否存在和刪除操作,依賴的方法是元素的hashcode和equals方法
 *   ArrayList是通過equals來判斷
 *   TreeSet--可以對set集合中的元素進行排序--底層是二叉樹
 *     排序方式一:讓元素自身具有比較性--保證元素唯一性--compareTo方法 return 0
 *     排序方式二:讓集合具有比較性
 * 4.泛型--JDK1.5之後出現泛型--解決安全問題--型別安全機制
 *   好處:將執行時期出現的問題出現在編譯時期
 * @author qiuzhiwen
 *
 */


class Student //implements Comparable
{
private String name;
private int age;

public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
/*@Override
public int compareTo(Object o) {
Student s=(Student) o;
if(this.age>s.age)//主要條件
return 1;
if(this.age==s.age)
return this.name.compareTo(s.name);//次要條件
return -1;
}*/
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}

}


//比較器--常用方法
class MyCompartor implements Comparator<Student>{


@Override
public int compare(Student s1, Student s2) {
int num= s1.getName().compareTo(s2.getName());//按姓名排序--主要條件
if(num==0){
if(s1.getAge()>s2.getAge())//按年齡排序--次要條件
return 1;
if(s1.getAge()==s2.getAge())
return 0;
return -1;
}
return num;
}
}


public class CollectionDemo2 {
public static void main(String[] args) {

//排序方式一:讓元素具有比較性
//TreeSet<Student> ts=new TreeSet<Student>();
//ts.add(new Student("yuhao", 20));
//ts.add(new Student("xiayu", 21));
//ts.add(new Student("kang", 22));
//ts.add(new Student("mon", 22));

//排序方式二:讓集合具有比較性
TreeSet<Student> ts=new TreeSet(new MyCompartor());//
ts.add(new Student("yuhao", 20));
ts.add(new Student("xiayu", 21));
ts.add(new Student("kang", 22));
ts.add(new Student("mon", 22));
ts.add(new Student("mon", 21));

for(Iterator<Student> it=ts.iterator();it.hasNext();){
Student s=it.next();
System.out.println(s.getName()+"--"+s.getAge());
}
}
}