java 遍歷方法 及 數組,ArrayList,HashMap,HashSet的遍歷

一,遍歷方法的實現原理

  一、傳統的for循環遍歷,基於計數器的:
    遍歷者本身在集合外部維護一個計數器,而後依次讀取每個位置的元素,當讀取到最後一個元素後,中止。主要就是須要按元素的位置來讀取元素。
  二、迭代器遍歷,Iterator:
    每個具體實現的數據集合,通常都須要提供相應的Iterator。相比於傳統for循環,Iterator取締了顯式的遍歷計數器。因此基於順序存儲集合的Iterator能夠直接按位置訪問數據。
    而基於鏈式存儲集合的Iterator,正常的實現,都是須要保存當前遍歷的位置。而後根據當前位置來向前或者向後移動指針。
  三、foreach循環遍歷:
    根據反編譯的字節碼能夠發現,foreach內部也是採用了Iterator的方式實現,只不過Java編譯器幫咱們生成了這些代碼。數組

 

二,數組的遍歷

  1.for循環遍歷性能

/**
 * for循環遍歷
 */
public static void forArr() {
    int[] arr = new int[] { 1, 2, 3 };
    for (int i = 0; i < arr.length; i++) {
        int j = arr[i];
        System.out.println(j);
    }
}

  2.foreach語句遍歷spa

/**
 * foreach語句遍歷
 */
public static void foreachArr(){
    int[] arr = new int[] { 1, 2, 3 };
    for (int i : arr) {
        System.out.println(i);
    }
}

 

三,ArrayList的遍歷

  1.for指針

List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
// for
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

  2.foreachcode

// foreach
for
(Integer integer : list) { System.out.println(integer); }

  3.iteratorblog

// iterator 
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    int item =  iterator.next();
    System.out.println(item);
}

 

四,HashMap的遍歷

  1.經過獲取全部的key按照key來遍歷.接口

    keySet()方法:將Map中全部的鍵存入到set集合中。由於set具有迭代器。全部能夠迭代方式取出全部的鍵,再根據get方法。獲取每個鍵對應的值。 keySet():迭代後只能經過get()取key three

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "first");
map.put(2, "second");
map.put(3, "three");

/**
 * 經過獲取全部的key按照key來遍歷
 */
public static void byKey() {
    Set<Integer> keySet = map.keySet(); // map集合的全部key鍵的Set集合
    for (Integer key : keySet) {
        String value = map.get(key); // 獲得每一個key對應的value值
        System.out.println("key: " + key + " -->value: " + value);
    }
}

  2.經過Map.entrySet遍歷key和value,推薦,尤爲是容量大時get

    entrySet()方法:Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射關係的 Set 視圖。 Map.Entry表示映射關係。entrySet():迭代後能夠e.getKey(),e.getValue()取key和value。返回的是Entry接口 。編譯器

/**
 * 經過Map.entrySet遍歷key和value,推薦,尤爲是容量大時
 */
public static void byEntrySet() {
    Set<Entry<Integer, String>> entrySet = map.entrySet(); // 經過entrySet()方法將map集合中的映射關係取出(這個關係就是Map.Entry類型)
    for (Entry<Integer, String> entry : entrySet) {
        System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
    }
}

  3.經過Map.values()遍歷全部的value,但不能遍歷key

    values()方法:是獲取集合中的全部的值----沒有鍵,沒有對應關係

/**
 * 經過Map.values()遍歷全部的value,但不能遍歷key
 */
public static void byValues() {
    Collection<String> values = map.values();
    for (String value : values) {
        System.out.println("value= " + value);
    }

}

  說明:keySet()的速度比entrySet()慢了不少,也就是keySet方式遍歷Map的性能不如entrySet性能好,爲了提升性能多考慮用entrySet()方式來進行遍歷。

 

五,HashSet的遍歷

  1.foreach

Set<String> set = new HashSet<String>();
set.add("first");
set.add("second");
set.add("three");

// foreach
for (String string : set) {
    System.out.println(string);
}

  2.iterator

// iterator
Iterator<String> setIterator = set.iterator();
while (setIterator.hasNext()) {
    String string = (String) setIterator.next();
    System.out.println(string);
}
相關文章
相關標籤/搜索