• java 遍历方法 及 数组,ArrayList,HashMap,HashSet的遍历


    一,遍历方法的实现原理

      1、传统的for循环遍历,基于计数器的:
        遍历者自己在集合外部维护一个计数器,然后依次读取每一个位置的元素,当读取到最后一个元素后,停止。主要就是需要按元素的位置来读取元素。
      2、迭代器遍历,Iterator:
        每一个具体实现的数据集合,一般都需要提供相应的Iterator。相比于传统for循环,Iterator取缔了显式的遍历计数器。所以基于顺序存储集合的Iterator可以直接按位置访问数据。
        而基于链式存储集合的Iterator,正常的实现,都是需要保存当前遍历的位置。然后根据当前位置来向前或者向后移动指针。
      3、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语句遍历

    /**
     * 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.foreach

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

      3.iterator

    // 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 

    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,推荐,尤其是容量大时

        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);
    }
  • 相关阅读:
    0802作业1替换文本文件内容

    看病
    爬山
    作业1
    超市(未完成)
    图片复制
    替换
    文件
    英文字母和中文汉字在不同字符集编码下的字节数
  • 原文地址:https://www.cnblogs.com/ooo0/p/7567009.html
Copyright © 2020-2023  润新知