List<E> 接口简明
java.util.List<E>接口
、ListIterator
、equals 方法
List 是 Collection 接口的子接口,具备了 Collection 的所有方法。
List 体系特有的共性方法中,查阅方法发现 List 的特有方法都有索引,这是该集合最大的特点。
List : 有序( 元素存入集合的顺序和取出的顺序一致 ) ,元素都有索引。元素可以重复。
- ArrayList : 底层数据结构是数组, 线程不同步,ArrayList 替代了 Vector ,随机访问速度快。
- LinkedList : 底层数据结构是链表,线程不同步,增删元素的速度快。
- Quene : Queue接口窄化了对LinkedList的方法的访问权限。
API java.util.List
- 添加:
add(index,element)
:在指定的索引位插入元素。
addAll(index,collection)
:在指定的索引位插入一堆元素。 - 删除:
remove(index)
:删除指定索引位的元素。 返回被删的元素。 - 获取:
Object get(index)
:通过索引获取指定元素。
int indexOf (obj)
:获取指定元素第一次出现的索引位,如果该元素不存在返回-1;
所以,通过-1,可以判断一个元素是否存在。
int lastIndexOf(Object o)
:反向索引指定元素的位置。
List subList (start,end)
:获取子列表。 - 修改:
Object set(index,element)
:对指定索引位进行元素的修改。 - 获取所有元素:
ListIterator listIterator ()
:list 集合特有的迭代器。
for ( int x = 0; x < list.size(); x++ ){
System.out.print("get:" + list.get(x));
}
角标遍历
并发修改
在进行列表元素迭代的时候,如果在迭代过程中,迭代器检测出了列表从外部被修改了。 会抛出ConcurrentModificationException
异常。
List<String> list = new LinkedList<>();
...
ListIterator<String> it1 = list.listIterator();
ListIterator<String> it2 = list.listIterator();
it1.next();
it1.remove();
it2.next() //throws ConcurrentModificationException
导致的原因是:
大多数集合类返回的快速失败迭代器在遍历时不允许结构性修改(结构性修改指添加,删除和更新一个元素) 当遍历的同时被结构性修改,就会抛出ConcurrentModificationException
异常。如何解决呢?
在迭代器创建之后,如果从结构上对映射进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出ConcurrentModificationException
。编写依赖于此异常程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。
equals 方法
对于list 集合,底层判断元素是否相同,其实用的是元素自身的equals 方法完成的。所以建议元素都要复写equals 方法 ,建立元素对象自己的比较相同的条件依据。
LinkedList : 的特有方法。
- addFirst();
- addLast();
- offerFirst();
- offerLast();
- getFirst():获取链表中的第一个元素。如果链表为空,抛出 NoSuchElementException;
- getLast();
- peekFirst();获取链表中的第一个元素。如果链表为空,返回 null。
- peekLast();
- removeFirst():获取链表中的第一个元素,但是会删除链表中的第一个元素。如果链表为空,抛出NoSuchElementException
- removeLast();
- pollFirst();获取链表中的第一个元素,但是会删除链表中的第一个元素。如果链表为空,返回 null。
- pollLast();
List<E> 接口简明的更多相关文章
- Map 接口简明
Map 接口并没有继承Collection接口 HashMap : 哈希表数据结构,是线程不同步的,快速.允许存储 null 键,null 值.替代了 Hashtable. LinkedHashMap ...
- Set<E> 接口简明
java. util. Set 接口 Set 接口中的方法和 Collection 中方法一致的.Set 接口取出方式只有一种, 迭代器 . HashSet : 底层数据结构是哈希表,线程 是不同步的 ...
- PC游戏编程(入门篇)(前言写的很不错)
PC游戏编程(入门篇) 第一章 基石 1. 1 BOSS登场--GAF简介 第二章 2D图形程式初体验 2.l 饮水思源--第一个"游戏"程式 2.2 知其所以然一一2D图形学基础 ...
- Golang 微框架 Gin 简介
框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了.成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应 ...
- RESTful 接口实现简明指南
REST 简介 REST 是一个术语的缩写,REpresentational State Transfer,中文直译「表征状态转移」,这是个很拗口的词.我的建议是先不要强行理解,直接看怎么做,等对实施 ...
- Java8简明学习之接口默认方法
接口中有默认方法实现Java8允许我们使用default关键字,为接口声明添加非抽象的方法实现. public interface DefaultInterFace { int plus(int x, ...
- Spark如何使用Akka实现进程、节点通信的简明介绍
<深入理解Spark:核心思想与源码分析>一书前言的内容请看链接<深入理解SPARK:核心思想与源码分析>一书正式出版上市 <深入理解Spark:核心思想与源码分析> ...
- 微信js SDK接口
微信JS-SDK说明文档 http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 一.微信登录功能 在进行微信OAut ...
- grootjs 简明教程
grootJs简明教程 mvvm框架也是解决的一类问题,在某些时候会提高生产效率: 经过接近一个月的努力,grootJs测试版终于发布了 grootJs是一个mvvm的框架,名字取 grass 和ro ...
随机推荐
- AngularJS复习------表单验证
在AngularJS中能够将HTML5表单验证功能同自己的验证指令结合起来使用,这里介绍使用的核心功能. 使用表单验证,首先要确保表单的每个控件都有name属性 如果想要屏蔽浏览器对表单的默认验证行为 ...
- 【BootStrap】 概述 & CSS
BootStrap BootStrap由Twitter开发,基于HTML,CSS,JS,是一套前端框架.它的特点是对浏览器良好的支持(目前市面上所有流行浏览器都可以),兼容移动设备,以及响应式设计(响 ...
- 测试&标准说明文章
这是一篇测试用文章,主要想想怎么把纸质本上的习惯沿袭到博客上来 #coding=utf-8 import sys def main(): print "this is some code f ...
- Jenkins + Docker 持续集成
Jenkins介绍 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. 安装部署Jenkins ...
- 分享两个提高效率的AndroidStudio小技巧
这次分享两个 Android Studio 的小技巧,能够有效提高效率和减少犯错,尤其是在团队协作开发中. Getter 模板修改--自动处理 null 判断 格式化代码自动整理方法位置--广度 or ...
- 【Spring源码深度解析学习系列】容器的基础XmlBeanFactory(二)
一.配置文件封装 Spring的配置文件读取是通过ClassPathResource进行封装的,如new ClassPathResource("test.xml"),那么Class ...
- 『备注』&#x; 格式 的编码转换
在很多 网站(或者很多 WebService), 我们总能看到 Ӓ &#A22A; 这种格式 的编码. 如何将这种编码 转换成 实际文本,C#代码如下: //各种 幺蛾子网页图标 请参见: ...
- 福州大学软工1715|W班-启航
新的一学期即将开启,而在仅剩的几天的时间内,我将为接下来的软工实践助教事宜忙碌起来.要学习的东西很多,要关注的东西也很多. 虽然我现在还在茫然阶段,虽然我对<构建之法>还不太熟悉,但是,我 ...
- Software Engineering-HW1
title: Software Engineering-HW1 date: 2017-09-13 15:41:13 tags: HW --- 阅读随笔 在<徐宥:掉进读书的兔子洞>里面, ...
- 前端之bootstrap模态框
简介:模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. Modal简介 Modal实现弹出表单 M ...