4.30Java Iterator迭代器遍历容器元素(List/Set/Map)
生活随笔
收集整理的這篇文章主要介紹了
4.30Java Iterator迭代器遍历容器元素(List/Set/Map)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
4.30Java Iterator迭代器遍歷容器元素(List/Set/Map)
迭代器的作用
迭代器遍歷List
迭代器中遍歷List
可以使用for循環進行遍歷
先獲得一個迭代器對象---在for里面
獲得以后直接通過hashNext方法實現遍歷
iterator遍歷元素的方法
首先來看看iterator的源碼:
public interface Iterator<E> {
//定義了一個hashNext的布爾量
boolean hashNext;
//定義一個next屬性
next;
//定義一個remove方法
default void remove(){
throw new UnsupportedOperationException("remove");
}
}
通過hashNext屬性可以判斷有沒有下一個元素
hashNext和Next組合起來使用,形成判斷的閉環
List繼承了Collection類,該類也實現了Iterator接口。
iterator方法幫助我們獲得一個迭代器對象
Iterator幫助我們定義了迭代器里面應該有的方法
iterator遍歷List:
package collection.iterator;
?
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
?
/**
* 測試迭代器遍歷List、Set、Map
* @author Lucifer
*/
public class TestIterator {
?
/*實現遍歷List的方法---先定義方法內容*/
public static void testIteratorList(){
?
//方法名遵從駝峰規則
/*要遍歷List就要先有List*/
List<String> list = new ArrayList<>();
/*
1.ArrayList是一個類,繼承了AbstractList類
2.AbstractList類繼承了AbstractCollection
3.AbstractList類同是實現了List接口
*/
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
?
/*創建迭代器變量---循環獲得對象(所以for的第一步是創建對象,循環進行判斷(判斷是否有下一個元素---利用iterator里面自帶的屬性)*/
for (Iterator<String> iter = list.iterator(); list.iterator().hasNext();){
//調用hashNext方法不能用iter而是用list.iterator方法
/*用iter.next返回當前對象通過又讓游標往下移動一格*/
String temp = iter.next(); //把當前內容返回然后回到頭進行判斷看有沒有下一個元素
System.out.println(temp);
}
}
}
實現:
package collection.iterator;
?
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
?
/**
* 測試迭代器遍歷List、Set、Map
* @author Lucifer
*/
public class TestIterator {
?
/*實現遍歷List的方法---先定義方法內容*/
public static void testIteratorList(){
?
//方法名遵從駝峰規則
/*要遍歷List就要先有List*/
List<String> list = new ArrayList<>();
/*
1.ArrayList是一個類,繼承了AbstractList類
2.AbstractList類繼承了AbstractCollection
3.AbstractList類同是實現了List接口
*/
list.add("aa");
list.add("bb");
list.add("cc");
list.add("dd");
?
/*創建迭代器變量---循環獲得對象(所以for的第一步是創建對象,循環進行判斷(判斷是否有下一個元素---利用iterator里面自帶的屬性)*/
for (Iterator<String> iter = list.iterator(); list.iterator().hasNext();){
//調用hashNext方法不能用iter而是用list.iterator方法
/*用iter.next返回當前對象通過又讓游標往下移動一格*/
String temp = iter.next(); //把當前內容返回然后回到頭進行判斷看有沒有下一個元素
System.out.println(temp);
}
}
}
迭代器中遍歷Set
實現:
package collection.iterator;
?
import java.util.*;
?
/**
* 測試迭代器iterator遍歷Set
* @author Lucifer
*/
public class TestIteratorSet {
?
/*實現遍歷Set的方法---先定義方法內容*/
public static void testIteratorSet(){
?
//方法名遵從駝峰規則
/*要遍歷Set就要先有Set*/
Set<String> set = new HashSet<>();
/*
1.ArrayList是一個類,繼承了AbstractList類
2.AbstractList類繼承了AbstractCollection
3.AbstractList類同是實現了List接口
*/
set.add("aa");
set.add("bb");
set.add("cc");
set.add("dd");
?
/*創建迭代器變量---循環獲得對象(所以for的第一步是創建對象,循環進行判斷(判斷是否有下一個元素---利用iterator里面自帶的屬性)*/
for (Iterator<String> iter = set.iterator(); set.iterator().hasNext();){
//調用hashNext方法不能用iter而是用list.iterator方法
/*用iter.next返回當前對象通過又讓游標往下移動一格*/
String temp = iter.next(); //把當前內容返回然后回到頭進行判斷看有沒有下一個元素
System.out.println(temp);
}
}
}
迭代器中遍歷Map
package collection.iterator;
?
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
?
/**
* 測試迭代器Iterator遍歷Map
* @author Lucifer
*/
public class TestIteratorMap {
?
/*定義iterator遍歷方法*/
public static void testIteratorMap(){
?
//這是一個類方法,通過類名.方法名調用
Map<Integer,String> map = new HashMap<>();
//往Map里面添加元素
map.put(100,"aa");
map.put(200,"bb");
map.put(300,"cc");
?
/*遍歷Map通過節點遍歷*/
//獲得一個Set
Set<Map.Entry<Integer, String>> ss = map.entrySet(); //返回是一個set集合
/*
1.通過map.entrySet獲得一個Set集合
2.Set里面放置的是一個集合(Entry)
3.在Entry集合里面防止的是泛型<Integer,String>
<Map.Entry<Integer, String>>這個是一個鍵值對的泛型
*/
//在鍵值對當中進行迭代器迭代
for (Iterator<Map.Entry<Integer,String>> iter = ss.iterator(); iter.hasNext();){
//在這個里面繼續進行遍歷---通過.next方法返回一個Entry
Map.Entry<Integer,String> temp = iter.next();
//通過temp.getKey獲得鍵,temp.getValue獲得值
System.out.println(temp.getKey() + "---" + temp.getValue());
}
}
?
/*也可以通過keySet獲得鍵,通過鍵去遍歷容器*/
public static void testIteratorMapNo2(){
?
//這是一個類方法,通過類名.方法名調用
Map<Integer,String> map = new HashMap<>();
//往Map里面添加元素
map.put(100,"aa");
map.put(200,"bb");
map.put(300,"cc");
?
//首先先獲得鍵的集合
Set<Integer> keySet = map.keySet();
//利用for循環通過鍵的值去遍歷---鍵的類型是Integer
for (Iterator<Integer> iter = keySet.iterator(); iter.hasNext();){
//獲得了鍵以后取出鍵
Integer key = iter.next();
//通過key獲取---用get方法
System.out.println(key + "---" + map.get(key));
}
}
}
測試類:
package collection.iterator;
?
/**
* 測試TestIterator接口當中的方法
* @author Lucfier
*/
public class Test {
public static void main(String[] args) {
?
/*類名調用方法遍歷List*/
TestIterator.testIteratorList();
?
/*類名調用方法遍歷Set*/
TestIteratorSet.testIteratorSet();
?
/*類名調用方法遍歷Map*/
TestIteratorMap.testIteratorMap();
TestIteratorMap.testIteratorMapNo2();
}
}
特點:
Java當中為容器提供了統一的接口iterator它可以遍歷List、Map、Set
方法類似,都是通過循環捕獲對象進行遍歷,這里要注意他的for的條件
循環初始值為通過iterator方法捕獲的返回的鏈表(List和Set)
循環結束條件為iterator接口中的hasNext為null時結束
Map的話初始值變為iterator方法捕獲的key、value值---也可以是key值然后循環
It's a lonely road!!!
總結
以上是生活随笔為你收集整理的4.30Java Iterator迭代器遍历容器元素(List/Set/Map)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ODB——基于c++的ORM映射框架尝试
- 下一篇: 关闭CPU 睿频方法