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   zhangmingda  阅读(279)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2020-04-10 七层LB-NGINX 客户端获取协议Proxy Protocol介绍
2019-04-10 useradd与adduser的区别
2019-04-10 drop、truncate和delete的区别
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示