java中的遍歷方式:
在java中總會遇到遍歷,或許是數組,或許是集合,而數組是有限的長度,但是在集合中呢?理想中只要你的內存足夠,就可以存取你想要的任何長度。
但是再說到遍歷,可以分為遍歷一個有序的集合或者無序的集合或者數組,下面我們就看下對於它們兩者之間的不同遍歷方式。
1.使用傳統的for循環:
我們通常把對有下標的簡單的遍歷,結構為:for(起始條件;終止條件;更改起始條件){ }形如:
1 //創建的一個數組 2 int[] arr= {1,2,3,4,5,6,7,8,9}; 3 4 for(int i=0;i<=arr.length;i++){ 5 System.out.println(arr[i]); 6 } 7
在這種簡單的for循環中,可以根據下標獲取相對應的值.通常使用在數組或者有序的集合中。
2.使用增強型for循環,結構為:for( 接收循環的數據類型 值:需要循環的對象){ }
對於上面的數組遍歷,也可以使用增強型循環;形如 :
for(int a:arr) { System.out.println(a); }
可以看出增強型循環不需要下標值,可以直接遍歷出數組中的元素;通常我們使用增強型循環來遍歷一個集合,該集合可以是沒有下標的或者有下標的.
3.使用迭代器.但是需要說明的是,迭代器的使用只能在集合中使用.其實對集合的遍才是我寫這篇文章的主要目的
集合有Connlection 、Map 這兩個類型的集合都是接口類型
Connlection中的子接口有List ,然而list有實現類 ArrayList
①.對於Arraylist 使用迭代器進行遍歷
1 ArrayList<String> list=new ArrayList<>(); 2 list.add("jeremy"); 3 list.add("張三"); 4 list.add("李四"); 5 6 7 Iterator iterator=list.iterator();//調用Arraylist中的迭代器方法 8 //返回的是Iterator 類型 9 10 11 while(iterator.hasNext()) { // hasNext() 方法 判斷迭代器中是否有可以迭代的元素 12 //並將指針下移 13 Object item=iterator.next(); 14 System.out.println(item); 15 16 }
②對於set的遍歷
//和list 集合中的遍歷方法一致 區別在於set集合沒有順序 // 不可以根據下標獲得 Set<String > set=new HashSet<>(); set.add("jeremy"); set.add("張三"); set.add("李四"); //使用iterator 遍歷 Iterator< String > iterator=set.iterator(); while(iterator.hasNext()) { Object object=iterator.next(); System.out.println(object); } //可以使用foreach循環遍歷 for(String item:set) { System.out.println(item); } }
當然,沒有增強型循環 foreach可以使用在list中
③對於map的遍歷
map的存儲格式為鍵1----值 1,鍵2-----值2. 可根據get(key)方法 來取得值,key 為鍵
並且map也是一個無序 的集合 ,map沒有自帶的iterator()方法, 要遍歷map,除了使用foreach
我們需要使用一個''中間人''. map中有一個方法為keyset();可以得到鍵,返回一個Set對象.
//創建一個map Map<String, Object> map=new HashMap<>(); //添加數據 map.put("name", "jeremy"); map.put("name1", "張三"); map.put("name3", "李四"); //使用set作為中間人 接收鍵名 Set<String > set=map.keySet(); //調用set中的迭代器 Iterator< String > iterator=set.iterator(); while(iterator.hasNext()) { Object object= iterator.next(); //根據健名獲得鍵值 System.out.println(object+"-----"+map.get(object)); }
還有一種迭代器是Iterator的子接口LIstIterator,但是這種迭代器中用在有序的集合中,
它們之間的區別為:
ListIterator是Iterator的子接口。
Iterator它的遍歷只能從前往后來迭代元素。只能對迭代器列表進行刪除操作,
ListIterator可以從前往后,也可以從后往前來進行迭代。可以對迭代器列表進行刪除,添加,修改的操作。可以獲取迭代器列表的索引。