首先我們來建一個簡單的實體類:(素材來源於:https://www.cnblogs.com/lianoulay/p/8849747.html)
public class News{ private int id; private String title; private String author; public News(int id, String title, String author) { super(); this.id = id; this.title = title; this.author = author; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } }
第一種、最基礎的遍歷方式:for循環,指定下標長度,使用List集合的size()方法,進行for循環遍歷
for( int i = 0 ; i < list.size() ; i++) {
//內部不鎖定,效率最高,但在多線程要考慮並發操作的問題。 System.out.println(list.get(i)); }
import java.util.ArrayList; public class Demo01 { public static void main(String[] args) { ArrayList<News> list = new ArrayList<News>(); list.add(new News(1,"list1","a")); list.add(new News(2,"list2","b")); list.add(new News(3,"list3","c")); list.add(new News(4,"list4","d")); for (int i = 0; i < list.size(); i++) { News s = (News)list.get(i); System.out.println(s.getId()+" "+s.getTitle()+" "+s.getAuthor()); } } }
第二種、較為簡潔的遍歷方式:使用foreach遍歷List,但不能對某一個元素進行操作(這種方法在遍歷數組和Map集合的時候同樣適用)
for(String str : list) { //其內部實質上還是調用了迭代器遍歷方式,這種循環方式還有其他限制,不建議使用。 System.out.println(str); }
import java.util.ArrayList; public class Demo02 { public static void main(String[] args) { ArrayList<News> list = new ArrayList<News>(); list.add(new News(1,"list1","a")); list.add(new News(2,"list2","b")); list.add(new News(3,"list3","c")); list.add(new News(4,"list4","d")); for (News s : list) { System.out.println(s.getId()+" "+s.getTitle()+" "+s.getAuthor()); } } }
第三種、適用迭代器Iterator遍歷:直接根據List集合的自動遍歷
Iterator<String> iter = list.iterator(); while(iter.hasNext()){ //執行過程中會執行數據鎖定,性能稍差,若在循環過程中要去掉某個元素只能調用iter.remove()方法。 System.out.println(iter.next()); }
import java.util.ArrayList; public class Demo03 { public static void main(String[] args) { ArrayList<News> list = new ArrayList<News>(); list.add(new News(1,"list1","a")); list.add(new News(2,"list2","b")); list.add(new News(3,"list3","c")); list.add(new News(4,"list4","d")); Iterator<News> iter = list.iterator(); while (iter.hasNext()) { News s = (News) iter.next(); System.out.println(s.getId()+" "+s.getTitle()+" "+s.getAuthor()); } } }
上面三種遍歷方式差別不是特別大,在沒有特定的要求時,均可以使用。不過根據不同的特殊情況,要合理選擇方式,來提高開發的效率。
