zoukankan      html  css  js  c++  java
  • JAVA基础之List接口

    个人理解:

      list接口是Collection接口的子类,其继承了Collection接口的所有方法,但也有其独有的方法,不过在迭代的时候不要进行任何操作。牢记数据存储的四种结构:堆栈、队列、数组、链表,并指导其区别和适合用于什么场景下。特别注意的是LinedList接口中判断是否为空的时是判断的里面元素是否为空,只有当定义的时候(new)为Null才表示该集合不存在的,是空指针异常的。至于Vector集合,了解其被ArrayList代替了,其迭代方法(枚举:Enumeration)被Iterator代替。

    一、List接口介绍:

    1、List接口是Collection接口的子类;

    2、它是一个元素存取有序的集合(不是正序和倒序的,是怎么存就怎么取);

    3、它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组中的索引是一个道理);

    4、集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素;

    5、常用的子类有:ArrayList集合、LinkedList集合。

    二、LIst集合中常用的方法:

    import java.util.ArrayList;
    import java.util.List;
    
    public class Demo01 {
        public static void main(String[] args) {
            List<String> list=new ArrayList<String>();
            list.add("123");
            list.add("abs");
            //指定位置插入
            list.add(1,"456");
            //删除指定位置的元素
            String s=list.remove(1);
            System.out.println("删除的元素为:"+s);
            //替换指定位置上的元素
            String str=list.set(0, "小明");
            System.out.println("替换的元素为:"+str);
            //遍历
            for(int i=0;i<list.size();i++){
                System.out.println(list.get(i));
            }
        }
    }

    1、增加元素方法

    ①、 add(Object e):向集合末尾处,添加指定的元素

    ②、add(int index, Object e):向集合指定索引处,添加指定的元素,原有元素依次后移

    二、 删除元素删除

    ①、 remove(Object e):将指定元素对象,从集合中删除,返回值为被删除的元素

    ②、 remove(int index):将指定索引处的元素,从集合中删除,返回值为被删除的元素

    三、替换元素方法

    ①、set(int index, Object e):将指定索引处的元素,替换成指定的元素,返回值为替换前的元素

    四、 查询元素方法

    ①、 get(int index):获取指定索引处的元素,并返回该元素

    三、Iterator的并发修改异常:

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
    
    public class Demo02 {
        public static void main(String[] args) {
            List<String> arr=new ArrayList<String>();
            arr.add("a");
            arr.add("b");
            arr.add("c");
            //遍历时判断是否有b,有的话添加个d
            //获取迭代器对象
            Iterator<String> it=arr.iterator();
            while(it.hasNext()){
                String s=it.next();
                if(s.equals("b")){
                    arr.add("d");
                }
            }
        }
    }

    运行时会出现 java.util.ConcurrentModificationException!

    解决办法:在迭代时,不要使用集合的方法操作元素;

      那么想要在迭代时对元素操作咋办?通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解决了使用Iterator迭代过程中可能会发生的错误情况。

    四、List集合存储数据的结构:

    数据存储的常用结构:堆栈、队列、数组、链表。

    1、堆栈:

    先进后出(堆栈的入口、出口都是堆栈的顶端位置);存元素为压栈,取元素为弹栈。

    2、队列:

    先进先出(队列的入口、出口各占一侧)。

    3、数组(长度不可变):

    查找元素快(通过索引)、增删元素慢(需要创建新的数组)。

    4、链表(多个节点之间,通过地址进行连接):

    查找元素慢(需要通过连接的节点,一次向后查找)、增删元素快

    五、ArrayList集合:

    ArrayList集合数据存储的结构是数组结构(适合查询的时候用);

    六、LinkedList集合:

    LinedList集合数据存储的结构是链表结构(适合增删的时候用);

    import java.util.LinkedList;
    
    public class Demo03 {
        public static void main(String[] args) {
            LinkedList<String> arr=new LinkedList<String>();
            arr.addFirst("a");
            arr.addFirst("b");
            arr.addLast("c");
            arr.addLast("d");
            /*for(String s:arr){
                System.out.println(s);
            }*/
            //获取集合中第一个元素
            System.out.println("集合中第一个元素为:"+arr.getFirst());
            //获取最后一个
            System.out.println("集合中最后一个元素为:"+arr.getLast());
            //删除第一个
            arr.removeFirst();
            arr.removeFirst();
            //删除最后一个
            arr.removeLast();
            for(String s:arr){
                System.out.println(s);
            }
            //集合里不为空时打印
            if(!arr.isEmpty()){
                System.out.println("该集合不为空");
            }
        }
    }

    七、Vector集合

        Vector集合数据存储的结构是数组结构,为JDK中最早提供的集合。Vector中提供了一个独特的取出方式,就是枚举Enumeration,它其实就是早期的迭代器。此接口Enumeration的功能与 Iterator 接口的功能是类似的。

      Vector集合已被ArrayList替代。枚举Enumeration已被迭代器Iterator替代。

  • 相关阅读:
    Asp.net2.0 中自定义过滤器对Response内容进行处理 dodo
    自动化测试工具 dodo
    TestDriven.NET 2.0——单元测试的好助手(转) dodo
    JS弹出窗口的运用与技巧 dodo
    ElasticSearch 简介 规格严格
    修改PostgreSQL字段长度导致cached plan must not change result type错误 规格严格
    Linux系统更改时区(转) 规格严格
    mvn编译“Cannot find matching toolchain definitions for the following toolchain types“报错解决方法 规格严格
    ElasticSearch 集群 & 数据备份 & 优化 规格严格
    Elasticsearch黑鸟教程22:索引模板的详细介绍 规格严格
  • 原文地址:https://www.cnblogs.com/21-forever/p/10942525.html
Copyright © 2011-2022 走看看