Java集合List的方法及遍历方式举例
作者:举一个梨子zz
List集合的特点
有序:存和取的元素顺序一致
有索引:可以通过索引操作元素
可重复:存储的元素可以重复
List集合的方法
Collection的方法List都继承了,可以使用Collection中的方法
此外,List集合因为有索引,所以多了很多索引操作的方法。
方法名称 | 说明 |
void add (int index,E element) | 在此集合中的指定位置插入指定的元素 |
E remove (int index) | 删除指定索引处的元素,返回被删除的元素 |
E set (int index,E element) | 修改指定索引处的元素,返回被修改的元素 |
E get (int index) | 返回指定索引处的元素 |
注意:
List集合中的上述方法存在重载现象,一个是继承Collection的需要提供的参数是给定的具体对象,另一个是List自己的需要提供的参数是索引,所以出现以下问题。
例如:remove(1),到底是删除泛型是<Integer>集合中的元素1,还是删除1索引上的元素
答:优先调用形参和实参类型一致的方法
代码演示:
import java.util.ArrayList; import java.util.List; public class Test5 { public static void main(String[] args) { List<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); System.out.println(list);//[1, 2, 3] //1是int类型,所以调用形参是int类型的删除指定索引处的元素 list.remove(1); System.out.println(list);//[1, 3] //将1变为Integer类型 Integer i = Integer.valueOf(1); //i变量中的1是引用数据类型,所以调用形参是Object类型的删除指定元素 list.remove(i); System.out.println(list);//[3] } }
List集合的遍历方式
除了与Collection相同的迭代器遍历,增强for遍历,lambda遍历外,还有普通for遍历,列表迭代器遍历。
普通for遍历
代码演示
public class Test6 { public static void main(String[] args) { //普通for遍历 List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); for (int i = 0; i < list.size(); i++) { String str = list.get(i); System.out.println(str); } //aaa //bbb //ccc } }
列表迭代器遍历
说明
列表迭代器ListIterator继承自迭代器Iterator,
获取列表迭代器
方法名称 | 说明 |
ListIterator<E> listIterator () | 返回迭代器对象默认指向当前集合的0索引 |
常用方法
方法名 | 说明 |
boolean hasNext () | 正向遍历列表 判断当前位置是否有元素, 有元素返回true,没有元素返回false |
E next () | 获取当前位置的元素 并将迭代器对象移向下一个位置。 |
boolean hasPrevious () | 逆向遍历列表 判断当前位置是否有元素, 有元素返回true,没有元素返回false(了解) |
E previous () | 获取当前位置的元素 并将迭代器对象移向上一个位置。(了解) |
vold add (E e) | 将指定的元素插入列表 |
void remove () | 删除获取到的元素 |
代码演示
import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class Test6 { public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("aaa"); list.add("bbb"); list.add("ccc"); //遍历打印 ListIterator<String> lit1 = list.listIterator(); while (lit1.hasNext()) { String str = lit1.next(); System.out.println(str); } //aaa //bbb //ccc //遍历添加:在aaa的后面添加ddd ListIterator<String> lit2 = list.listIterator(); while (lit2.hasNext()) { String s = lit2.next(); if (s.equals("aaa")) { lit2.add("ddd"); } } System.out.println(list);//[aaa, ddd, bbb, ccc] } }
ArrayList集合底层原理
底层数据结构是数组,查询快,增删慢
1.利用空参创建的集合,在底层创建一个默认长度为0的数组
2.添加第一个元素时,底层会创建一个新的长度为10的数组
3.存满时,会扩容1.5倍
4.如果一次添加多个元素,1.5倍还放不下,则新创建数组的长度以实际为准
LinkedList集合底层原理
底层数据结构是双向链表,查询慢,增删快,但是如果操作的是首尾元素,速度也是极快的
因此LinkedList本身多了很多直接操作首尾元素的特有API,所以除了继承自Collection和List中的方法,还有以下方法
特有方法 | 说明 |
public void addFirst(E e) | 在该列表开头插入指定的元素 |
public void addLast(E e) | 将指定的元素追加到此列表的末尾 |
public E getFirst() | 返回此列表中的第一个元素 |
public E getLast() | 返回此列表中的最后一个元素 |
public E removeFirst() | 从此列表中删除并返回第一个元素 |
public E removeLast() | 从此列表中删除并返回最后一个元素 |
总结
到此这篇关于Java集合List的方法及遍历方式的文章就介绍到这了,更多相关Java集合List内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!