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

最新文章

  1. Linux学习之九--mysql的简单使用
  2. javac命令出现“**.java使用了未经检查或不安全的操作”
  3. HTML控件ID和NAME属性及在CS页面获得.ASPX页面中HTML控件的值
  4. 【转】MySQL5安装的图解(mysql-5.0.27-win32.zip)
  5. C++函数前和函数后加const修饰符区别
  6. js,jquery概念理解
  7. JS范围
  8. ASP.NET下运用Memcached
  9. vector动态数组
  10. 【论文速读】ChengLin_Liu_ICCV2017_Deep_Direct_Regression_for_Multi-Oriented_Scene_Text_Detection
  11. Oracle存储过程中跳出循环的写法
  12. 【CF471E】MUH and Lots and Lots of Segments 扫描线+并查集+线段树+set
  13. Linux内核分析——期中总结
  14. python 基础_字符串9
  15. IntelliJ IDEA 2018.3发布
  16. Oracle性能诊断艺术-读书笔记(范围分区)
  17. 5- 如何把MyEclipse中的web项目导入到Eclipse中运行
  18. 模仿qq列表信息滑动删除效果
  19. 问题:C#将base64转换成二进制图片;结果:c# Base64编码和图片的互相转换代码
  20. C++实现筛选法

热门文章

  1. ubuntu 系统问题总结
  2. 进度对话框QProgressDialog
  3. python-第三方包的安装和升级和卸载
  4. Win10离线安装.NET Framework 3.5的方法补充(附cab格式离线安装包下载) - 转载
  5. 【leetcode】1074. Number of Submatrices That Sum to Target
  6. 适用于填空题出题 的随机算法 PHP
  7. Solr分组查询
  8. JSP 自动刷新
  9. IO重定向与管道
  10. 关于Idea热部署,修改代码不需要重启tomcat