Java資料結構深入  絕對要會的 List家族 – List 走訪篇

Java資料結構深入 絕對要會的 List家族 – List 走訪篇

前面兩篇文章分別介紹了 ArrayList 與 LinkedList,也用程式碼介紹了幾個非常常用的 API,分別為 add()、get()、remove(),現在我們來談談一個很重要的話題,List的走訪(遍歷)。我們會不斷不斷的新增、刪除、修改List內的資料,到最後我們會想要知道,目前在這個List裡面都有什麼資料(元素),我想要把他們一個一個都拿出來,這篇文章會告訴你最簡單最實用的三招 List走訪的方法,千萬不要錯過,直接看下去吧。

利用List 元素個數方法

				
					List<String> stringList = new ArrayList<>();
stringList.add("iPhone X");
stringList.add("iPad pro 2021");
stringList.add("Mac Book Pro 2020");

for (int i = 0; i < stringList.size(); i++) {
    System.out.println(stringList.get(i));
}
				
			

這段程式碼首先宣告了一個 stringList,分別新增三筆資料。在第6行利用 stringList.size() 來獲得走訪的次數,這個方法最簡單也最直覺,有幾個元素就應該要取幾次。

利用 foreach 的方法

foreach 方法是JDK5版之後支援的方法,有別於for-loop 可以更清楚明瞭的知道目前要走訪的元素。從程式碼第6行可以看出與 for-loop的差異,foreach 一共需要兩種參數,後面的參數 stringList 就是整個物件,前面的參數代表從 stringList取出來的單一物件名稱與物件型態,這個例子的物件型態就是String。

				
					List<String> stringList = new ArrayList<>();
stringList.add("iPhone X");
stringList.add("iPad pro 2021");
stringList.add("Mac Book Pro 2020");

for (String element : stringList) {
    System.out.println(element);
}
				
			

利用 Iterator的方法

底下的程式碼可以看到 stringList物件呼叫 iterator()方法,回傳一個 Iterator物件,接下來透過Iterator物件的 hasNext()方法知道還有沒有元素還沒被走過,透過 next() 可以取得該元素的資料。

				
					List<String> stringList = new ArrayList<>();
stringList.add("iPhone X");
stringList.add("iPad pro 2021");
stringList.add("Mac Book Pro 2020");

Iterator iterator = stringList.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}
				
			

Collection 介面有繼承 Iterable 介面,而Iterable 介面內有一個 回傳Iterator介面的iterator方法,這個Iterator介面有迭代、走訪的功能它訂定了hasNext()與next()方法來方便走訪Collection物件。還記得我們在入門篇有提到的Collection介面底下有三個家族,分別為Set、List與Queue,所以這三大家族都必須實作Iterable的介面。下圖就是Iterator與Collection家族的 Class Diagram。

Iterable Class Diagram

接著來看程式碼比較清楚,我們舉ArrayList為例,ArrayList必須實作iterator()方法如下圖,因為它的祖父Collection介面繼承了Iterable介面,這個實作方法回傳一個新物件 Itr 。而Itr 是ArrayList 的私有類別由它繼承 Iterator介面並且實作 Iterator介面的所有方法,由於 Itr 實作了 Iterator介面,所以名義上它就是 Iterator家族的人,所以就可以當做 Iterator 回傳。另外,別忘記這個步驟,因為Itr實作Iterator介面,所以必須要實作Iterator介面的方法唷。

ArrayList Iterator Source Code

發佈留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料