`

List

 
阅读更多

List 

   装载元素的有序容器,List内的元素可以重复,可以通过位置定位到每一个元素或将某一元素插入到固定位置。

  

   

List 子类:


List 的选择:

 

单线程下:

        任意方式读取遍历,但只从队列尾部添加,从尾部开始删除,就用ArrayList, (添加到中间或从中间删 除需要重建数组,添加的元素量过大时,不断超过容量,也需要重建数组,最指定容量大小)。

       

       任意位置添加删除,遍历时仅使用迭代器,就用LinkedList。

 

 多线程下

(如果允许,最好使用:ConcurrentLinkedQueue(自旋锁)、 ArrayBlockingQueue(可重入锁)、 LinkedBlockingDeque(可重入锁)):

 

 

          任意方式读取遍历(迭代器除外),但只从队列尾部添加,从尾部开始删除,可以使用Vector

(大部分方法是同步的,使用迭代器遍历,其它线程改变了Vector,则迭代器报错:ConcurrentModificationException)。

         需要后进先出(LIFO)  ,可以使用Stack

         当读取操作远大于写入删除操作时,可以使用CopyOnWriteArrayList(每次写入删除都会重建数组);

         也可以使用Collections.synchronizedList(List<T> list) 对任何一个非线程安全的LIst进行包装而达到线程安全的目的,但迭代时必须同步迭代器,多线程频繁该问时,性能没有优势。

  

 

List 在Collection的基础上提供了:

 

 boolean add(E e)
          向列表的尾部添加指定的元素(可选操作)。
 void add(int index, E element)
          在列表的指定位置插入指定元素(可选操作)。
 boolean addAll(Collection<? extends E> c)
          添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序(可选操作)。
 boolean addAll(int index, Collection<? extends E> c)
          将指定 collection 中的所有元素都插入到列表中的指定位置(可选操作)。
 void clear()
          从列表中移除所有元素(可选操作)。
 boolean contains(Object o)
          如果列表包含指定的元素,则返回 true。判断方式:equals方法返回true.
 boolean containsAll(Collection<?> c)
          如果列表包含指定 collection 的所有元素,则返回 true
 boolean equals(Object o)
          比较指定的对象与列表是否相等。
 E get(int index)
          返回列表中指定位置的元素。
 int hashCode()
          返回列表的哈希码值。
 int indexOf(Object o)
          返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
 boolean isEmpty()
          如果列表不包含元素,则返回 true
 Iterator<E> iterator()
          返回按适当顺序在列表的元素上进行迭代的迭代器。
 int lastIndexOf(Object o)
          返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
 ListIterator<E> listIterator()
          返回此列表元素的列表迭代器(按适当顺序)。
 ListIterator<E> listIterator(int index)
          返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。
 E remove(int index)
          移除列表中指定位置的元素(可选操作)。
 boolean remove(Object o)
          从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。
 boolean removeAll(Collection<?> c)
          从列表中移除指定 collection 中包含的其所有元素(可选操作)。
 boolean retainAll(Collection<?> c)
          仅在列表中保留指定 collection 中所包含的元素(可选操作)。
 E set(int index, E element)
          用指定元素替换列表中指定位置的元素(可选操作)。
 int size()
          返回列表中的元素数。
 List<E> subList(int fromIndex, int toIndex)
          返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。
 Object[] toArray()
          返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。
<T> T[]
toArray(T[] a)
          返回按适当顺序(从第一个元素到最后一个元素)包含列表中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

 

 

 

ArrarList:

  内部使用数组来实现。 其构建器可以指定数组大小,默认构建器指定数组大小为10. 

  当内部数组已满,不能再添加元素时,会新建更大容量的数组,新数组长度约为原数组长度的1.5倍。

 

  当需要插入的元素很多,而未指定适合的容量,则可能多次重建数组。 

 

ArrayList()
          构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c)
          构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
          构造一个具有指定初始容量的空列表。

 

 List 中判断对象是否存在的方式:调用给定对象的equals()方法与队列中每一个元素比较。

 

 由于内部使用数组实现:

1.获取指定位置的元素速度快(get(index)),在列表尾部添加元素也比较快(通过数组下标访问)

2.在指定位置添加元素慢,在指定位置删除元素也慢。(需要新建数组,复制元素)

使用迭代器时,对ArrayList的插入删除会引起迭代器报错:ConcurrentModificationException

 

LinkedList  :

内部使用链表实现:

1.获取指定位置的元素速度慢(get(index))(需要从链表的头或尾一个一个元素的累加,直到个数==index)

2.在指定位置添加元素快,在指定位置删除元素也快。(链表,改前后元素指向就行了)

使用迭代器时,对LinedList的插入删除会引起迭代器报错:ConcurrentModificationException

 

LinkedList 遍历时使作iterator()方法比get(每一个index)要快。

 

CopyOnWriteArrayList:


内部使用数组实现。 

读取操作快,插入删除操作慢。

线程安全的:每一个插入删除操作,都先获得锁(其它线程执行插入删除时阻塞),再重建数组,添加或删除元素,把新数组赋给原数组引用。 

 

适用场合:多线程下,当遍历操作的数量大大超过插入删除操作并希望线程安全。读取速度快,插入删除慢且占内存。

 

Vector:

内部使用数组实现。其构建器可以指定数组大小,默认构建器指定数组大小为10. 

当内部数组已满,不能再添加元素时,会新建更大容量的数组,新数组长度为:

newCapacity = (capacityIncrement > 0) ?(oldCapacity + capacityIncrement) : (oldCapacity * 2)

 

Vector()
          构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
Vector(Collection<? extends E> c)
          构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。
Vector(int initialCapacity)
          使用指定的初始容量和等于零的容量增量构造一个空向量。
Vector(int initialCapacity, int capacityIncrement)
          使用指定的初始容量和容量增量构造一个空的向量。

 

线程安全的: 所有操作方法都是同步(synchronized)的。

 

适用场合:多线程下,但频繁访问(读取插入删除)相对慢。

 

 

 

stack:

在Vector的基础上提供的先进后出(LIFO)功能。

 

boolean empty()
          测试堆栈是否为空。
 E peek()
          查看堆栈顶部的对象,但不从堆栈中移除它。
 E pop()
          移除堆栈顶部的对象,并作为此函数的值返回该对象。
 E push(E item)
          把项压入堆栈顶部。
 int search(Object o)
          返回对象在堆栈中的位置,以 1 为基数。

 

 

 

 

 

  

  • 大小: 57.8 KB
分享到:
评论

相关推荐

    java List排序工具类

    java List排序工具类 使用示例: new OrderUtils().order(list, "name", OrderUtils.DESC); 相关实例代码: public static void main(String[] args) { List&lt;Person&gt; list = getData(); // 获取无序数据 new ...

    C语言头文件 LIST C语言头文件 LIST

    C语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言头文件 LISTC语言...

    list to list 将list内容移到另一个list

    list to list 将list内容移到另一个list

    Docker中的Alist挂载qBittorrent实现离线下载

    Docker中的Alist挂载qBittorrent实现离线下载 1.Alistzh中设置qBittorrent的信息 1)进入Alist 2)选择“管理” 3)在设置中点“其他” 在下面的红色框中输入对应qBittorrent的用户名,密码,访问IP及端口号 输入...

    javaScript如何处理从java后台返回的list

    事情: 从java后台返回List类型数据,用于界面显示。但js中想获取它并操作它。直接使用EL表达式,js把它识别成字符串了。不是我想要的啊。。网上搜了搜大家的解决方案…最好的当然是把List集合转成json格式传到界面...

    list嵌套list例子

    list嵌套list,可以直接运行,其实就是事件拦截

    【Robotframework】列表List的常用操作.pdf

    判断list相等 注意:@{list}是robot提供的语法,python并没有@{},只有${},所以要⽐较两个@{list},需要把@{list},直接写成英⽂dollar ${list}进 ⾏对⽐ ⽰例: @{list} Create List lilei hanmeimei liming ...

    浅谈C#中ListT对象的深度拷贝问题

    一、List对象中的T是值类型的情况(int 类型等) 对于值类型的List直接用以下方法就可以复制: List&lt;T&gt; oldList = new List(); oldList.Add(..); List&lt;T&gt; newList = new List(oldList); 二、List对象中的T是引用...

    js模拟list和map

    javascript 模拟 java中的 List,Map js文件为 js/utils.js IE6.0 测试通过 &lt;br&gt;List: add(var obj) //添加一个元素 remove(var index) //删除一个元素 get(var index) //获取一个元素 remove...

    C语言头文件 LIST.H

    C语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC语言头文件 LIST.HC...

    List转换为List

    List转换为List, List转换为List&lt;Object&gt; list转化为 JsonArray ,list转换JsonArray

    python 寻找list中最大元素对应的索引方法

    如下所示: aa = [1,2,3,4,5] aa.index(max(aa)) 如果aa是numpy数组: aa = numpy.array([1,2,3,4,5]) ... 您可能感兴趣的文章:python numpy和list查询其中某个数的个数及定位方法详解Python如何获取列表(List

    按照规则,对list排序

    * list里面数据格式 [01-01-开头.txt, 01-02-简介.jpg, 11-01-尾声.jpg, 11-03-空白.jpg, 11-04-空白2.jpg, 11-06-空白1.jpg, 11-02-答谢语.txt, 02-01-标题.jpg, 02-09-标题555.jpg, 21-01-谢谢观赏.jpg, 21-03-...

    java 数组转list list转数组 list数组互转

    java 数组转list list转数组 list数组互转 java8 代码示例

    ListCtrl控件和下拉框,编辑框等控件组合使用

    ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等控件组合使用ListCtrl控件和下拉框,编辑框等...

    数组,List 重复元素统计数量,找出唯一的元素

    两种不同方式(使用map和list两种方式)获得一下输出结果 数组和list 可以使用相同的方法,自己测试可以 控制台输出 1出现的次数:2 2出现的次数:2 3出现的次数:2 4出现的次数:3 5出现的次数:1 数组中唯一的元素是:...

    java中set、list和map的使用方法实例

    // java中对象容器主要有Set,List和Map三个接口类。 // 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 // GOF给出的定义为:提供一种方法访问一个容器(container)对象中的各个元素, // 而又不需暴露该...

    List集合排序222222

    List sortList = controllerForList.sortList(list, arr1, arr2); 参数1 排序的集合 参数2 排序的字段(与定义字段一致) 可多个 参数3 排序方式(asc desc) 暂时只支持String 和int的排序 可能有些BUG 敬请谅解

    将一个比较大的list分割为多个小的list

    将一个比较大的list分割为多个小的list,可以解决mybatis批量插⼊数据list超过⼀定长度时报错的解决办法

    C#List集合分组winform把List分组

    再做List数据集合打印活数据绑定时,需要吧List集合分组筛选的,就可以用。

Global site tag (gtag.js) - Google Analytics