1、增強型for循環
語法:for(數據類型 變量:集合/數組){
}
缺點:會存在併發問題
import java.util.ArrayList;
import java.util.Collection;
public class ForDemo {
public static void main(String[] args) {
Collection<String> sc = new ArrayList<String>();
sc.add("haha");
sc.add("xixi");
sc.add("hehe");
sc.add("eueu");
//增強型for循環
/**
* 增強非for循環有併發問題存在(缺點)
* 簡單,推薦使用(有點)
* for(數據類型 變量:集合)
*/
for(String c:sc){
System.out.println(c);
}
}
}
2、set集合
一個不包含重複元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素對 e1 和 e2,並且最多包含一個 null 元素。
Set裏面的方法絕大多數都是繼承於Collection,所以set基本學完。
Set的特點:
元素不可重複
元素無序的(跟添加的順序無關)
3、HashSet
此類實現 Set 接口,由哈希表(實際上是一個 HashMap實例)支持。它不保證 set 的迭代順序;特別是它不保證該順序恆久不變。此類允許使用null 元素。
HashSet的唯一性:
在HashSet做添加的時候會逐個來判斷當前集合中的對象和要添加的對象的比較
通過以下的條件判斷兩個對象是否相等
* e.hash == hash && ((k = e.key) == key || key.equals(k))
* hash值必須相等並且兩個對象的地址值相等或者equals返回true
特點:
1.元素唯一性
2.無序行
3.允許null存在一個
4.不是線程安全(效率高)
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class SetDemo1 {
public static void main(String[] args) {
//創建一個set集合
/**
* set的特點:
* 1、無序性
* 2、元素不可重複
* 3、允許有null,但是隻能有1個
*
*/
Set<String> set = new HashSet<String>();
set.add("劉備");
set.add("關羽");
set.add("張飛");
set.add("劉備");
set.add(null);
System.out.println(set);
Iterator<String> it = set.iterator();
while(it.hasNext()){
String sc = it.next();
if("張飛".equals(sc)){
set.add("趙雲");
}
System.out.println(sc);
}
//System.out.println(set);
}
}
4、小結
①增強型for循環用於集合和數組的遍歷時特別方便,但需要注意會出現併發問題;
②set在添加元素的時候會拿這個元素和集合中的每一個元素做比較,如果重複了就不添加,如果不重複就添加;
③判斷兩個對象是否相等,必須重寫equals方法和hashCode方法,這兩個方法都符合相等的條件才認爲是相等的兩個對象。