1、Iterator接口
Iterator是Java集合框架的成員,主要用於遍歷(即迭代訪問)Collection集合中的元素,也稱爲迭代器。
提供的三種方法:
boolean hasNext():返回集合裏的下一個元素。
Object next():返回集合裏下一個元素。
void remove();刪除集合裏上一次next方法返回的元素。
簡單實例:
[java] view plain copy
public class test1
{
public static void main(String[] args)
{
Collection books = new HashSet();
books.add("book1");
books.add("book2");
books.add("book3");
//獲取books集合對應的迭代器
Iterator it = books.iterator();
while(it.hasNext())
{
String book = (String)it.next();
System.out.println("bookName:"+book); //遍歷輸出book1 book2 book3
if (book.equals("book1"))
{
it.remove();
//使用Iterator迭代過程中,不可直接操作/修改集合元素,只能使用迭代器操作元素 下面代碼引發異常
//books.remove(book);
}
//對book變量賦值,不會改變集合元素本身
book = "測試";
}
System.out.println(books); //輸出[book2,book3] 因爲book1被刪除
}
}
優缺點分析: 優點:迭代器提供了操作元素的方法 可以在遍歷中相應地操作元素
缺點:運行復雜,性能稍差,效率相對其他兩種遍歷方式較低
2、使用foreach循環(加強for循環)
簡單實例:
[java] view plain copy
public class test1 {
public static void main(String[] args) {
// 創建List並添加元素
List<string> list = new ArrayList<string>();
list.add("1");
list.add("3");
list.add("4");
// 利用foreach語句輸出集合元素
for (String x : list) {
System.out.println("foreach:"+x);
}
}
}
優缺點分析:
優點:代碼簡潔,不易出錯。
缺點:只能做簡單的遍歷,不能在遍歷過程中操作(刪除、替換)數據集合。
3、原始for循環遍歷
簡單實例:
[java] view plain copy
public class test1 {
public static void main(String[] args) {
// 創建List並添加元素
List<string> list = new ArrayList<string>();
list.add("1");
list.add("3");
list.add("4");
// 利用for循環語句輸出集合元素
for (int i=0;i<list.size();i++) {="" system.out.println("for:"+list.get(i));="" }="" }<="" pre=""></list.size();i++)></string></string>
優缺點分析:
優點:效率最高,遍歷快,可以根據自定計數器操作元素
缺點:不適用所有集合,適用範圍小
各種遍歷方式適用場合:
1、傳統的for循環遍歷,基於計數器的:
順序存儲:讀取性能比較高。適用於遍歷順序存儲集合。
鏈式存儲:時間複雜度太大,不適用於遍歷鏈式存儲的集合。
2、迭代器遍歷,Iterator:
順序存儲:如果不是太在意時間,推薦選擇此方式,畢竟代碼更加簡潔,也防止了Off-By-One的問題。
鏈式存儲:意義就重大了,平均時間複雜度降爲O(n),還是挺誘人的,所以推薦此種遍歷方式。
3、foreach循環遍歷:
foreach只是讓代碼更加簡潔了,但是他有一些缺點,就是遍歷過程中不能操作數據集合(刪除等),所以有些場合不使用。而且它本身就是基於Iterator實現的,但是由於類型轉換的問題,所以會比直接使用Iterator慢一點,但是還好,時間複雜度都是一樣的。所以怎麼選擇,參考上面兩種方式,做一個折中的選擇。