`
sundful
  • 浏览: 1251524 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

List的一些知识

阅读更多

Collection继承了Iterable接口,此接口只有一个方法Iterator.实现这个接口允许对象成为“foreach”语句的目标。
Collection中定义了一些集合中需要用到的基本方法,AbstractCollection提供了Collection的骨干实现。
List实现Collection接口
AbstractList是一个抽象类,实现了List接口,继承了AbstractCollection类
AbstractList类有三个子类:AbstractSequentialList,ArrayList,Vector
ArrayList还实现了List,Cloneable等几个接口
LinkedList继承自AbstractSequentialList类,实现了List,Cloneable,Queue等几个接口
ArrayList是List接口的可变数组的实现和Vector类一样,其区别在于Vector支持线程同步,ArrayList不是同步的,你可以用两个线程同时访问一个Vector对象,当一个线程访问Vector时代码将会在同步操作上浪费相当多的时间,所以在不需要同步时使用ArrayList效率会更高。
由于ArrayList是使用循环数组实现的队列,所以按索引检索速度非常快,但在数组中间插入或删除元素效率就不高了。ArrayList多用于多获取少插入的应用。
API:
void enSureCapacity(int minCapacity)
设置该集合的初始容量。如果列表大小超过了该容量容器会自动增加。
protected void removeRange(int fromIndex, int toIndex)
移除列表中索引在fromIndex(包括)和toIndex(不包括)之间的所有元素,但此方法是protected的
E set(int index, E element)
用指定的元素替代此列表中指定位置上的元素。
Object[] toArray()
返回一个按照正确的顺序包含此列表中所有元素的数组。
<T>T[] toArray(T[] a)
返回数组的运行时类型就是指定数组的运行时类型
void trimToSize()
将此ArrayList实力的容量调整为列表的当前大小。
List的iterator和listIterator方法返回的迭代器是快速失败的。
操作需要给lise附加一个或多个Iterator,他们会维护一个独立的计数值,记录着自身修改list的次数,
如果发现计数值和该list被修改的次数不同就会抛出ConcurrentModificationException
example:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
Iterator iterator = list.iterator();
此时给list附加了一个遍历器
并且之后对list进行构造上的改变(增加或删除元素,修改不算在内)
list.remove("a");
应用iterator
*iterator.next();
这是就会抛出ConcurrentModificationException
需要注意的是:通过Arrays.asList(T...t)返回的集合不可以进行结构上的修改(增加或删除)这样会导致发生UnsupportedOperationException
如:
List list = Arrays.asList(“a”,”b”,”c”,”d”);
list.add(“e”);或者list.remove(“a”);
这样会抛出上述异常,调用list.set(1,”f”);将正常通过,只有改变集合结构才会抛出。
可以用下述方法进行改善,避免异常的抛出:
List list = Arrays.asList(“a”,”b”,”c”,”d”);
List list1 = new ArrayList(list);
list1.add(“e”);或者list.remove(“a”);
就可以正常通过。
这只是本人使用过程中得出的结果,具体原因没有查明。
LinkedList
是list接口的链接列表实现。链表由节点组成,java中每一个节点含有三个引用,一个是其中元素的引用,一个是前一个节点的引用,一个是后一个节点的引用,链表的第一个是头部迭代器工作时指向的都是两个节点中的间隙,返回的对象都是其包含的最近的节点中元素的引用。链表结构的特点是向其中插入或删除元素非常方便,只需要把链打开插入或删除元素即可,但检索效率非常低,每一次检索一个元素都要重新从链表的头部进行检索,所以LinkedList多用于进行中间插入删除等操作而很少进行检索的应用中。
API:
void addFirst(E o)
将指定的元素插入此列表的开头。
void addLast(E o)
将指定的元素追加此列表的结尾,与add的区别只在于返回值类型不同
E getFirst()
返回此列表的第一个元素
E getLast()
返回此列表的最后一个元素
E removeFirst()
移除并返回此列表的第一个元素
E removeLast()
移除并返回此列表的最后一个元素
E element()
找到但不移除此列表的第一个元素,如果找不到则抛出NoSuchElementException
E peek()
找到但不移除此列表的第一个元素,如果找不到则返回null.
E remove()
找到并移除此列表的第一个元素,如果找不到则抛出NoSuchElementException
E poll()
找到并移除此列表的第一个元素,如果找不到则返回null
boolean offer(E o)
将指定的元素添加到此列表的末尾。

分享到:
评论

相关推荐

    List转换为List

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

    C#重要知识之——泛型列表List例子

    这篇文章将深入探讨`List&lt;T&gt;`的使用,包括其基本操作、性能特点以及一些高级用法。 一、基础概念 `List&lt;T&gt;`是.NET框架中的一个类,位于`System.Collections.Generic`命名空间下。这里的`T`代表一个类型参数,允许...

    关于LIstCtrl的一些总结

    ### 关于ListCtrl的一些总结 #### 一、ListCtrl简介 `ListCtrl`是Windows编程中的一个重要组件,它提供了一种灵活的方式来展示一系列项...掌握`ListCtrl`的相关知识对于开发高质量的桌面应用程序来说是非常有帮助的。

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

    标题"**C# List集合分组WinForm把List分组**"涉及到的关键知识点是C#中的List集合以及如何利用Linq进行数据分组。在WinForm应用中,数据分组通常是为了更好地展示或操作数据,例如在控件如DataGridView中进行数据...

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

    #### 知识点一:CheckBoxList概述及应用场景 **CheckBoxList** 是ASP.NET Web Forms中一个非常有用的控件,它允许用户选择一个或多个选项。CheckBoxList 控件在页面上呈现为一系列复选框,每个复选框代表一个选项。...

    把excel导入List中行也为list

    在Java编程中,将Excel数据导入到一个List中,其中每一行数据表示为一个List,是一种常见的数据处理需求。这种操作对于数据分析、数据存储或数据传输等场景非常实用。下面我们将详细讨论如何实现这个功能,以及涉及...

    webservice获取List案例

    泛型List允许我们在List中存储特定类型的元素,如List或List,确保了添加和检索元素时的类型一致性。 3. **XML配置**:由于WebService返回的是XML格式的数据,因此在处理非简单类型如List时,需要进行XML配置来正确...

    java的list取之方法

    因此,我们将结合标题与描述,围绕Java中List的相关知识点进行详细阐述。 ### Java中的List概述 在Java中,`List`接口是`Collection`框架的一个重要组成部分,它继承自`Collection`接口。`List`是一种有序集合,...

    List转换成String数组

    #### 二、基础知识 1. **List**: Java中的一种容器类型,用于存储有序的元素集合。其中`ArrayList`是最常用的实现方式之一。 2. **String[]**: 字符串数组,即由多个`String`对象组成的数组。 #### 三、转换方法...

    list转换成string数组

    在深入讨论如何将列表转换为字符串数组之前,我们首先需要了解一些基本概念。 - **List**:`List`是Java集合框架的一部分,用于存储元素的有序集合。`List`接口的一个具体实现是`ArrayList`。 - **String**:`...

    【ASP.NET编程知识】C#将DataTable转化为ListT.docx

    下面是详细的知识点: 1. 使用反射机制来获取T对象的所有属性 在将DataTable对象转换为List对象时,需要使用反射机制来获取T对象的所有属性。使用`Type.GetProperty()`方法可以获取T对象的所有公共属性。 2. 遍历...

    mfc的listctrl

    以上就是关于MFC ListCtrl的自绘、项的高度和颜色设置,以及如何添加编辑功能的一些基础知识。实际应用中,可能还需要结合其他MFC特性,如虚拟模式(Virtual Mode)来提高性能,或者使用LVCFMT_BITMAP_ON_RIGHT等...

    浅谈List.h,list.h函数解析

    下面我们将对List.h头文件中的重要知识点进行详细的解析。 1. 链表的初始化 List.h头文件中定义了一个链表结构体struct list_head,包含两个指针next和prev,分别指向链表中的下一个节点和前一个节点。链表的初始...

    blocklist_BlockList_zip_源码

    总的来说,"blocklist_BlockList_zip_源码"项目涵盖了浏览器安全、BlockList机制、XML解析以及可能的编程实现等多个IT知识点。它涉及到的内容包括但不限于网络安全、数据结构、编程语言和软件工程实践,对于理解和...

    ResultSet 转为listmap

    知识点: 1. ResultSet:Java 中的 ResultSet 对象是 JDBC 连接数据库时返回的查询结果集对象。 2. ResultSetMetaData:ResultSetMetaData 是 ResultSet 对象的元数据,提供了查询结果集的元数据信息,如列名、列...

    sources.list源

    #### 知识点解析 1. **sources.list文件的结构**:在给出的部分内容中,我们可以看到每行记录都遵循特定的格式:`deb`或`deb-src`关键字,后跟仓库的URL地址,接着是仓库的代号(如`hardy`),以及软件包的分类(如...

    java合并LIST

    首先,我们定义了两个LIST,lst1和lst2,每个LIST中都包含一些UserBean对象。然后,我们使用addAll()方法将lst2合并到lst1中。 在合并过程中,我们还需要考虑到LIST中的元素可能存在重复的情况。在本示例中,我们...

    java list和xml互转例子

    本示例涉及的核心知识点是将Java中的List对象与XML文档进行相互转换。这里,我们使用的库是dom4j-1.6.1.jar,这是一个强大的Java XML处理库。 首先,让我们详细了解一下List和XML。List是Java集合框架的一部分,它...

    ajax传递list对象数组

    ### AJAX传递List对象数组知识点详解 #### 一、前言 在Web开发中,前后端交互是必不可少的一个环节。AJAX作为一种实现异步加载数据的技术,可以有效地提升用户体验。本篇将详细介绍如何通过AJAX来传递一个List对象...

    MFC list control 内嵌按钮以及样式

    这意味着开发者需要重载一些MFC的消息处理函数,如OnDrawItem()和OnMeasureItem(),以便在List Control的项上绘制按钮图形并处理按钮的鼠标事件。 1. **内嵌按钮的实现** - 创建自定义控件:首先,你需要创建一个...

Global site tag (gtag.js) - Google Analytics