set:元素是無序(存入和取出的順序不一定一致),不可以重複
set集合的功能和Collection一樣
------||HashSet:
是如何保證元素的唯一性的呢?
是通過元素的兩個方法,hashCode和equlas來完成。
如果元素的hashCode值相同,才會判斷equlas是否為true。
如果元素的hashcode值不同,不會判斷equlas方法。
------|| TreeSet:可以對Set集合中的元素進行排序。排序的兩種要素:集合和元素。
TreeSet儲存自訂對象,在排序時,當主要條件相同時,一定要判斷次要條件。
底層資料結構是二叉樹。保證元素唯一性的依據:compareTo方法return 0;
TreeSet排序的第一種方法:讓元素自身具備比較性。元素需要實現Comparable介面,覆蓋compareTo方法。
這正方式成為元素自然排序,或者叫預設排序。
TreeSet的第二種排序方式。
當元素自身不具備比較性,或者具備的比較性,不是所以所需要的。
這是就需讓集合自身具備比較性。在集合初始化時,就有了比較方式。
定義一個類,實現compareable介面,覆蓋compare方法。
兩種方式都存在時,以比較子為主。
| 代碼如下 |
複製代碼 |
package com.day14.wd; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; public class TreeSetDemo { public static void main(String[] ag){ TreeSet ts=new TreeSet(new MyCompare()); ts.add(new Student("lisi", 123)); ts.add(new Student("wangwu", 23)); ts.add(new Student("wef",23)); Iterator it=ts.iterator(); while (it.hasNext()) { Student ss = (Student) it.next(); System.out.println("name"+ss.getName()+",age"+ss.getAge()); } } } class MyCompare implements Comparator{ public int compare(Object o1, Object o2) { // TODO Auto-generated method stub Student p1=(Student)o1; Student p2=(Student)o2; //保證唯一性,返回0; int num=p1.getAge()-p2.getAge(); if(num==0){ return p2.getName().compareTo(p2.getName()); }//String實現了compareTo()方法 return num ; } } class Student { private String name; private int age; public Student(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; } } |