Java類集之Set接口

(一)Set接口的定義java

      Set接口也是Collection接口的子接口,可是與Collection或List接口不一樣的是,Set接口中不能加入重複的元素。this

      Set接口的定義: public interface Set<E> extends Collection<E>編碼

      Set接口的主要方法與Collection是一致的 Set接口的實例沒法像List接口那樣進行雙向輸出。spa

      Set接口的經常使用子類:code

      散列存放:HashSet對象

      有序存放:TreeSet排序

(二)介紹 Set接口的經常使用子類:接口

   2.1 散列的存放:HashSethash

    HashSet是Set接口的一個子類,主要的特色是:裏面不能存放重複元素,並且是採用散列的存儲方式,因此是沒有順序的。 io

        驗證HashSet類

import java.util.HashSet;
import java.util.Set;
public class HashSetDemo01 {
	public static void main(String[] args) {
		Set<String> allSet = new HashSet<String>();
		allSet.add("A") ;				// 增長元素
		allSet.add("B") ;				// 增長元素
		allSet.add("C") ;				// 增長元素
		allSet.add("C") ;				// 重複元素,不能加入
		allSet.add("C") ;				// 重複元素,不能加入
		allSet.add("D") ;				// 增長元素
		allSet.add("E") ;				// 增長元素
		System.out.println(allSet) ;		// 輸出集合對象,調用toString()
	}
}

2.2 有序的存放:TreeSet

        若是想對輸入的數據進行有序排列,則要使用TreeSet子類。

        TreeSet類的定義以下:

        public class TreeSet<E> extends AbstractSet<E>implements SortedSet<E>, Cloneable, Serializable

import java.util.Set;
import java.util.TreeSet;
public class TreeSetDemo01 {
	public static void main(String[] args) {
		Set<String> allSet = new TreeSet<String>();
		allSet.add("C") ;				// 加入元素
		allSet.add("C") ;				// 重複元素,不能加入
		allSet.add("C") ;				// 重複元素,不能加入
		allSet.add("D") ;				// 加入元素
		allSet.add("B") ;				// 加入元素
		allSet.add("A") ;				// 加入元素
		allSet.add("E") ;				// 加入元素
		System.out.println(allSet) ;		// 輸出集合,調用toString()
	}
}

2.2.1 關於TreeSet的排序說明 :

      一個普通的類對象是不能向TreeSet集合中加入的,若是直接加入會出現如下的異常: java.lang.ClassCastException

      若是要想使用TreeSet則對象所在的類必須實現Compable接口

import java.util.Set;
import java.util.TreeSet;
class Person implements Comparable<Person> {	// 定義Person類,實現比較器
	private String name;			// 定義name屬性
	private int age;			// 定義age屬性
	public Person(String name, int age) {	// 經過構造方法爲屬性賦值
		this.name = name;			// 爲name屬性賦值
		this.age = age;			// 爲age屬性賦值
	}
	public String toString() {		// 覆寫toString()方法
		return "姓名:" + this.name + ";年齡:" + this.age;
	}
	public int compareTo(Person per) {		// 覆寫compareTo()方法,指定排序規則
		if (this.age > per.age) {		// 經過年齡排序
			return 1;
		} else if (this.age < per.age) {
			return -1;
		}else{
			return 0 ;
		}
	}
}

2.2.2 關於重複元素的說明

     Set接口中是不容許存放重複元素的 一個類的對象是否重複須要依靠Object類中的如下方法完成:

      hashCode():指定哈希碼

      equals():對象比較

import java.util.HashSet;
import java.util.Set;
class Person {					// 定義Person類
	private String name;					// 定義name屬性
	private int age;					// 定義age屬性
	public Person(String name, int age) {			// 經過構造方法爲屬性賦值
		this.name = name;				// 爲name屬性賦值
		this.age = age;				// 爲age屬性賦值
	}
	public boolean equals(Object obj) {			// 覆寫equals()方法
		if (this == obj) { 				// 地址相等
			return true;				// 是同一個對象
		}
		if (!(obj instanceof Person)) { 			// 傳遞進來的不是本類的對象
			return false;				// 不是同一個對象
		}
		Person p = (Person) obj;				// 進行向下轉型
		if (this.name.equals(p.name) && this.age == p.age) {
			return true ;				// 屬性依次比較
		}else{					// 所有屬性相等,是同一對象
			return false ;			// 屬性不相等,不是同一對象
		}
	}
	public int hashCode(){				// 覆寫hashCode()方法
		return this.name.hashCode() * this.age ;			// 指定編碼公式
	}
	public String toString() {				// 覆寫toString()方法
		return "姓名:" + this.name + ";年齡:" + this.age;
	}
}

2.3 SortedSet接口

       從TreeSet類的定義中能夠發現,TreeSet裏實現了SortedSet接口,此接口主要是用於排序操做的,即:實現此接口的子類都屬於排序的子類。SortedSet接口定義以下: public interface SortedSet<E> extends Set<E>

2.3.1 SortedSet接口中定義的方法

No.

方法

類型

描述

1

public Comparator<? super E> comparator()

普通

返回與排序有關聯的比較器

2

public E first()

普通

返回集合中的第一個元素

3

public SortedSet<E> headSet(E toElement)

普通

返回從開始到指定元素的集合

4

public E last()

普通

返回最後一個元素

5

public SortedSet<E> subSet(E fromElement,E toElement)

普通

返回指定對象間的元素

6

public SortedSet<E> tailSet(E fromElement)

普通

從指定元素到最後

驗證SortedSet接口:

import java.util.SortedSet;
import java.util.TreeSet;
public class TreeSetDemo05 {
	public static void main(String[] args) {
		SortedSet<String> allSet = new TreeSet<String>(); 	// 爲SortedSet實例化
		allSet.add("A");					// 增長元素
		allSet.add("B");					// 增長元素
		allSet.add("C");					// 增長元素
		allSet.add("C"); 					// 重複元素,不能加入
		allSet.add("C");					// 重複元素,不能加入
		allSet.add("D");					// 增長元素
		allSet.add("E");					// 增長元素
		System.out.println("第一個元素:" + allSet.first());
		System.out.println("最後一個元素:" + allSet.last());
		System.out.println("headSet元素:" + allSet.headSet("C"));
		System.out.println("tailSet元素:" + allSet.tailSet("C"));
		System.out.println("subSet元素:" + allSet.subSet("B","D"));
	}
}
相關文章
相關標籤/搜索