码迷,mamicode.com
首页 > 编程语言 > 详细

Java 中的 List —— 有序序列

时间:2018-08-21 22:38:35      阅读:4834      评论:0      收藏:0      [点我收藏+]

标签:while循环   eve   ext   super   ons   要求   算法   nbsp   asp   

List 在 java 中是个有序序列:

一、容量

ArrayList 中有一个容量概念,表示基础数组的大小(无参时默认为 10)。在需要的时候(比如 add操作)会自动增加其容量。LinkedList 没有这个概念。

TreeMap 也有容量,默认是 16.

 

二、改善的 search 方法

LinkedList 与 ArrayList 都很低效。比如 Collection 的 contain 和 remove 方法而言。他们均花费线性时间。可以使用相应的算法。

 

三、改善的 remove 方法(此方法对 ArrayList 无效,ArrayList 由于 remove 会改变数组结构,结构重组将花费大量时间。)

 foreach 的局限性

public static void removeEvensVer2(List<Integer> lst) {
    for(Integer x : lst) {
        if (x % 2 == 0)
            lst.remove(x);
    }
}

抛异常
 java.util.ConcurrentModificationException

使用 while循环(但是这个方法对于 LinkedList 来说有几个糟糕的操作:1,使用 get方法,去遍历,在遍历的时候 get也花费线性时间。2,remove 同理,remove方法本身也花费线性时间)

 public static void removeEvensVer1(List<Integer> lst) {
        int i = 0;
        while (i < lst.size())
            if (lst.get(i) % 2 == 0)
                lst.remove(i);
            else
                i++;
    }

迭代器自带的 remove 处理 LinkedList:

当迭代到其节点时处理 remove 该节点的元素,仅花费常数时间。此外,LinkedList 除了 Collection 借口提供的 iterator方法之外, 还有扩展的 listIterator()  返回一个扩展接口 ListIterator<E>,具有 hasPrevious()  pevious()  add(Anytype x)  set(AnyType newVal) 方法。主要方便从末尾向前迭代,和在迭代时添加和改变值(对于 LinkedList 改变和添加值花费较少。)

public static void removeEvensVer3(List<Integer> lst) {
    Iterator<Integer> itr = lst.iterator();
    while (itr.hasNext())
        if (itr.next() % 2 == 0)
            itr.remove();
}

 

四、排序

对于有序序列,可以使用 Collections.sort(List<T> list, Comparator<? super T> c) 按照自己的要求进行排序。

对于 TreeSet/TreeMap 基于红黑树数据结构,可以按照元素的自然顺序,或者创建 set 时提供的 Comparator 进行排序。

 

五、 ArrayList 与 LinkedList、Array 的区别

Array 固定长度,可以包含 primitives 基础类型与对象了;

ArrayList 基于数组结构,是大小可变数组的实现。ArrayList 只能包含 对象,可以使用泛型;

LinkedList 基于双向链表结构,List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 getremove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列 (实现了 Queue 与 Deque 接口)。

 

Java 中的 List —— 有序序列

标签:while循环   eve   ext   super   ons   要求   算法   nbsp   asp   

原文地址:https://www.cnblogs.com/lemos/p/8626123.html

(2)
(1)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!