Java-集合第三篇List集合
1、List集合
有序可重复集合,集合中的每个元素都有其对应的顺序索引。

2、List相对于Collection额外提供的方法:
1》void add(int index,Object element):将元素element插入到List集合的index处。
2》boolean assAll(int index,Collection c):将集合c所包含的所有元素都插入到List集合的index处。
3》Object get(int index):返回集合index索引处的元素。
4》int indexOf(Object o):返回对象o在集合List中第一次出现的位置索引。
5》int lastIndex(Object o):返回对象o在List集合中最后一次出现的位置索引。
6》Object remove(int index):删除并返回index索引处的元素。
7》Object set(int index,Object element):将index索引处的元素替换成element对象,返回被替换的旧元素。
8》List subList(int fromIndex,int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合。
与Set相比,List增加了根据索引来插入、替换、删除集合元素的方法。Java 8还为List增加了两个默认方法:
9》void replaceAll(UnaryOperator operator):根据operator指定的计算规则重新设置List集合的所有元素。
10》void sort(Comparator c):根据Comparator参数对List集合的元素排序。
3、List判断两个对象相等只要通过equals()方法比较true即可。
4、当调用List的set(int index,Object element)方法来改变List集合指定索引处的元素时,指定的索引必须是List集合有效的索引。
即set(int index,Object element)方法不会改变List集合的长度。
5、ListIterator
List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象。ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法:
1》boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素。
2》Object previous():返回该迭代器的上一个元素。
3》void add(Object o):在指定位置插入一个元素。
即ListIterator增加了向前迭代的功能(Iterator只有向后迭代),ListIterator还可以通过add()方法向List集合添加元素(Iterator只能删除元素)。
6、ArrayList和Vector实现
(1)ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。ArrayList或Vector通过initialCapacity参数来设置该数组的长度,当向ArrayList或Vector中添加元素超出了该数组的长度时,它们的initialCapacity会自动增加。一般不需理会initialCapacity,当需要增加大量的元素时,可以使用ensureCapacity(int minCapacity)方法一次性曾增加initialCapacity。还可以减少重分配的次数,从而提高性能。
AarrayList和Vector提供了如下两个方法重新分配Object[]数组
1》void ensureCapacity(int minCapacity):将ArrayList或Vector集合的Object[]数组长度增加大于或等于minCapacity值。
2》void trimToSize():调整ArrayList或Vector集合中Object[]数组长度为当前元素的个数。调用该方法可以减少集合对象占用的存储空间。
(2)ArrayList作为List的主要实现类。Vector属于在集合框架出来之前的产物,缺点比较多,不推荐使用。
(3)ArrayList与Vector一个显著区别:ArrayList不是线程安全的,但Vectory则是线程安全的。ArrayList可以通过Collections工具类的包装编程线程安全的。
(4)Vector提供了一个Stack子类(也是线程安全的),用于模拟“栈”这种数据结构(后进先出)。进栈出栈都是Object,因此从栈中取元素后必须进行类型转换,Stack提供的方法有:
1》Object peek():返回“栈”的第一个元素,但并不将该元素“pop”出栈。
2》Object pop():返回“栈”的第一个元素,并将该元素“pop”出栈。
3》void push(Object item):将一个元素“push”进栈,最后一个进栈的元素总是位于栈顶。
Stack同样存在性能问题,可以替代的选择是ArrayDeque。ArrayDeque也是List的实现类,ArrayDeque既实现了List接口,也实现了Deque接口,由于实现了Deque接口,因此可以作为栈来使用。而且ArrayDeque底层也是基于数组实现的,因此性能也很好。
7、固定长度的List
操作数组的工具类Arrays,提供了asList(Object... a)方法,该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。
Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合中的元素,不可增加、删除该集合中的元素。
Java-集合第三篇List集合的更多相关文章
- Java【第十篇】集合
Java 集合概述 Java 集合就像一种容器,可以把多个对象的引用放入容器中.Java 集合类可以用于存储数量不等的多个对象,还可用于保存具有映射关系的关联数组Java 集合可分为 Set.List ...
- Python学习之路【第三篇】--集合
语法结构: set1.issubset(set2)判断集合set1是否为set2的子集,返回布尔值. ? 1 2 3 4 5 6 s1 = {'Java', 'PHP', 'Python', 'C++ ...
- java核心技术第三篇之JDBC第一篇
01.JDBC_两个重要的概念: 1).什么是数据库驱动程序:由数据库厂商提供,面向某种特定的编程语言所开发的一套访问本数据库的类库. 驱动包一般由两种语言组成,前端是:面向某种特定编程语言的语言:后 ...
- Java系列--第三篇 基于Maven的Android开发CAIO
学习要打好基础,这里用一个项目来学习一下Android的组件,参考网址为这个但不限于这个.有些东西的学习,理解三遍理论还不如一遍操作,所谓理论来自实践,实践是检验真理的唯一标准.所以,虽然看懂了那篇文 ...
- Java 学习 第三篇;面向对象
1:Java的常用包: 核心类在java 包中:扩展类在javax包中 java.lang 系统默认自动导入 包含String Math System Thread等类 java.util 包含了工具 ...
- java基础第三篇
6.Java 中的容器(重点) a.变量:变量是一个容器,它存储的单个值 //int i=3; 1.局部变量:定义在方法中,没有默认值 2.成员变量:定义在类中方法外,这个事物的属性(特征)定义为成员 ...
- Java学习第三篇:类的三大特征,抽象类,接口,final关键字
一.类的三大特征 1.封装性 (1).什么是封装 封装就是把抽象出的数据和对数据的操作封装在一起, 数据被保护在内部, 程序的其他部分只有通过被授权的操作(成员方法), 才能对数据进行操作. (2). ...
- 学习java随笔第三篇:java的基本数据类型
数据类型 一:整型 1.十进制 2.八进制 八进制数是满8进1,包含0~7的8个数字,在整数前面添加一个"0",表示是八进制数. 3.十六进制 十六进制数是满16进1,包含0~9, ...
- 从.Net到Java学习第三篇——spring boot+mybatis+mysql
从.Net到Java学习第一篇——开篇 环境:mysql5.7 新建mysql数据库demo,然后执行如下sql脚本进行数据表创建和数据初始化: -- ------------------------ ...
随机推荐
- Attention Points
Attention Points 数组范围 无向图.树,边表的范围是边数的两倍. 因为最近树的题目做的比较多,一定要注意分清是树还是图,不能冲上去就去开struct Edge{int to,ne,w; ...
- php.ini中时区设置不成功解决方法
一.在php.ini的[Date]中加入 [Date] date_default_timezone_set('UTC'); date.timezone = "Asia/Shanghai&qu ...
- 详述 DB2 分页查询及 Java 实现的示例_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 博主说:有时候,我们需要对数据库中现有的数据进行大量处理操作(例如表中的某个字段需要全部更新等),如果直接使用selec ...
- css3 宽度百分比减去固定宽度 无效问题
一定要注意中间横线的间距才有效果 正确 width: calc(50% - 10px); 错误 width:calc(50%-10px);
- Delphi 2010 secondsBetween Bug
在设置定时任务时,无意之间发现一个BUG, 定时在00:10:00的任务,执行了2次, 百思不得其解, 一调试发现, 00:10:00,00:09:59的secondsBetween结果值是0, 正确 ...
- Linux内核设计与实现 总结笔记(第十四章)块I/O层
一.剖析一个块设备 块设备最小的可寻址单元是扇区. 扇区大小一般是2的整数倍,最常见的是512字节. 因为各种软件的用途不同,所以他们都会用到自己的最小逻辑可寻址单元----块.块只能基于文件系统,是 ...
- #1114-JSP指令
JSP 指令 JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言. 语法格式如下: <%@ directive attribute = "value"%& ...
- python3.0笔记
python文件头 #!/usr/bin/env python # -*- coding: utf- -*- ''' Created on 2017年5月9日 @author: Administrat ...
- [CF46D]Parking Lot
题目:Parking Lot 传送门:http://codeforces.com/problemset/problem/46/D 分析: 做法一: 1)这题和Hotel那题一样,也可以看做是求区间空位 ...
- Java网络编程与NIO详解10:深度解读Tomcat中的NIO模型
本文转自:http://www.sohu.com/a/203838233_827544 本系列文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查看 ht ...