zoukankan      html  css  js  c++  java
  • Java中的List集合和迭代器

    一.Java中的List集合。

    终于有时间来好好整理一下Java中的集合。

    首先要讲的就是List集合。Java中List集合主要将两个:

    第一个是底层使用数组维护的ArrayList,第二个是底层是链表的LinkedList。

    1.List

    List集合继承Collection集合,就是一个有序列表。

    2.ArrayList

    1.优点:由于底层维护的是数组,随机访问较为方便。可以动态扩容

    2.初始化时的默认长度,以及动态扩容:默认长度为10,动态扩容是1.5倍。

    3.实现的主要接口有:List接口,克隆接口,随机访问接口,序列化接口。

    4.方法注意:clear(),不是将底层数组删除,而是将其设置为null

    代码演示:

    package Study_Collection;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    
    public class ArrayListText {
        public static void main(String[] args) {
            ArrayList<String> arr=new ArrayList<>(3);
            arr.add("A");
            arr.add(1,"B");
            if( arr.contains("A")){
                System.out.println("集合含有A元素");
            }else{
                System.out.println("集合不含有A元素");
            }
          if(arr.get(0).equals("A")) {
              System.out.println("0号位为A");
          }else{
              System.out.println("0号位不为A");
          }
          arr.addAll(arr);
            System.out.println("添加了自己后的arr集合:"+arr.toString());
            System.out.println("在来测试一下我想要得到一个集合中没有的元素C的位置;"+arr.indexOf("C"));
            arr.removeAll(new ArrayList<>(Arrays.asList(new String[] {"A"} )));
            System.out.println(arr.toString());
        }
    }

    3.LinkedList

    1.优点:插入删除效率较高

    2.缺点:随机访问效率较低,虽然提供了get(),set()方法,但是如果随机访问次数较多建议使用ArrayList。

    3.特点:Java中链表为双端链表,所以他的迭代器也有双端迭代器。

    代码实验:

    package Study_Collection;
    
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.ListIterator;
    
    /**
     * LinkedList测试类
     */
    public class LinkedListText {
        /***
         * LinkedList类是一个链表,java中的链表为双向链表
         * 优点:善于插入删除
         * 缺点:无法随机访问
         */
        public static void main(String[] args) {
            LinkedList<Integer> list=new LinkedList<>();
            list.add(1);
            list.add(2);
            list.add(3);
            list.add(4);
            list.add(5);//链表的add方法直接将元素加入到链表的末尾
            //对于列表,它含有双向迭代器,当然也有单向迭代器
            ListIterator<Integer> it= list.listIterator();
            while(it.hasNext()){//it迭代器的指针在开头位置
               it.next();//指针后移
            }
            while(it.hasPrevious()){//现在it迭代器的指针在末尾
                System.out.println(it.previous());//指针前移
            }
            //在迭代器中的add方法()
            //在Collection接口中的add方法实现是直接加到末尾,但是迭代器的add是随着迭代器的位置去加入的。
          it.next();
          it.next();
          it.add(6);
         while(it.hasPrevious()){
             System.out.println(it.previous());
         }
    
            //多个迭代器的问题
            Iterator<Integer> it2=list.listIterator();
            it.next();
            it.remove();
            it2.next();//抛出并发修改异常,解决方式:多个迭代器时,只有一个可以读与写其他的都是读。
            /**
             * 对于链表而言虽然提供了get set方法但是效率太低,需要随机访问建议使用ArrayList
             */
            System.out.println(list.get(0));
            list.set(0,3);
            System.out.println(list.get(0));
    }
    }

    3.针对迭代器

    package Study_Collection;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    /**
     *迭代器
     */
    public class IteratorText {
        public static void main(String[] args) {
            /***
             * 首先Collection接口实现了迭代器的方法所以实现了collection的类都可以使用迭代器
             */
        ArrayList<String> arr=new ArrayList<>();
        arr.add("A");
        arr.add("B");
          Iterator<String> it=arr.iterator();
        while(it.hasNext()){
            System.out.println(it.next());
        }
        //能够实现foreach循环的必须实现iterator接口
        for(String str : arr){
            System.out.println(str);
        }
        //迭代器中的删除,是指删除上一次next()返回的元素,也就是说remove必须和next联合使用
            it.next();
            it.remove();
            System.out.println(it.next());
        }
    }
  • 相关阅读:
    vue 给嵌套的iframe子页面传数据 postMessage
    左边宽度固定,右边宽度自适应的三种写法
    全局变量声明的规范化
    利用__index和__newindex实现默认值表、监控表、只读表
    Metatable和Metamethod
    Lua中的协同程序 coroutine
    Lua中的require
    Lua基础
    D3D的绘制
    效率相关笔记
  • 原文地址:https://www.cnblogs.com/SAM-CJM/p/9640862.html
Copyright © 2011-2022 走看看