迭代器Iterator
想要遍歷Collection集合,那麼就要獲取該集合迭代器完成迭代操作,下面介紹一下獲取迭代器的方法:
public Iterator iterator(): 獲取集合對應的迭代器,用來遍歷集合中的元素的。
下面介紹一下迭代的概念:
- public E next():返回迭代的下一個元素。 - public boolean hasNext():如果仍有元素可以迭代,則返回 true。
接下來我們通過案例學習如何使用Iterator迭代集合中元素:
public class IteratorDemo { public staticvoid main(String[] args) { // 使用多型方式 建立物件 Collection<String> coll = new ArrayList<String>(); // 新增元素到集合 coll.add("串串星人"); coll.add("吐槽星人"); coll.add("汪星人"); //遍歷 //使用迭代器 遍歷 每個集合物件都有自己的迭代器 Iterator<String> it = coll.iterator();// 泛型指的是 迭代出 元素的資料型別 while(it.hasNext()){ //判斷是否有迭代元素 String s = it.next();//獲取迭代出的元素 System.out.println(s); } } }
tips::在進行集合元素取出時,如果集合中已經沒有元素了,還繼續使用迭代器的next方法,將會發生java.util.NoSuchElementException沒有集合元素的錯誤。
Iterator迭代器物件在遍歷集合時,內部採用指標的方式來跟蹤集合中的元素,為了讓初學者能更好地理解迭代器的工作原理,接下來通過一個圖例來演示Iterator物件迭代元素的過程:
在呼叫Iterator的next方法之前,迭代器的索引位於第一個元素之前,不指向任何元素,當第一次呼叫迭代器的next方法後,迭代器的索引會向後移動一位,指向第一個元素並將該元素返回,當再次呼叫next方法時,迭代器的索引會指向第二個元素並將該元素返回,依此類推,直到hasNext方法返回false,表示到達了集合的末尾,終止對元素的遍歷。
Entry鍵值對物件
我們已經知道, Map 中存放的是兩種物件,一種稱為key(鍵),一種稱為value(值),它們在在Map 中是一一對應關係,這一對物件又稱做 Map 中的一個 Entry(項) 。 Entry 將鍵值對的對應關係封裝成了物件。即鍵值對物件,這樣我們在遍歷 Map 集合時,就可以從每一個鍵值對( Entry )物件中獲取對應的鍵與對應的值。
既然Entry表示了一對鍵和值,那麼也同樣提供了獲取對應鍵和對應值得方法:
public K getKey() :獲取Entry物件中的鍵。
public V getValue() :獲取Entry物件中的值。
在Map集合中也提供了獲取所有Entry物件的方法:
public Set<Map.Entry<K,V>> entrySet() : 獲取到Map集合中所有的鍵值對物件的集合(Set集合)。
Map集合遍歷鍵值對方式
鍵值對方式:即通過集合中每個鍵值對(Entry)物件,獲取鍵值對(Entry)物件中的鍵與值。
操作步驟與圖解:
1. 獲取Map集合中,所有的鍵值對(Entry)物件,以Set集合形式返回。方法提示: entrySet() 。
2. 遍歷包含鍵值對(Entry)物件的Set集合,得到每一個鍵值對(Entry)物件。
3. 通過鍵值對(Entry)物件,獲取Entry物件中的鍵與值。 方法提示: getkey() getValue()
public class MapDemo02 { public static void main(String[] args) { // 建立Map集合物件 HashMap<String, String> map = new HashMap<String,String>(); // 新增元素到集合 map.put("胡歌", "霍建華"); map.put("郭德綱", "于謙"); map.put("薛之謙", "大張偉"); // 獲取 所有的 entry物件 entrySet Set<Entry<String,String>> entrySet = map.entrySet(); // 遍歷得到每一個entry物件 for (Entry<String, String> entry : entrySet) { // 解析 String key = entry.getKey(); String value = entry.getValue(); System.out.println(key+"的CP是:"+value); } } }