集合——List集合
Posted blogforvi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集合——List集合相关的知识,希望对你有一定的参考价值。
List集合
List集合代表一个元素有序,可重复的集合,集合中每个元素都有其对应的顺序索引.List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1.
1.List接口和ListIterator接口
List作为Collection的子接口,当然可以使用Collection接口里的全部方法,而且由于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处所有集合元素组成的子集合。
void replaceAll(UnaryOperator operator):根据operator指定的计算规则重新设置List集合的所有元素。
void sort(Comparator c):根据Comparator参数对List集合的元素排序。
import java.util.*; public class ListTest { public static void main(String[] args) { List<String> books = new ArrayList<String>(); //向books集合中添加三个元素 books.add(new String("龙珠")); books.add(new String("犬夜叉")); books.add(new String("网球王子")); books.add(null); System.out.println(books); //将新字符串对象插入在第二个位置 books.add(1, new String("海贼王")); for(int i = 0; i < books.size(); i++){ System.out.println(books.get(i)); } //删除第三个元素 books.remove(2); System.out.println(books); //判断指定元素在List集合中的位置:输出1,表明位于第二位 System.out.println(books.indexOf(new String("海贼王"))); //将第二个元素替换成新的字符串对象 books.set(1,new String("海贼王")); System.out.println(books); //将books集合的第二个元素(包括)到第三个元素(不包括)截取成子集合 System.out.println(books.subList(1,2)); } }
测试结果:
注意:List判断两个对象是否相等的标准,只要两个对象通过equals()方法返回true即可。
import java.util.*; class A{ public boolean equals(Object obj) { return true; } } public class ListTest2{ public static void main(String[] args) { List<Object> list = new ArrayList<Object>(); list.add(new String("龙珠")); list.add(new String("棋魂")); list.add(new String("游戏王")); System.out.println(list); //list删除一个A对象,将list中的第一个元素删除 list.remove(new A()); System.out.println(list); //将再次删除第一个元素 list.remove(new A()); System.out.println(list); } }
测试结果:
通过上面这段代码可以看出,List集合是通过equals()方法判断两个元素是否相同。
Java8为List集合增加了sort()和repalceAll()两个常用的默认方法,其中sort()方法需要一个Comparator对象来控制元素排序,程序可使用Lambda表达式来作为参数;而replaceAll()方法则需要一个UnaryOperator来替换所有集合元素,UnaryOperator也是一个函数式接口,因此程序也可使用Lambda表达式作为参数。
import java.util.*; public class ListTest3{ public static void main(String[] args) { List<Object> list = new ArrayList<Object>(); list.add("死神"); list.add("海贼王"); list.add("灌篮高手"); list.add("进击的巨人"); list.add("钢之炼金术师"); list.add("棋魂"); //将list按字符串长度顺序排序 list.sort((o1,o2) -> ( ((String)o1).length() - ((String)o2).length())); System.out.println(list); //将list集合中的字符串替换成对应的字符串长度 list.replaceAll(ele -> (((String)ele).length())); System.out.println(list); } }
测试结果:
上面程序对List集合进行了排序,传给sort()方法的Lambda表达式指定的排序规则是:字符串长度越长,字符串越大。
与Set只提供了一个iterator()方法不同,List还额外提供了一个listIterator()方法,该方法返回一个ListIterator对象,ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator接口在Iterator接口基础上增加了如下方法:
boolean hasPrevious():返回该迭代器关联的集合是否还有上一个元素
Object previous():返回该迭代器的上一个元素。
void add(Object o):在指定位置插入一个元素。
import java.util.*; public class ListIteratorTest{ public static void main(String[] args) { String[] arr = {"龙珠","犬夜叉","游戏王","海贼王","死神","灌篮高手"}; List<String> list = new ArrayList<String>(); for(int i = 0; i < arr.length; i++) { list.add(arr[i]); } ListIterator lit = list.listIterator(); while(lit.hasNext()) { System.out.println(lit.next()); } //开始反向遍历 System.out.println("==================="); while(lit.hasPrevious()) { System.out.println(lit.previous()); } } }
测试结果:
以上是关于集合——List集合的主要内容,如果未能解决你的问题,请参考以下文章
FlutterListView 列表 ( List 集合的 map 方法说明 | 垂直列表 | 水平列表 | 代码示例 )