zoukankan      html  css  js  c++  java
  • 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方法添加元素,直接抛出异常。
     
     
  • 相关阅读:
    C#异步编程
    CentOS7下zip解压和unzip压缩文件
    mongodb 按配置文件mongodb.conf启动
    Maven镜像更换为阿里云中央仓库
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    mysql启动报错cannot allocate memory for the buffer pool处理
    Spring boot Unable to start embedded Tomcat报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getVirtualServerName()
    免费桌面视频录像工具OBS的简单操作介绍
    CentOS7下zip解压和unzip压缩文件
    ElasticSearch客户端注解使用介绍
  • 原文地址:https://www.cnblogs.com/zhangmingda/p/14640789.html
Copyright © 2011-2022 走看看