java 数据类型:集合接口Collection之List~ArrayList:remove移除;replaceAll改变原有值;sort排序;迭代器listIterator();
什么是List集合:
特点:
- 元素有序可重复的集合。
- 集合中每个元素都有其对应的顺序索引。
- List集合默认按元素的添加顺序设置元素的索引,索引从0开始。
List接口的常用方法:
List可以使用Collection的所有方法。但是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集合中第一次出现的位置
- 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集合中的所有元素(java8+)。
- void sort(Comparator c) : 根据Comparator参数对List集合的元素排序。
remove移除
移除指定下标或相同对象(对象的equal方法判断)的第一个元素;有限精确匹配,传入数字优先判断下标
原理:List在remove的时候,就是调用equals方法来判断两个元素是否相等的,并且是调用remove方法参数的equals:
import java.util.ArrayList; /** * @ClassName ArrayListRemoveExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/10. */ public class ArrayListRemoveExample { private static class TestObj{ @Override public boolean equals(Object obj) { return true; } } public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add("张三"); arrayList.add("李四"); arrayList.add("王五"); arrayList.add("赵六"); System.out.println(arrayList); arrayList.remove(1); //精确匹配原则,数字优先匹配下标 arrayList.remove("王五"); //其次匹配对象 System.out.println(arrayList); //测试移除原理,是调用需要移除对象的equal方法判断是否和已有元素相等 arrayList.remove(new TestObj()); System.out.println(arrayList); //张三被移除 } }
replaceAll处理数据并改变原有值
import java.util.ArrayList; import java.util.function.UnaryOperator; /** * @ClassName ArrayListReplaceAllExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/10. */ public class ArrayListReplaceAllExample { public static void main(String[] args) { ArrayList arrayList = new ArrayList(); arrayList.add(1); arrayList.add(2); arrayList.add(3); //数据处理 arrayList.replaceAll( o -> { int tmpNum = (int)o; return tmpNum * tmpNum; }); System.out.println(arrayList); //[1, 4, 9] } }
sort对ArrayList集合内元素重新排序
import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.NavigableMap; /** * @ClassName ArrayListSortExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/10. */ public class ArrayListSortExample { public static void main(String[] args) { List nums = new ArrayList(); nums.add(3); nums.add(2); nums.add(4); nums.add(1); System.out.println(nums); //[3, 2, 4, 1] //自定义排序 nums.sort(new Comparator() { @Override public int compare(Object o, Object t1) { return (int)o - (int)t1; } }); System.out.println(nums); //[1, 2, 3, 4] nums.sort((o1, o2) -> (int)o2 - (int)o1); //lambda方式 System.out.println(nums); //[4, 3, 2, 1] } }
List迭代器listIterator():
除了继承Collection接口的iterator()方法,List还提供了一个listIterator()方法,该方法返回一个ListIterator()对象。ListIterator接口继承了Iterator接口,提供了专门操作List的方法。ListIterator在Iterator的基础上增加了三个方法:
- boolean hasPrevious() : 返回迭代器关联的结合是否还有上一个元素
- boolean previous(): 返回迭代器的上一个元素
- void add(Object o): 在当前游标所在位置插入一个元素
import java.util.ArrayList; import java.util.ListIterator; /** * @ClassName ArrayListListIteratorExample * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/4/10. */ public class ArrayListListIteratorExample { public static void main(String[] args) { ArrayList persons = new ArrayList(); persons.add("张三"); persons.add("李四"); persons.add("王五"); ListIterator listIteratorPersons = persons.listIterator(); listIteratorPersons.add("赵六"); //游标位置0 System.out.println(persons);//[赵六, 张三, 李四, 王五] while (listIteratorPersons.hasNext()){ System.out.println(listIteratorPersons.next()); } listIteratorPersons.add("赵六");//游标位置: 对象.length-1 System.out.println(persons); //[赵六, 张三, 李四, 王五, 赵六] } }
Arrays.ArrayList: 长度不可变
我们还可以用Arrays.asList来创建一个List
List persons = Arrays.asList("李一桐", "刘亦菲", "鞠婧祎"); persons.forEach(person -> System.out.println(person)); persons.add("易烊千玺"); //这行代码直接报错
这个List是一个ArrayList,但是我们要注意,这个是Arrays类里面一个叫做ArrayList的内部类,不是我们前面学的java.util包下面的ArrayList。这个List长度是固定不可变的。如果我们调用add方法添加元素,直接抛出异常。
posted on 2021-04-10 14:27 zhangmingda 阅读(260) 评论(0) 编辑 收藏 举报