1. 程式人生 > >JAVA高階基礎(10)---TreeSet對自定義型別進行定製排序及增強for迴圈遍歷集合

JAVA高階基礎(10)---TreeSet對自定義型別進行定製排序及增強for迴圈遍歷集合

TreeSet

自然排序

對於自定義型別,那麼要實現自然排序,需要去 Comparable 介面中的 compareTo 方法。在 compare To 方法中我們可以根據自己的業務要求,來實現自己的排序規則。

定製排序    

在建立容器的時候,給TreeSet建立一個比較器。

建立比較器的方式:三種

  1. 通過自定義的外部類來實現比較器。
  2. 通過在容器的定義類中,來通過內部類來實現一個比較器
  3. 在建立容器的時候,在建立的過程中,通過匿名內部類來建立一個比較器

三種方式相比較而言,3 更好一些(程式的可讀性和維護性)。

package org.lanqiao.setDemo;

public class Student {
	private String name;
	private Integer age;
	public Student() {
	}
	public Student(String name, Integer age) {
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getAge() {
		return age;
	}
	public void setAge(Integer age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	
}
package org.lanqiao.setDemo;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

public class SetDemo {
	public static void main(String[] args) {
		Set set = new TreeSet(new Comparator() {

			@Override
			public int compare(Object o1, Object o2) {
				Student stu = (Student)o1;
				Student stus = (Student)o2;
				int res = stu.getAge().compareTo(stus.getAge());
				if(res == 0 ) {
					
					res = stu.getName().compareTo(stus.getName());
				}
				return res;
			}
		});
		Student stu1 = new Student("張三",21);
		Student stu2 = new Student("李四",18);
		Student stu3 = new Student("王五",22);
		Student stu4 = new Student("趙六",18);
		set.add(stu1);
		set.add(stu2);
		set.add(stu3);
		set.add(stu4);
//		使用迭代器對集合進行遍歷
		Iterator iter = set.iterator();
		while(iter.hasNext()) {
			System.out.println(iter.next());
			
		}
		System.out.println("-------------------");
//	使用增強for迴圈來進行集合的遍歷 jdk1.5 新特性
	/*	for(遍歷的集合中的每一個元素的型別  變數(識別符號):遍歷的物件(集合)) {
			
			
		}
		*/
		for(Object obj :set) {//Object obj = Student
			Student stu = (Student)obj;
			System.out.println(stu.getName());
			
		}
		System.out.println("-------------------");
		List list = new ArrayList();
		list.add(1);
		list.add(2);
		list.add(3);
		for(Object obj : list) {
			System.out.println(obj);
			
		}
		System.out.println("-------------------");
		int[] arr = {2,14,6,8,4,32};
		for(int i :arr) {
			System.out.println(i);
			
		}
	}
}