序章
List集合是一个元素有序且可以重复的集合,每个元素对应一个索引,类似于数组的方式,默认是按照添加顺序,所以第一次添加元素索引为0,第二次为1。。。。
一 Java8改进的List接口和ListIterator接口
List作为Collection接口的子接口,可以使用Collection接口的所有方法,同时由于为有序集合,所以增加了一些根据索引来操作集合元素的方法。
新增方法如下:
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增加了根据索引来插入,替换和删除集合元素的方 法。除此之外,Java8还增加了如下两个默认方法
void replaceAll(UnaryOperator operator):根据operator指定的计算规则重新设置List集合的所有元素。
void sort(Comparatorc):根据Comparator参数对List集合的元素排序。
代码示例
package com.j1803.listTest; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ListTest { public static void main(String[] args) { List book=new ArrayList(); Set set=new HashSet(); set.add(78); set.add(new String("DDDD")); set.add("EEEE"); set.add("BBBB"); book.add(new String("AAAA")); book.add(new String("BBBB")); book.add(new String("CCCC")); //book.add(5,new String("DDDD"));报错java.lang.IndexOutOfBoundsException: Index: 5, Size: 3 book.add(3,new String("DDDD")); System.out.println(book); book.addAll(set); System.out.println(book); System.out.println(book.get(2)); System.out.println(book.indexOf("CCCC")); System.out.println(book.indexOf("BBBB")); System.out.println(book.lastIndexOf("BBBB")); System.out.println(book.remove("BBBB")); System.out.println(book); System.out.println(book.remove(1)); System.out.println(book); book.set(0, new String("Hello World")); System.out.println(book); System.out.println(book.subList(0, 3)); } } [AAAA, BBBB, CCCC, DDDD] [AAAA, BBBB, CCCC, DDDD, EEEE, 78, DDDD, BBBB] CCCC 2 1 7 true [AAAA, CCCC, DDDD, EEEE, 78, DDDD, BBBB] CCCC [AAAA, DDDD, EEEE, 78, DDDD, BBBB] [Hello World, DDDD, EEEE, 78, DDDD, BBBB] [Hello World, DDDD, EEEE]
List通过equals方法来判断两个对象是否相等。如果equals返回为true则相等,否则则不想等。
代码示例
package com.j1803.listTest; import java.util.ArrayList; import java.util.List; public class ListTest2 { public static void main(String[] args) { List list=new ArrayList(); list.add("AA"); list.add("BB"); list.add("CC"); System.out.println(list); list.remove(new A()); System.out.println(list); list.remove(new A()); System.out.println(list); } } class A{ public boolean equals(Object obj) { return true; } } [AA, BB, CC] [BB, CC] [CC]