1. 程式人生 > >java-Iterator(迭代器)遍歷集合

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學習】JavaIterator的兩種用法

迭代器的三個方法 2. 使用hasNext()檢查序列中是否還有元素,有則返回true。 3.使用remove()將迭代器新返回的元素刪除。 兩種迴圈方法: //使用for迴圈迭代 for (Iterator iter = l.iterator(); iter.h

關於的在集合中發生的併發修改異常(java.util.ConcurrentModificationException

原因:迭代器是依賴於集合的,相當於集合的一個副本. 當迭代器操作的時候,如果發現和集合不一樣,則丟擲異常(併發修改異常) Exception in thread "main" java.util.ConcurrentModificationException:併發修改異常解