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脚本进行数据表创建和数据初始化: -- ------------------------ ...
随机推荐
- gradle配置国内阿里云镜像
对单个项目生效,在项目中的build.gradle修改内容 buildscript { repositories { maven { url 'http://maven.aliyun.com/nexu ...
- flask项目中设置logo
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}&qu ...
- STM32CubeMX FreeRTOS no definition for "osThreadGetState" 解决办法
用STM32CubuMX默认加入的FreeRTOS默认配置eTaskGetState是禁止的 把该功能设为Enabled编译就不会出错了 IAR的编译器要勾选Allow VLA
- easyuUI实现客户分页显示逻辑分析
页面 前端 前端easyUI,自带分页功能,添加pagination属性 前端会传给后端两个属性: page:当前页码 rows:每页显示记录数 后端 接收page和rows参数 根据参数分页查询 获 ...
- C++ GUI Qt4学习笔记03
C++ GUI Qt4学习笔记03 qtc++spreadsheet文档工具resources 本章介绍创建Spreadsheet应用程序的主窗口 1.子类化QMainWindow 通过子类化QM ...
- 对15号夏壹队的TD信息通使用体验
对夏壹队的APP的用户使用体验:首先下载的时候看到这个APP的大小是6M多点不算很大感觉还不错,但是占内存不大也说明了一个问题,它不会有很多的功能. 图标是一个蜜蜂,打开后会有一个登陆界面,一开始没有 ...
- osi7层模型及线程和进程
端口的作用: 在同一台电脑上,为了让不同 的程序分离开来! http:网站默认端口是80 https:网站默认端口是443 osi七层模型: 1.应用层:软件 2.表示层:接收数据 3.会话:保持登录 ...
- js原生高逼格插件
如何定义一个高逼格的原生JS插件 作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高 ...
- spring,配置文件applictionContext.xml,Mybatis mybatis.xml,springMVC spring整合springMVC mybatis
- android 8.0 适配(总结)
android 8.0 对应的 sdk 版本 26 1. 通知栏 Android 8.0 引入了通知渠道,其允许您为要显示的每种通知类型创建用户可自定义的渠道.用户界面将通知渠道称之为通知类别. 针 ...