zoukankan      html  css  js  c++  java
  • java List接口一

    一 List接口概述

      查阅API,看List的介绍。有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的

    插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的

    元素。与 set 不同,列表通常允许重复的元素。

    看完API,我们总结一下:

      List接口:

      它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按

    照11、22、33的顺序完成的)。

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

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

    List接口的常用子类有:

      ArrayList集合

      LinkedList集合

    二  List接口中的常用方法

     增加元素方法

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

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

    删除元素删除

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

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

    替换元素方法

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

     查询元素方法

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

    List<String> list = new ArrayList<String>();
    //1,添加元素。
    list.add("小红");
    list.add("小梅");
    list.add("小强");
    //2,插入元素。插入元素前的集合["小红","小梅","小强"]
    list.add(1, "老王"); //插入元素后的集合["小红","老王","小梅","小强"]
    //3,删除元素。
    list.remove(2);// 删除元素后的集合["小红","老王","小强"]
    //4,修改元素。
    list.set(1, "隔壁老王");// 修改元素后的集合["小红","隔壁老王","小强"]
    
    Iterator<String> it = list.iterator();
    while (it.hasNext()) {
        String str = it.next();
        System.out.println(str);
    }

      由于List集合拥有索引,因此List集合迭代方式除了使用迭代器之外,还可以使用索引进行迭代。

    for (int i = 0; i < list.size(); i++) {
        String str = list.get(i);
        System.out.println(str);            
    }

      在list集合迭代元素中,对元素进行判断,一旦条件满足就添加一个新元素。代码如下

    public class IteratorDemo {
    //在list集合迭代元素中,对元素进行判断,一旦条件满足就添加一个新元素
        public static void main(String[] args) {
            //创建List集合
            List<String> list = new ArrayList<String>();
            //给集合中添加元素
            list.add("abc1");
            list.add("abc2");
            list.add("abc3");
            list.add("abc4");
            //迭代集合,当有元素为"abc2"时,集合加入新元素"a"
            Iterator<String> it = list.iterator();
            while(it.hasNext()){
                String str = it.next();
                //判断取出的元素是否是"abc2",是就添加一个新元素
                if("abc2".equals(str)){
                    list.add("a");// 该操作会导致程序出错
                }
            }
            //打印容器中的元素
            System.out.println(list);
        }
    }

      运行上述代码发生了错误 java.util.ConcurrentModificationException这是什么原因呢?

      在迭代过程中,使用了集合的方法对元素进行操作。导致迭代器并不知道集合中的变化,容易引发数

    据的不确定性。

      并发修改异常解决办法:在迭代时,不要使用集合的方法操作元素。

      那么想要在迭代时对元素操作咋办?通过ListIterator迭代器操作元素是可以的,ListIterator的出现,解

    决了使用Iterator迭代过程中可能会发生的错误情况。

    三 List集合存储数据的结构

      List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自

    的特点,供给我们在不同的环境下进行使用。数据存储的常用结构有:堆栈、队列、数组、链表。分别如下:

    堆栈,采用该结构的集合,对元素的存取有如下的特点:

      先进后出(即,存进去的元素,要在它后面的元素依次取出后,才能取出该元素)。例如,子弹压进弹夹,

    先压进去的子弹在下面,后压进去的子弹在上面,当开枪时,先弹出上面的子弹,然后才能弹出下面的子弹。

      栈的入口、出口的都是栈的顶端位置

      压栈:就是存元素。即,把元素存储到栈的顶端位置,栈中已有元素依次向栈底方向移动一个位置。

      弹栈:就是取元素。即,把栈的顶端位置元素取出,栈中已有元素依次向栈顶方向移动一个位置。

     队列,采用该结构的集合,对元素的存取有如下的特点:

      先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素)。例如,安检。排成一

    列,每个人依次检查,只有前面的人全部检查完毕后,才能排到当前的人进行检查。

      队列的入口、出口各占一侧。例如,下图中的左侧为入口,右侧为出口。

     数组,采用该结构的集合,对元素的存取有如下的特点:

      查找元素快:通过索引,可以快速访问指定位置的元素

      增删元素慢:

      指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素

    根据索引,复制到新数组对应索引的位置。如下图

      指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应索引的位

    置,原数组中指定索引位置元素不复制到新数组中。如下图

     链表,采用该结构的集合,对元素的存取有如下的特点:

      多个节点之间,通过地址进行连接。例如,多个人手拉手,每个人使用自己的右手拉住下个人

    的左手,依次类推,这样多个人就连在一起了。

      查找元素慢:想查找某个元素,需要通过连接的节点,依次向后查找指定元素

      增删元素快:

      增加元素:操作如左图,只需要修改连接下个元素的地址即可。

      删除元素:操作如右图,只需要修改连接下个元素的地址即可。

  • 相关阅读:
    hdu 4027 Can you answer these queries? 线段树
    ZOJ1610 Count the Colors 线段树
    poj 2528 Mayor's posters 离散化 线段树
    hdu 1599 find the mincost route floyd求最小环
    POJ 2686 Traveling by Stagecoach 状压DP
    POJ 1990 MooFest 树状数组
    POJ 2955 Brackets 区间DP
    lightoj 1422 Halloween Costumes 区间DP
    模板 有源汇上下界最小流 loj117
    模板 有源汇上下界最大流 loj116
  • 原文地址:https://www.cnblogs.com/jiejava/p/13327042.html
Copyright © 2011-2022 走看看