1.概述

List集合代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。

List集合里增加了一些根据索引来操作集合元素的方法。

  • void add(int index, Object element):将元素element插入到List集合的index处。
  • boolean addAll(int index, Collection c):将集合c所包含的所有元素都插入到List集合的index处。
  • Object get(int index):返回集合index索引处的元素。
  • int indexOf(Object o):返回对象o在List集合中第一次出现的位置索引。
  • int lastIndexOf(Object o):返回对象o在List集合中最后一次出现的位置索引。
  • Object remove(int index):删除并返回index索引处的元素。
  • Object set(int index, Object element):将index索引处的元素替换成element对象,返回新元素。
  • List subList(int fromIndex, int toIndex):返回从索引fromIndex(包含)到索引toIndex(不包含)处所有集合元素组成的子集合。

所有的List实现类都可以调用这些方法来操作集合元素。与Set集合相比,List增加了根据索引来插入、替换和删除集合元素的方法。

与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法。

  • boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素。
  • Object previous():返回该迭代器的上一个元素。
  • void add():在指定位置插入一个元素。
  • 拿ListIterator与普通的Iterator进行对比,ListIterator增加了向前迭代的功能(Iterator只能向后迭代),而且ListIterator还可通过add方法向List集合中添加元素(Iterator只能删除元素)。

2. ArrayList 和 Vector类

ArrayList和Vector类都是基于数组实现的List类,所以ArrayList和Vector类封装了一个动态的、允许再分配的Object[]数组。ArrayList或Vector对象使用initialCapacity参数来设置该数组的长度,Object[]数组的长度默认为10。

1. 区别

ArrayList和Vector的显著区别是:ArrayList是线程不安全的,当多个线程访问同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则程序必须手动保证该集合的同步性;但Vector集合则是线程安全的,无须程序保证该集合的同步性。因为Vector是线程安全的,所以Vector的性能比ArrayList的性能要低。

Vector还提供了一个Stack子类,它用于模拟“栈”这种数据结构,“栈”通常是指“后进先出”(LIFO)的容器。最后“push”进栈的元素,将最先被“pop”出栈。与Java中的其他集合一样,进栈出栈的都是Object,因此从栈中取出元素后必须进行类型转换,除非只是使用Object具有的操作。Stack类里提供了如下几个方法。

  • Object peek():返回“栈”的第一个元素,但并不将该元素“pop”出栈。
  • Object pop():返回“栈”的第一个元素,并将该元素“pop”出栈。
  • void push(Object item):将一个元素“push”进栈,最后一个进“栈”的元素总是位于“栈”顶。

2. 固定长度的List

Arrays,该工具类里提供了asList(Object... a)方法,该方法可以把一个数组或指定个数的对象转换成一个List集合,这个List集合既不是ArrayList实现类的实例,也不是Vector实现类的实例,而是Arrays的内部类ArrayList的实例。Arrays.ArrayList是一个固定长度的List集合,程序只能遍历访问该集合里的元素,不可增加、删除该集合里的元素。

集合篇---List集合相关推荐

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

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

  2. 在java中重写方法应遵循规则的包括_Java面试题集合篇二

    Java面试题之Java集合篇二1.遍历一个List有哪些不同的方式? List<String> strList = new ArrayList<>(); //使用for-ea ...

  3. java comparable接口_Java面试题之Java集合篇三

    Java面试题之Java集合篇三1.HashMap和HashTable有何不同? (1)HashMap允许key和value为null,而HashTable不允许. (2)HashTable是同步的, ...

  4. Java集合篇:Map总结

    相关阅读: Java基础篇:hashCode的作用 Java集合篇:HashMap原理详解(JDK1.7及之前的版本) Java集合篇:HashMap原理详解(JDK1.8) Java集合篇:Hash ...

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

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

  6. vantUI所有的弹出层组件(代码、调用、示例) - 集合篇

    文章目录 toast组件 效果图示例: Notify组件(Notify 消息通知.提示) 效果图示例: toast组件 //引入方式 import Vue from 'vue'; import { T ...

  7. 7.请解释泛型list集合的长度为什么动态的?_Java面试题集合篇一

    Java面试题集合篇一1.Java集合框架是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector.Stack.HashTable和Array.随着集合 ...

  8. 【2023】Kotlin教程 第二篇 面向对象与函数式编程 第15章 数据容器——数组和集合 15.2 集合概述

    [2023]Kotlin教程 文章目录 [2023]Kotlin教程 第二篇 面向对象与函数式编程 第15章 数据容器--数组和集合 15.2 集合概述 第二篇 面向对象与函数式编程 第15章 数据容 ...

  9. Java | 开发规范 | 唯品会开发手册(二) | 集合篇

    Rule 1. [推荐]底层数据结构是数组的集合,指定集合初始大小 推荐底层数据结构为数组的集合包括 ArrayList,HashMap,HashSet,ArrayDequeue等. 数组有大小限制, ...

最新文章

  1. 样式集(五)微信朋友圈样式模拟
  2. 移动端点击(click)事件延迟问题的产生与解决方法
  3. 概率统计:第一章 概率论的基本概念
  4. WaveNet原理简单理解
  5. MongoDB 日志文件过大的解决方法
  6. 敏捷开发“松结对编程”实践之三:共同估算篇(大型研发团队,学习型团队,139团队,师徒制度,敏捷设计,估算扑克,扑克牌估算)...
  7. 使用ResourceBundle读取配置文件
  8. PHP Excel导入数据到MySQL数据库
  9. 消息中间件activemq-5.13.0安全验证配置
  10. NextPermutation,寻找下一个全排列
  11. c语言九九乘法表倒三角问题,c语言问题九九乘法表
  12. canvas特效收集
  13. RS232 RS485 串口 电平标准
  14. [云片网] 短信对接
  15. 艾默生首席执行官范大为退休;液化空气将新建生产装置为京东方供应气体 | 美通企业日报...
  16. java打印出 锟斤拷_一段java代码带你认识锟斤拷
  17. CentOS 7 安装osquery监控系统
  18. Javascript学习总结——继承
  19. google GMS
  20. Django 搜索结果分页的实现 以及点击下一页搜索条件丢失可能的原因分析

热门文章

  1. 苹果iOS版手机云便签无法同意用户协议正常使用怎么解决?
  2. 数据分析项目---利用mysql+tableau进行客户流失分析(完结)
  3. 【数据库05】SQL高级处理
  4. Aspose.Words使用教程之如何在文档中添加水印
  5. AutoJs学习-实现文件深度搜索
  6. Codeforces Round #742 (Div. 2) 个人题解
  7. 01-C++基础-第一章-C++简介与C++简史
  8. 为什么学计算机的阳气重,养生:长期使用电脑+不运动的朋友---补阳气【转】...
  9. 电信网关改造无线打印服务器,天翼网关2.0华为HS8145v5改华为界面改双模教程(转别人的)个人总结...
  10. 用java写2468游戏_自己写游戏——东渡教你用Java编写2048完整代码