java-Iterator(迭代器)遍歷集合
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
/**
* 集合框架:Iterator
*Iterator(迭代器)用於遍歷集合元素,獲取迭代器可以使用Collection定義的方法:-Iterator iterator()
*迭代器Iterator是一個介面,集合在重寫Collection的iterator()方法時利用內部類提供了迭代器的實現
*Iterator提供了統一的遍歷集合元素的方式,其提供了用於遍歷集合的方法(一般結合while()使用):
*boolean hasNext():判斷集合是否還有元素可以遍歷
*E next():返回迭代的下一個元素
*Object next():返回迭代器剛越過的元素的引用,返回值是Object,需要強制轉換成自己需要的型別
* void remove():刪除迭代器剛越過的元素
*
* Iterator有一個很大的優點,就是我們不必知道集合的內部結果,集合的內部結構、狀態由Iterator來維持,
* 通過統一的方法hasNext()、next()來判斷、獲取下一個元素,
*/
public class IteratorDemo {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add("大哥");
c.add("二哥");
c.add("三哥");
Iterator ite=c.iterator();
while(ite.hasNext()) {
Object obj=ite.next();
System.out.println(obj);
}
System.out.println(c);
/**
* remove方法
* 在使用迭代器遍歷集合時,不能通過集合的remove方法刪除集合元素,否則會丟擲併發更改異常
* 我們可以通過迭代器自身提供的remove()方法來刪除通過next()迭代出的元素
* 迭代器的刪除方法是在原集合中刪除元素
* 這裡需要注意:在呼叫remove方法前必須通過迭代器的next()方法迭代過元素
* 那麼刪除的就是這個元素。並且不能再次呼叫remove方法,除非再次呼叫next()後方可再次呼叫
*/
Iterator ite2=c.iterator();//必須寫
while(ite2.hasNext()) {
Object obj=ite2.next();
if("三哥".equals(obj)) {
ite2.remove();
}
System.out.println(obj);
}
System.out.println(c);
/**
* 增強型for迴圈
* 只作用於遍歷集合或陣列
* 語法:
* for(元素型別 e:集合或陣列) {
* 迴圈體
* }
* 新迴圈並非新的語法,而是在編譯過程中,編譯器會將新迴圈轉換為迭代器模式,所以新迴圈本質是迭代器
*
*/
for(Object obj:c) {
System.out.println(obj);
}
/**
* 泛型
* 泛型本質是引數化型別
* <String>泛型<約束型別>
* <String>約束了c1集合中只能儲存String型別的資料,否則編譯出錯
*/
Collection<String> c1=new ArrayList<String>();
c1.add("a");
// c1.add(5);//編譯錯誤
/**
* List介面是Collection的子介面,用於定義線性表資料結構。
* 可以將List理解為存放物件的陣列,只不過其元素個數可以動態的增加或減少
* List是有序可重複的
*
* List介面的兩個常見實現類為ArrayList和LinkedList,分別用動態陣列和連結串列的方式實現了List介面
*
* 可以認為ArrayList和LinkedList的方法在邏輯上完全一樣,
* 只是在效能上有一定的差別,ArrayList更適合於隨機訪問
* 而LinkedList更適合於插入和刪除。
*
* E get(int index)獲取集合中指定下標對應的元素,下標從0開始
* E set(int index,E elment)將給定的元素存入給定位置,並將原位置的元素返回
*/
List<String> list=new ArrayList<String>();
list.add("a");
list.add("b");
list.add("a");
String str=list.get(0);
String str1=list.set(1, "PP");
System.out.println(str+"------"+str1);
System.out.println(list);
/**
* 遍歷:儘量使用Iterator\foreach
* ArrayList也可以利用get方法遍歷
*/
for(int i=0;i<list.size();i++) {
String val=list.get(i);
System.out.println(val);
}
/**
* void add(int index,E element):將給定的元素插入到指定位置,原位置及後續元素順序向後移動
* E remove(int index):刪除給定位置上的元素,將元素返回
*/
list.add(0, "K");//插入
System.out.println(list);
System.out.println(list.remove(0));//刪除
/**
* List的subList方法用於獲取子List
* subList獲取的List與原List佔有相同的儲存空間,對子List的操作會影響原List
* List<E> subList(int fromIndex,int toIndex)
* fromIndex和toIndex是擷取子List的首尾下標(前包括,後不包括)
*/
List<Integer> list1=new ArrayList<Integer>();
for(int i=0;i<10;i++) {
list1.add(i);
}
System.out.println(list1);
List<Integer> subList=list1.subList(0, 4);//獲取子列表
System.out.println(subList);
subList.remove(0);//子List和原List佔有相同空間
System.out.println(subList);
System.out.println(list1);
/**
* List轉換為陣列
* List的toArray方法用於將集合轉換為陣列,但實際上該方法是在Collection中定義的,所以所有的集合都具備這個功能
* 其有兩個方法:
* Object[] toArray()
* <T>T[] toArray(T[] a):比較常用的,傳入一個指定型別的陣列,該陣列的元素型別應與集合的元素型別一致。返回值則是轉換後的陣列,該陣列會儲存集合中所有的元素
*
*/
Collection<String> list2=new ArrayList<String>();
list2.add("kk");
list2.add("gg");
list2.add("jj");
list2.add("jj");
list2.add("yy");
String[] str2=new String[7];
//將陣列str2的每個元素填充(fill)為A
Arrays.fill(str2,"A");
//toString將陣列中全部元素連線為字串
System.out.println(Arrays.toString(str2));//[A, A, A, A, A, A, A]
//呼叫toArray複製集合到陣列,如果str2的長度等於或小於原集合元素數量,則返回新陣列的引用
String[] out=list2.toArray(str2);
System.out.println(Arrays.toString(out));//[kk, gg, jj, jj, yy, null, A]
/**
* Arrays類中提供了一個靜態方法asList,使用該方法我們可以將一個數組轉換為對應的List集合
*
*/
String[] arr={"tom","row","apple"};
List<String> list3=Arrays.asList(arr);
System.out.println(list3);
arr[0]="haohao";//修改陣列內容,影響List
System.out.println(list3);
list3.set(0, "sanxing");//修改List,影響陣列
System.out.println(Arrays.toString(arr));
// list3.add(0, "haha");//集合長度不能修改
}
}
相關推薦
java-Iterator(迭代器)遍歷集合
import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List;
使用Iterator迭代器遍歷集合資料
迭代器(Iterator) 迭代器是一種設計模式,它是一個物件,它可以遍歷並選擇序列中的物件,而開發人員不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”物件,因為建立它的代價小。 Java中的Iterator功能比較簡單,並且只能單向移動: (1) 使
迭代器遍歷集合
package cn.kgc.iterator; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * * @author vip宅男 * */ pu
php中的iterator迭代器(遍歷)
遍歷主要用於遍歷元素的操作,如對陣列中的每一個元素都要操作,這個情況下我們就可以使用迭代器 interface Demo//這裡描述了提供給開發者的介面 {public function fn1();public function fn2();public functio
在使用迭代器遍歷集合時,為何不能使用集合的remove方法?
一、發現問題 在看到資料結構與演算法分析第三章時,看到這樣一段程式碼 public static void removeEvens(List<Integer> list) { for (Integer x : list) {
集合Set迭代器遍歷和陣列遍歷
import java.util.Date; import java.util.HashSet; import java.util.Iterator; import java.util.Set; public class IteratorAndArra
Java學習筆記36:迭代器遍歷(for 、while)
while迴圈遍歷 Collection coll = new ArrayList(); coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); coll.add("abc4"); Iterator it = coll.iterator
List和Map集合的使用及使用迭代器遍歷資料
List集合 java.util.collection常見的子介面:Set,List List介面的兩個實現類:ArrayList,LinkedList 示例: package com.yu
集合迭代器遍歷
第一種:for迴圈遍歷 第二種:foreach遍歷 第三種:迭代器遍歷 Collection<Integer> coll=new ArrayList<>(); coll.add(1); coll.add(2); coll.add(3)
集合中,使用迭代器遍歷的方法
目錄 1.使用迭代器遍歷List集合 package com.jredu.oopch07; import java.util.ArrayList; import java.util.Iterator; import java.util.List
叠代器--遍歷集合的專用工具
toa family 叠代器 util lec gpo 返回 邏輯 arr 【不使用叠代器遍歷集合】 1 package com.hxl; 2 3 import java.util.ArrayList; 4 import java.util.Arrays; 5
Java Iterator(迭代器)的一般用法
一、迭代器(Iterator) 迭代器是一種設計模式,它是一個物件,它可以遍歷並選擇序列中的物件,而開發人員不需要了解該序列的底層結構。迭代器通常被稱為“輕量級”物件,因為建立它的代價小。 Java中的Iterator功能比較簡單,並且只能單向移動: (1) 使用方法iter
利用迭代器遍歷
#include <iostream> #include <vector> using namespace std; struct Student { int sno;
HashSet建立及用迭代器遍歷
輸入三個字串,並看裡邊是否含有“Kobe”。 import java.util.Scanner; import java.util.HashSet; import java.util.Iterator
java-Iterator迭代器和增強for
一.Iterator迭代器概述 Collection集合元素的通用獲取方式:在取元素之前先要判斷集合中有沒有元素,如果有,就把這個元素取出來,繼續在判斷,如果還有就再取出出來。一直把集合中的所有元素全部取出。這種取出方式專業術語稱為迭代。 Iterator介面的常用方法如下: hasNext()方法:用
java iterator(迭代器)
任何容器類,都必須有某種方式可以插入元素並將它們再次取出,畢竟持有事物是容器最基本的工作,對於List,add()插入fang,get()取出,如果從更高層的角度思考,會發現這裡有個確定:要用容器,必須對容器的確切型別程式設計,這樣如果原本是List編碼的,但是後來要應
C++ 中使用for迴圈和迭代器遍歷容器
之前一直看的是第四版的《C++ Primer》,裡面貌似只介紹了用迭代器遍歷容器(可能是受當時版本所限),這裡記錄下如何用for迴圈來遍歷容器(也可遍歷普通陣列) class Solution{ // C++ 中預設的成員函式型別是private,
《opencv入門教程》(迭代器遍歷)
#include<iostream> #include<opencv2/opencv.hpp> using namespace std; using namespace cv; int main(){ Mat grayim(600,800,CV
【JAVA學習】Java中迭代器Iterator遍歷的兩種用法
迭代器的三個方法 2. 使用hasNext()檢查序列中是否還有元素,有則返回true。 3.使用remove()將迭代器新返回的元素刪除。 兩種迴圈方法: //使用for迴圈迭代 for (Iterator iter = l.iterator(); iter.h
關於迭代器的在集合遍歷中發生的併發修改異常(java.util.ConcurrentModificationException
原因:迭代器是依賴於集合的,相當於集合的一個副本. 當迭代器操作的時候,如果發現和集合不一樣,則丟擲異常(併發修改異常) Exception in thread "main" java.util.ConcurrentModificationException:併發修改異常解