数组和集合(二):List集合的使用总结

1、概述

  • · 继承collection接口,List表明一个元素有序、且可重复(包括null)的集合,集合中的每一个元素都有其对应的顺序索引
  • · List默认按元素的添加顺序设置元素的索引
  • · 提供了一些经过索引来操做集合中指定位置元素的方法

2、List实现类

1. ArrayList数组

  • · 基于动态数组实现,初始容量10,添加一个元素时,若是超出当前数组的容量,就扩容1.5倍,
  • · 插入、删除元素时,需移动元素,效率较低;查找元素效率高
  • · 非线程安全

2. LinkedList安全

  • · 是个双向链表,能够被看成栈、队列或双端队列来使用
  • · 插入、删除元素时,效率较高;查找元素要遍历链表,效率较低
  • · 非线程安全

3. Vector:线程安全的动态数组,效率低(已过期,不建议使用)spa

4. Stack:继承Vector,基于动态数组实现的一个线程安全的栈(后进先出)线程

 

3、遍历List的四种方法

初始化数据:code

List<String> list = new ArrayList<String>(); list.add("aaa"); list.add("bbb"); list.add("ccc");

 

方法一:foreach循环遍历对象

for(String attribute : list) { System.out.println(attribute); }

 

方法二:for循环遍历blog

for(int i = 0 ; i < list.size() ; i++) { System.out.println(list.get(i)); }

 

方法三:Iterator(集合类的通用遍历方式)排序

Iterator it = list.iterator(); while(it.hasNext()) { System.ou.println(it.next); }

 

方法四:ListIterator(使用同Iterator)继承

  • · ListIterator接口继承了Iterator接口,提供了专门操做List的方法
ListIterator<String> listIterator = list.listIterator(); while (listIterator.hasNext()){ System.out.println(listIterator.next()); }

 

4、ListIterator与Iterator的区别

  1. 使用范围不一样,Iterator能够应用于全部的集合,Set、List和Map和这些集合的子类型。而ListIterator只能用于List及其子类型。
  2. ListIterator有add方法,能够向List中添加对象,而Iterator不能。
  3. ListIterator和Iterator都有hasNext()和next()方法,能够实现顺序向后遍历,可是ListIterator有hasPrevious()和previous()方法,能够实现逆向(顺序向前)遍历。Iterator不能够。
  4. ListIterator能够定位当前索引的位置,nextIndex()和previousIndex()能够实现。Iterator没有此功能。
  5. 均可实现删除操做,可是ListIterator能够实现对象的修改,set()方法能够实现。Iterator仅能遍历,不能修改。

 5、使用List的总结

  1. Arrays.asList(...)方法返回一个只读的List对象,不可修改、删除,是Arrays类中的一个内部类
  2. List集合按属性排序:使用Collections.sort()方法,自定义一个比较器
相关文章
相关标签/搜索