`

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
分享到:
评论

相关推荐

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

    在编程领域,特别是涉及到数据操作的时候,`list` 是一种常用的数据结构,它在Python、JavaScript等语言中广泛使用。`list to list` 操作通常指的是将一个列表(list)的内容移动到另一个列表中,这可能涉及到列表的...

    CSharp_List.zip_C# list_C#中list_C#中list的用法_C#怎么引用List_c# list

    在C#编程中,`List&lt;T&gt;`是.NET框架中常用的一种动态数组,它属于泛型集合,提供了丰富的功能,使得在处理一系列数据时更加灵活高效。`List&lt;T&gt;`类是`System.Collections.Generic`命名空间的一部分,它实现了`IList&lt;T&gt;`...

    Scala的List类方法整合

    ### Scala的List类方法整合 在Scala编程语言中,`List` 类是处理有序集合的一种常见方式。本文将详细介绍 `List` 类中的多种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def + (elem: A): List...

    list嵌套list例子

    在Python编程语言中,列表(list)是一种非常重要的数据结构,它可以存储任意类型的对象,包括数字、字符串,甚至是其他列表。当我们谈论“list嵌套list”时,这意味着在一个列表内部包含了一个或多个列表,这样的...

    delphi Tlist使用方法举例

    在Delphi编程环境中,`TList` 是一个基础且重要的数据结构,用于存储动态数组。在 Delphi 的 VCL(Visual Component Library)框架中,`TList` 类提供了方便的方法来管理和操作对象列表。本教程将通过一个DEMO示例,...

    List转换为List

    本知识点重点讲解将List转换为List的过程,这在进行Web开发、数据处理以及与前端交互等场景中非常常见。同时,也会涉及List转换为List及list转换为JsonArray的内容。 ### List转换为List 在Java中,Bean通常指的是...

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

    描述中提到的“**再做List数据集合打印或数据绑定时,需要把List集合分组筛选**”意味着在处理List数据并准备显示或输出时,可能需要根据某些条件对数据进行分类,然后可能进一步筛选出特定的子集。这可以通过Linq的...

    duilib list控件使用

    本篇文章将详细介绍如何在Duilib中使用List控件,并通过`list.cpp`文件的示例来探讨其主要功能和用法。 首先,理解List控件的基本结构。List控件由多个子项(Item)组成,每个子项可以包含文本、图片或者自定义的...

    SharedPreferences存取list集合

    要将List存储到SharedPreferences,我们需要序列化(serialize)List为字符串,然后在需要时反序列化(deserialize)回List。一种常见的序列化方法是JSON。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时...

    关于Java中List对象的分页思想-按10个或者n个数对list进行分组

    Java中List对象的分页思想-按10个或者n个数对list进行分组 Java中List对象的分页思想是一种常用的数据处理技术,通过将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素,例如10个或n...

    遍历CheckBoxList,获得选中项的值动态绑定CheckBoxList代码

    ### 遍历CheckBoxList,获得选中项的值动态绑定CheckBoxList #### 知识点一:CheckBoxList概述及应用场景 **CheckBoxList** 是ASP.NET Web Forms中一个非常有用的控件,它允许用户选择一个或多个选项。CheckBoxList...

    delphi Tlist详解

    ### Delphi TList 类详解 #### 一、引言 在 Delphi 开发环境中,`TList` 是一种非常实用且强大的数据结构容器,用于存储一系列对象指针。相较于简单的数组,`TList` 提供了更为丰富的功能,如动态调整大小、排序等...

    java List排序工具类

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

    json转为list 涉及 java springboot

    "JSON 转换为 List 涉及 Java 和 Spring Boot" JSON 转换为 List 是一种常见的数据处理操作,特别是在 Java 和 Spring Boot 应用程序中。下面我们将详细介绍如何使用 Java 和 Spring Boot 将 JSON 字符串转换为 ...

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

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

    C# List实现行转列的通用方案

    private static List&lt;dynamic&gt; DynamicLinq(List&lt;T&gt; list, List&lt;string&gt; DimensionList, string DynamicColumn, out List&lt;string&gt; AllDynamicColumn) where T : class { // ... } ``` 3. DynamicLinq方法的实现 ...

    Alist安装包+快速启动-停止脚本

    Alist是一款强大的网盘挂载工具,它允许用户将云端的存储空间本地化,仿佛网盘变成了自己的硬盘,提供了一种高效便捷的方式来管理和操作网盘内的文件。标题中的"Alist安装包+快速启动-停止脚本"表明这个压缩包包含了...

    Python处理CSV与List的转换方法

    1.读取CSV文件到List def readCSV2List(filePath): try: file=open(filePath,'r',encoding=gbk)# 读取以utf-8 context = file.read() # 读取成str list_result=context.split(\n)# 以回车符\n分割成单独的行 #...

    ResultSet 转为listmap

    ResultSet 转为 List ResultSet 转为 List&lt;Map&gt; 是一种常见的数据处理操作。在 Java 中,使用 JDBC 连接数据库时,通常会返回一个 ResultSet 对象,该对象包含了查询结果集的所有记录。为了方便数据处理和使用,...

Global site tag (gtag.js) - Google Analytics