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使用元素的自然順序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
相關推薦
java中Set集合的遍歷及實現類比較分析
java中Set集合是一個不包含重複元素的Collection,首先我們先看看遍歷方法 package com.sort; import java.util.HashSet; import java.util.Iterator; import java.util.Set;
Java中List集合遍歷的三種方式
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;
Java中Set的遍歷
這東西久了沒用就記不起來了,記一下。import java.util.HashSet; import java.util.Iterator; import java.util.Set; /** *
java中Set集合的遍歷方法
基本數據類型 對象 叠代器 比較 for hashset 循環 sta ins S兒童集合的遍歷: 第一種:for增強循環 Set<String> set = new HashSet<String>(); for (String str : set
Java中Set集合 Iterator迭代遍歷陣列
Set集合是可以用迭代的方法遍歷陣列 package com.z.test; import java.util.HashSet; import java.util.Iterator; import j
Map、List、Set在Java中的各種遍歷方法
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
java中map的遍歷
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中使用foreach遍歷list的盲點,
我們通常在專案中會用到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[][
JAVA中Set集合--HashSet的使用
一、使用HashSet新增一個String型別的值: public static void hashSet1(){ HashSet<String> hashSet = new HashS