• 集合之四:List接口


      查阅API,看List的介绍。有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。

    看完API,我们总结一下:

    List接口:

    •   它是一个元素存取有序的集合。例如,存元素的顺序是11、22、33。那么集合中,元素的存储就是按照11、22、33的顺序完成的)。
    •   它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。
    •   集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。

     

    List接口的常用子类有:

    •  ArrayList集合(线程不安全)
    •  LinkedList集合(线程不安全)
    •  Vector集合(线程安全)

    List接口的常用方法:

      

    public class ListDemo01 {
        
        public static void main(String[] args) {
            
            function2();
            
        }
        
        /*
         * set(int index,E)
         * 修改指定索引上的元素
         * 返回被修改之前的元素
         */
        public static void function2(){
            List<Double> list = new ArrayList<>();
            list.add(1.1);
            list.add(1.2);
            list.add(1.3);
            list.add(1.4);
            
            double d=list.set(0, 9.0);
            /*
             * 与add(index,ele)不同 不能这样添加元素
             *  java.lang.IndexOutOfBoundsException:
             */
            double d1=list.set(4,2.0);//这一句会报 java.lang.IndexOutOfBoundsException:
            System.out.println(d1+"==="+list);
        }
        /*
         * 
         * E remove(int index)
         * 移除指定索引上的元素
         * 返回被删除的元素
         * 
         */
        public static void function1(){
            List<Double> list = new ArrayList<>();
            list.add(1.1);
            list.add(1.2);
            list.add(1.3);
            list.add(1.4);
            
            System.out.println(list.remove(1));
            System.out.println(list);
        }
        
        /*
         * add(int index,E) 
         * 将元素插入到列表的指定索引上
         */
        public static void function(){
            List<String> list=new ArrayList<>();
            list.add("1");
            list.add("2");
            list.add("3");
            list.add("4");
            System.out.println(list);
            
            /*带有索引的操作 要注意索引越界的问题
             * java.lang.IndexOutOfBoundsException
             */
            list.add(5,"shsxt");
            System.out.println(list);
        }
    }

    List集合存储数据的结构:

      List接口下有很多个集合,它们存储元素所采用的结构方式是不同的,这样就导致了这些集合有它们各自的特点,供给我们在不同的环境下进行使用。数据存储的常用结构有:堆栈、队列、数组、链表。

    堆栈: 先进后出  栈的入口、出口的都是栈的顶端位置

    队列: 先进先出(即,存进去的元素,要在后它前面的元素依次取出后,才能取出该元素) 队列的入口、出口各占一侧。

    数组: 查找快,增删慢, 数组元素在内存地址上是连续的

    链表: 多个节点之间,通过地址进行连接 ,查找元素慢 ,增删元素快

    List接口的实现类:

    • ArrayList

    ArrayList集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以ArrayList是最常用的集合。

    • LinkedList  

    LinkedList集合数据存储的结构是链表结构。方便元素添加、删除的集合。实际开发中对一个集合元素的添加与删除经常涉及到首尾操作,而LinkedList提供了大量首尾操作的方法。

     1 package com.shsxt.lisa;
     2 
     3 import java.util.LinkedList;
     4 
     5 /*
     6  * LinkedList 链表集合的特有功能
     7  *         增删快 查询慢 底层是链表
     8  * 
     9  * 子类的特有功能 不能使用多态
    10  */
    11 public class LinkedListDemo01 {
    12     
    13     public static void main(String[] args) {
    14         function02();
    15     }
    16     
    17     
    18     /*
    19      * addFirst(E) 
    20      *   addLast(E)
    21      */
    22     public static void function() {
    23         //子类的特有功能 不能使用多态 所以这里不能使用list
    24         LinkedList<String> list = new LinkedList<String>();
    25         list.addLast("元首");
    26         list.add("001");
    27         list.add("002");
    28         
    29         list.addFirst("张二狗");
    30         System.out.println(list);
    31         
    32     }
    33     
    34     /*
    35      * 
    36      * getFirst(E)  getLast(E)
    37      */
    38     public static void function02(){
    39         LinkedList<String> list = new LinkedList<String>();
    40         list.addLast("元首");
    41         list.add("001");
    42         list.add("002");
    43         /*
    44          * 但是这个获取方式有一些弊端  思考下列场景
    45          */
    46         list.clear();//将容器元素清空后 java.util.NoSuchElementException
    47         //解决方法 if(link.size()!=0) 或者 if(link.isEmpty())
    48         System.out.println(list.getFirst());
    49         
    50     }
    51 }
    •  Vector集合

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

  • 相关阅读:
    经验光照模型整理
    桥接模式下主机ping不通虚拟机,虚拟机能ping主机?kdump failed
    Vue项目目录结构分析
    interface{} 指针 bool 取值
    mac read-only file
    01Prism WPF 入门实战
    C#实现约瑟夫环数学问题
    SqlServer根据某列来分组后,再依据另一列来排序,选取第一行,后再依据另一列进行筛选,之后再统计数量
    2.算法分析-时间复杂度和空间复杂度
    1.数据结构和算法概述
  • 原文地址:https://www.cnblogs.com/lotus-wmm/p/8443237.html
Copyright © 2020-2023  润新知