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集合,程序只能遍历访问该集合中的元素,不可增加、删除该集合中的元素。

转载于:https://www.cnblogs.com/ZeroMZ/p/11382131.html

Java-集合第三篇List集合相关推荐

  1. 步步理解 JAVA 泛型编程 – 共三篇

    http://learning.iteye.com/blog/1295901 FROM: http://unmi.cc/understand-java-generic-3 步步理解 JAVA 泛型编程 ...

  2. java 学习第三篇if判断

    JAVA 判断 单词: if 如果 else 否则 单分支: If(条件) { 代码块 } If是一个判断语句.代码格式如上. If括号的内是表达式.如果表达式值是成立的便执行代码块.之后在执行IF语 ...

  3. java学习记录十五:集合二Collections、Set、Map

    java学习记录十五:集合二 一.Collections工具类 一.解释 二.常用方法 1.打乱集合顺序 2.按照默认规则排序 3.按指定规则排序 4.批量添加元素 二.可变参数 一.解释 二.写法 ...

  4. mysql测试数据库 jmeter_第三篇--Jmeter测试数据库Mysql

    Jmeter模拟100用户访问Mysql数据库 1.将Mysql数据库的驱动[mysql-connector-java-5.1.15-bin.jar]放到jmeter的lib目录下,新建线程组100[ ...

  5. Java集合篇:集合细节:为集合指定初始容量、asList的缺陷、subList的缺陷

    一.为集合指定初始容量: 集合是我们在Java编程中使用非常广泛的,它就像大海,海纳百川,像万能容器,盛装万物,而且这个大海,万能容器还可以无限变大(如果条件允许).当这个海.容器的量变得非常大的时候 ...

  6. 【JAVA基础篇】集合框架

    一.集合框架图 Java集合框架主要包含两种类型的容器,一是集合(Collection),存储元素集合,二是图(Map),存储键(key)-值(value)对.Collection接口下面有两个重要的 ...

  7. dart string 转 bool_Dart语法篇之集合操作符函数与源码分析(三)

    简述: 在上一篇文章中,我们全面地分析了常用集合的使用以及集合部分源码的分析.那么这一节讲点更实用的内容,绝对可以提高你的Flutter开发效率的函数,那就是集合中常用的操作符函数.这次说的内容的比较 ...

  8. Java集合框架篇-63-TreeSet集合练习题

    这篇,我们通过前面学习的TreeSet集合和比较器的知识,我们来做几个练习题.在完成练习过程中,我们重点放在问题分析这个步骤上面,只有分析的思路的正确性,才能写出正确的代码,完成编程练习题. 第一题 ...

  9. Java核心类库篇4——集合

    Java核心类库篇4--集合 1.集合的意义 记录单个数据内容时,则声明一个变量 记录多个类型相同的数据内容时,声明一个一维数组 记录多个类型不同的数据内容时,则创建一个对象 记录多个类型相同的对象数 ...

  10. Java 数组转成集合List三种方法和(数组、集合List、Set相互转换)

    Java 数组转成集合List 三种方法 package com.list;import java.util.ArrayList; import java.util.Arrays; import ja ...

最新文章

  1. OpenAI 研究员最新博客:如何在多GPU上训练真正的大模型?
  2. python如何区分文件类型_python通过文件头判断文件类型
  3. python顺序控制语句_Python学习之 流程控制语句
  4. fragtats中平均临近距离(PROX_MN)的具体解释
  5. springcloud21---Config-bus实现配置自动刷新
  6. CentOS 6.5下安装MySQL后重置root密码方法
  7. 什么是运行时Runtime、运行时库Runtime Library、运行时环境Runtime environment
  8. cockroachdb设计翻译
  9. Android应用保活方案的另类出路,让你应用长生不老,实战案例
  10. 抗滑桩初始弹性系数计算_理正岩土常见问题解答(全)
  11. 计算机电源接口作用,计算机DIY必修课程,电源接口的详细说明
  12. 相机打开显示服务器错误,Win10相机打不开报错“0xa00f4244”怎么解决?
  13. 金蝶EAS-BOS二开详细过程
  14. 武汉市计算机类中专学校排名,武汉中职中专学校一览表 2021最新排名
  15. 敏捷开发与Scrum区别(敏捷开发(Agile)教程)
  16. 贷款行业怎样运用运营商数据找精准客户?
  17. Vue SPA应用微信开发踩坑记录
  18. 难复制薇娅李佳琦,如涵的网红牌何时能在资本市场出奇制胜?
  19. 计算机主题科技小报,《主题电脑小报制作》教案
  20. linux 分区数据恢复

热门文章

  1. 现在手机屏幕为什么都这么大?
  2. fatal error: alsa/asoundlib.h: 没有那个文件或目录
  3. 成功解决:Could not initialize SDL - No available video device (Did you set the DISPLAY variable?)
  4. JNI中访问JList的代码
  5. 泰山游记:为何爬山后大腿前部很酸?
  6. 高铁:繁忙时限制上车补票
  7. ImportError: No module named _internal
  8. X86栈切换,任务切换
  9. 纯php程序无数据,无数据库的详细域名查询程序PHP版(1)_php基础
  10. 用C#代码实现求两条线段的交点并判断各种情况