java: Set類及子類:TreeSet有序子類,HashSet無序子類:重復元素


Set類及子類:

TreeSet有序子類;

HashSet無序(散列)子類

HashSet子類的內容是沒有順序的,單個元素也不會重復的(對象除外)。

Set<String> allSet = new HashSet<String>();
		allSet.add("a");
		//重復數據
		allSet.add("b");
		allSet.add("b");
		allSet.add("c");
		allSet.add("d");
		//重復數據
		allSet.add("e");
		allSet.add("e");
		allSet.add("f");
		System.out.println(allSet);

  

TreeSet有序:

TreeSet子類實現了SortSet子類(排序)接口,TreeSet接口是可以排序的。

向TreeSet類中添加自定義對象時,該自定義對象需要復寫Comparable接口中的CompareTo排序方法,否則會報:類轉換異常

java.lang.ClassCastException

可能需要在復寫toString()方法,否則打印的時候報錯:

[org.conllection.Person@139a55, org.conllection.Person@1db9742, org.conllection.Person@106d69c]

例如:

添加數據時,有一個自定義類:Person類,2個元素,Name(名字),age(年齡),如果用年齡排序,重復年齡會被剔除掉

person:

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 void setName(String name) {
		this.name = name;
	}
	
	public int getAge() {
		return age;
	}
	
	public void setAge(int age) {
		this.age = age;
	}
		
	
	
	@Override
	public String toString() {
		return "姓名:" + name + ", 年齡:" + age + "";
	}

	public int compareTo(Person o) {
		// TODO 自動生成的方法存根
		if(this.age > o.age)
		{
			return 1;
		}else if(this.age < o.age)
		{
			return -1;
		}else{
			return 0;
		}
	}
	
	
}

  

setdemo2:

Set<Person> allSet = new TreeSet<Person>();
		
		allSet.add(new Person("張三",30));
		allSet.add(new Person("李四",30));
		allSet.add(new Person("王五",31));
		allSet.add(new Person("趙六",31));
		allSet.add(new Person("田七",32));
		
		System.out.println(allSet);

  

結果如下:

[姓名:張三, 年齡:30, 姓名:王五, 年齡:31, 姓名:田七, 年齡:32]

  

 

所以,應該在Comparable的CompareTo方法里面在判斷name是否重復。

修改后:

public int compareTo(Person o) {
		// TODO 自動生成的方法存根
		if(this.age > o.age)
		{
			return 1;
		}else if(this.age < o.age)
		{
			return -1;
		}else{
			//如果age年齡相同需要在判斷name,是否重復
			return this.name.compareTo( o.name );
		}
	}

  

 

結果如下:

[姓名:張三, 年齡:30, 姓名:李四, 年齡:30, 姓名:王五, 年齡:31, 姓名:趙六, 年齡:31, 姓名:田七, 年齡:32]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM