• java笔记三:List接口


      List承诺可以将元素维护在特定的序列中。List接口在Collection的基础上添加了大量的方法,使得可以在List的中间插入和删除元素。List与 set 不同,列表通常允许重复的元素。并且存放的顺序与插入的顺序一致。

      List接口的常用方法有:

      add(E o)   :将指定对象加入到列表中。

      add(int index, E element)  :将对象加入到指定位置处。

      addAll(Collection<? extends E> c)  :追加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。

      addAll(int index, Collection<? extends E> c) :将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。

      remove(int index) :移除某个位置上的元素。

      remove(Object o) : 移除列表中出现的首个指定元素。

      set(int index, E element) :用指定元素替换列表中指定位置的元素。

      size() :返回列表大小。
      .......

      常用的有两种List类型:ArrayList和LinkedList。

      一、ArrayList

      ArrayList擅长于随即访问元素,因为它像数组一样提供了下标,可以根据下标直接访问,所以可以将ArrayList看作可扩充自身尺寸的数组。但是在ArrayList的中间插入和移除元素时较慢。

     1 package com.list;
     2 
     3 import java.util.ArrayList;
     4 import java.util.Iterator;
     5 import java.util.List;
     6 
     7 public class ArrayListTest {
     8     public static void main(String[] args) {
     9         List<String> list = new ArrayList<String>();
    10         //添加元素
    11         list.add("aaa");
    12         list.add("bbb");
    13         list.add("aaa");
    14         list.add("ddd");
    15         list.add("ccc");
    16         list.add(null);
    17         //遍历
    18         for (String string : list) {
    19             System.out.println(string);
    20         }
    21         System.out.println("---------------");
    22         //修改
    23         list.set(1, "bbb2");
    24         //删除
    25         list.remove("ccc");
    26         //迭代器遍历
    27         Iterator<String> iterator = list.iterator();
    28         while(iterator.hasNext()){
    29             System.out.println(iterator.next());
    30         }
    31         System.out.println("--------------");
    32         list.clear(); //清空列表
    33         System.out.println("清空后list的大小"+list.size());//打印大小
    34         List<String> list2 = new ArrayList<String>();
    35         list2.add("a");
    36         list2.add("b");
    37         //将list2添加到list中
    38         list.addAll(list2);
    39         //遍历
    40         for (String string : list) {
    41             System.out.println(string);
    42         }
    43     }
    44 }

    输出结果为:

     1 aaa
     2 bbb
     3 aaa
     4 ddd
     5 ccc
     6 null
     7 ---------------
     8 aaa
     9 bbb2
    10 aaa
    11 ddd
    12 null
    13 --------------
    14 清空后list的大小0
    15 a
    16 b

    由输出结果的1-5行可以看出,list存放元素的顺序与加入的顺序一致。

      二、LinkedList

      LinkedList通过代价较低的在List中间进行插入和删除操作,提供了优化的顺序访问。但是在随即访问方面相对比较慢。

      下面举个例子来演示LinkedList和ArrayList随即访问的速度:

     1 package com.list;
     2 
     3 import java.util.ArrayList;
     4 import java.util.LinkedList;
     5 import java.util.List;
     6 import java.util.Random;
     7 
     8 public class LinkedListTest {
     9     public static void main(String[] args) {
    10         List<Integer> arraylist = new ArrayList<Integer>();
    11         for (int i = 0; i < 5000; i++) {
    12             arraylist.add(i);
    13         }
    14         List<Integer> linkedlist = new LinkedList<Integer>();
    15         for (int i = 0; i < 5000; i++) {
    16             linkedlist.add(i);
    17         }
    18         Random rand = new Random(5000);
    19         //随机访问arrayList
    20         long start = System.currentTimeMillis();
    21         for (long i = 0; i < 500000; i++) {
    22             arraylist.get(rand.nextInt(5000));
    23         }
    24         long end = System.currentTimeMillis();
    25         System.out.println("arrayList随机访问时间:"+(end - start));
    26         //随机访问arrayList
    27         start = System.currentTimeMillis();
    28         for (long i = 0; i < 500000; i++) {
    29             linkedlist.get(rand.nextInt(5000));
    30         }
    31         end = System.currentTimeMillis();
    32         System.out.println("linkedlist随机访问时间:"+(end - start));
    33     }
    34 }

    程序运行结果为:

    1 arrayList随机访问时间:20
    2 linkedlist随机访问时间:2282


    很明显ArrayList随即访问比LinkedList快的多,因为LinkedList是以链表的现实存储的。

      

    我喜欢,驾驭着代码在风驰电掣中创造完美!我喜欢,操纵着代码在随必所欲中体验生活!我喜欢,书写着代码在时代浪潮中完成经典!每一段新的代码在我手中诞生对我来说就象观看刹那花开的感动!
  • 相关阅读:
    Beyond_Compare 4.2.3中文版下载及密钥(亲测可用)
    ORA-0131:Insufficient privileges(Oracle授予用户DEBUG权限)
    常见正则表达式
    MySQL导入导出SQL文件(txt文件)
    存储过程(总结)
    怎样优化数据更新、访问量大的数据库(总结)
    索引原理(平衡树数据结构)
    Oracle面试题
    Linux系统没有IP地址
    iwlist/iwconfig/iw命令
  • 原文地址:https://www.cnblogs.com/liuling/p/list.html
Copyright © 2020-2023  润新知