1. 程式人生 > >java中Set集合的遍歷及實現類比較分析

java中Set集合的遍歷及實現類比較分析

java中Set集合是一個不包含重複元素的Collection,首先我們先看看遍歷方法

package com.sort;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

/**
 * 一個不包含重複元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2,
 * @author Owner
 *
 */
public class SetTest2 {

	public static void main(String[] args) {
		Set<String> set = new HashSet<String>();
		
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		set.add("e");
		
		set.add("e");//不能放入重複資料
		
		/**
		 * 遍歷方法一,迭代遍歷
		 */
		for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
			System.out.print(iterator.next()+" ");
		}
		
		System.out.println();
		System.out.println("********************");
		
		/**
		 * for增強迴圈遍歷
		 */
		for(String value : set){
			System.out.print(value+" ");
		}
	}
}

注意:這裡Set集合中放入的是String型別,假如我們放入一個自己定義的類例項的時候,比如Person類例項,這時候我們要自己重新hashcode和equal方法,用自己的關鍵欄位來重寫,因為當使用HashSet時,hashCode()方法就會得到呼叫,判斷已經儲存在集合中的物件的hash code值是否與增加的物件的hash code值一致;如果不一致,直接加進去;如果一致,再進行equals方法的比較,equals方法如果返回true,表示物件已經加進去了,就不會再增加新的物件,否則加進去。

下面分析一下Set集合的另外一個重要實現類TreeSet,

TreeSet使用元素的自然順序

對元素進行排序,或者根據建立 set 時提供的 Comparator 進行排序,具體取決於使用的構造方法。 

通俗一點講,就是可以按照排序後的列表顯示,也可以按照指定的規則排序

Set<String> set = new TreeSet<String>();
		
		set.add("f");
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		set.add("e");
		
		System.out.println(set);

輸出:[a, b, c, d, e, f]

按照排序後輸出

那麼如果我們想讓他倒序輸出呢?當然方法很多。這裡我採用指定一個規則讓他倒序輸出

package com.sort;

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

public class TreeSetTest3 {

	public static void main(String[] args) {
		Set<String> set = new TreeSet<String>(new MyComparator());
		
		set.add("a");
		set.add("b");
		set.add("c");
		set.add("d");
		set.add("e");
		set.add("A");
		
		for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
			System.out.print(iterator.next()+" ");
		}
	}
}

class MyComparator implements Comparator<String>{

	@Override
	public int compare(String o1, String o2) {
		
		return o2.compareTo(o1);//降序排列
	}
	
}

輸出:e d c b a A 

如果Set集合中放入的是我們自己定義的一個類型別呢?

注意:一定要定義一個排序規則類實現Comparator介面,與上面的方法類似

package com.sort;

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

public class TreeSetTest2 {

	public static void main(String[] args) {
		Set<Person> set = new TreeSet<Person>(new PersonComparator());
		
		Person p1 =  new Person(10);
		Person p2 =  new Person(20);
		Person p3 =  new Person(30);
		Person p4 =  new Person(40);
		
		set.add(p1);
		set.add(p2);
		set.add(p3);
		set.add(p4);
		
		for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){
			System.out.print(iterator.next().score+" ");
		}
	}
}

class Person{
	int score;
	
	public Person(int score){
		this.score = score;
	}
	
	public String toString(){
		return String.valueOf(this.score);
	}
}

class PersonComparator implements Comparator<Person>{

	@Override
	public int compare(Person o1, Person o2) {
		
		return o1.score - o2.score;
	}
	
}

輸出:10 20 30 40 

如果按照一個人的分數的倒序排列,只需要更改compare方法中的o2.score-o1.score

相關推薦

javaSet集合實現類比分析

java中Set集合是一個不包含重複元素的Collection,首先我們先看看遍歷方法 package com.sort; import java.util.HashSet; import java.util.Iterator; import java.util.Set;

JavaList集合的三種方式

asn tex iter for nbsp next next() ray string 首先創建一個List集合: List<String> list = new ArrayList<String>();list.add("name"); list

Java List的三種方法

Java List遍歷方法 及其效率對比 package com.zbalpha.test; import java.util.ArrayList; import java.util.Iterator; import java.util.List;

JavaSet

這東西久了沒用就記不起來了,記一下。import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** *

javaSet集合方法

基本數據類型 對象 叠代器 比較 for hashset 循環 sta ins S兒童集合的遍歷: 第一種:for增強循環 Set<String> set = new HashSet<String>(); for (String str : set

JavaSet集合 Iterator迭代陣列

Set集合是可以用迭代的方法遍歷陣列 package com.z.test; import java.util.HashSet; import java.util.Iterator; import j

Map、List、SetJava的各種方法

try one out 循環 java light size i++ pre 一、Map的4種遍歷 Map<String, String> map = new HashMap<String, String>(); map.put("姓名", "

Java的HashMap

不能 args java body ati log 使用 col 視圖 import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class TestMap {

Java 實例 - 集合

HA rgs 類型 bsp .com imp value list hset List與Set類型集合的遍歷 1 import java.util.ArrayList; 2 import java.util.HashSet; 3 import java.util.I

java集合刪除指定元素異常分析總結

它的 一次 但是 代碼 元素 拋出異常 源碼 刪除指定元素 test 在使用集合的過程中,我們經常會有遍歷集合元素,刪除指定的元素的需求,而對於這種需求我們往往使用會犯些小錯誤,導致程序拋異常或者與預期結果不對,本人很早之前就遇到過這個坑,當時沒註意總結,結果前段時間又遇到

深入理解Java的底層阻塞原理實現

更多 安全 posix pla static events time() 方便 原理 談到阻塞,相信大家都不會陌生了。阻塞的應用場景真的多得不要不要的,比如 生產-消費模式,限流統計等等。什麽 ArrayBlockingQueue、 LinkedBlockingQueue、

java之Map集合幾種方法

package cn.com.javatest.collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * java之Map集合遍歷幾種方法 * * @author:

Java之List集合的幾種方法

package cn.com.javatest.collection; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * Java之List集合遍歷的幾種方法 * * @au

javamap的

keySet是鍵的集合,Set裡面的型別即key的型別 entrySet是 鍵-值 對的集合,Set裡面的型別是Map.Entry   1.keySet() Map map=new HashMa

java樹的,包括先序、後序以及廣度優先跟深度優先

先總結一下各種遍歷方式的區別 前序遍歷:根結點 ---> 左子樹 ---> 右子樹 中序遍歷:左子樹---> 根結點 ---> 右子樹 後序遍歷:左子樹 ---> 右子樹 ---> 根結點 廣度優先,從左到右 深度

Java集合關係圖常見操作

下面是一張下載的Java中的集合型別的繼承關係圖,便於正確的理解和使用相應的集合型別。 有序否 允許元素重複否 Collection 否 是 List 是 是 Set AbstractSet 否 否 HashSet

java雙列集合

雙列集合遍歷-1-根據鍵獲取值: HashMap<String, String> map = new HashMap<>(); map.put("白起", "WhiteKiller"); map.put("妲己","狐狸"); map.put("露娜", "紫

Java使用foreachlist的盲點,

我們通常在專案中會用到ArrayList ,喜歡使用jdk1.5以後的foreach進行對list集合遍歷,但是以下的操作會遇到小坑請看程式碼:public class TestListUtils {

java的foreach

//foreach 遍歷一維陣列 String[] names = {"beijing","shanghai"}; for (String name : names){System.out.println(name); }//foreach 遍歷二維陣列 String[][

JAVASet集合--HashSet的使用

一、使用HashSet新增一個String型別的值: public static void hashSet1(){ HashSet<String> hashSet = new HashS