日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java 集合迭代器_Java中的集合迭代器

發布時間:2024/9/27 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 集合迭代器_Java中的集合迭代器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

集合的迭代器

任何集合都有迭代器。

任何集合類,都必須能以某種方式存取元素,否則這個集合容器就沒有任何意義。

迭代器,也是一種模式(也叫迭代器模式)。在java中它是一個對象,其目的是遍歷并選中其中的每個元素,而使用者(客戶端)無需知道里面的具體細節。迭代器要足夠的“輕量”——創建迭代器的代價小。所以看迭代器的源代碼就會發現,里面會有很多要求:

iterator方法返回一個Iterator,Iterator返回序列的頭元素。

next方法獲取下一個元素

hasNext檢查還有元素

remove刪除迭代器新返回的元素

下面是迭代器的基本使用

public class UsingIterator {

public static void main(String[] args) {

List names = Arrays.asList("marson", "shine", "summer", "zhu");

Iterator it = names.iterator();

while(it.hasNext()){

String s = it.next();

print(s);

}

for (String s : names){

print(s);

}

System.out.println();

it = names.iterator();

for (int i = 0; i < 4; i++) {

it.next();

}

print(names);

}

}

ListIterator

ListIterator是一個更強大的Iterator子類型,能用于各種List類訪問,前面說過Iterator支持單向取數據,ListIterator可以雙向移動,所以能指出迭代器當前位置的前一個和后一個索引,可以用set方法替換它訪問過的最后一個元素。我們可以通過調用listIterator方法產生一個指向List開始處的ListIterator,并且還可以用過重載方法listIterator(n)來創建一個指定列表索引為n的元素的ListIterator。

public class ListIteration {

public static void main(String[] args) {

var names = Arrays.asList("marson", "shine", "summer", "zhu");

var it = names.listIterator();

while (it.hasNext()) {

print(it.next() + ", " + it.nextIndex() + ", " + it.previousIndex() + "; ");

}

while (it.hasPrevious()) {

print(it.previous() + " ");

}

print(names);

it = names.listIterator(3);

while (it.hasNext()) {

it.next();

it.set("alias");

}

print(names);

}

}

輸出結果為:

marson, 1, 0; shine, 2, 1; summer, 3, 2; zhu, 4, 3; zhu summer shine marson [marson, shine, summer, zhu] [marson, shine, summer, alias]

Iterator模式

前面說了,迭代器又叫迭代器模式,顧名思義,只要符合這種模式都能叫迭代器模式,自然也能像前面一樣使用迭代器

那么Iterator模式具體是個什么樣子的模式呢?

我們通過Collection的源碼發現其中的樣子(為什么要看Collection而不是其他的List?因為Collection是所有容器的基類啊)

通過Collection代碼我們發現它繼承了一個叫Iterable接口,注解說的很清楚——實現這個接口就說明這個對象是可迭代的;并且其成員函數也很清晰,只有三個方法

public interface Iterable {

Iterator iterator();

default void forEach(Consumer super T> action);//省略部分代碼

default Spliterator spliterator();//省略部分代碼

public interface Iterator {

boolean hasNext();

E next();

default void remove() {

throw new UnsupportedOperationException("remove");

}

...

Iterator這個泛型接口才是我們真正實現迭代的核心,通過這些信息我們嘗試來寫一個迭代器

public class CustomIterator implements Iterable {

protected String[] names = ("marson shine summer zhu").split(" ");

public Iterator iterator() {

return new Iterator() {

private int index = 0;

@Override

public boolean hasNext() {

return index < names.length;

}

@Override

public String next() {

return names[index++];

}

public void remove() {

}

};

}

public static void main(String[] agrs) {

for (var s : new CustomIterator()) {

print(s + " ");

}

}

}

到這里,自定義的迭代器就寫完了,實際上我們只需要繼承一個Iterable接口然后實現這個接口就行了,更深入的話,其實還可以自己寫一個listIterator實現雙向的操作數據

來源:oschina

鏈接:https://my.oschina.net/u/4353634/blog/4002987

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java 集合迭代器_Java中的集合迭代器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。