【Java】【数据结构】List

List

1、实现

Java List 实现: ArrayList、LinkedList。
1、ArrayList

  • 数组实现,可以随机访问,查找快。
  • 物理连续性,增删中间元素需移动后续元素。指定 index 添加数据,就需要拷贝 index 后面的数据后移一位。
  • 动态数组,初始化时是一个空数组,在第一次 add 时设置初始容量为 10,每次扩容都增加到原来的 1.5 倍。
    2、LinkedList
  • 链表实现,查找元素需从头访问
  • 增删快

2、初始化

    public static void initList() {
        List<Integer> list = new ArrayList<Integer>(){};
        list.add(2);
        list.add(3);
        // 另一写法
        List<Integer> list2 = new ArrayList<Integer>(){{add(5);add(6);}};
        // Java9支持,List对象不可修改
        // List<Integer> list3 = List.of(23, 44, 15);
    }

3、增删

    public static void modifyList() {
        List<String> list = new ArrayList<>();
        list.add("ok");
        list.add("no");
        list.add("yes");
        System.out.println(list); // [ok, no, yes]
        // 通过下表移除
        list.remove(1);
        System.out.println(list); // [ok, yes]
        // 通过对象移除
        list.remove("ok"); // [yes]
        System.out.println(list);
    }

4、打印

    public static void printList() {
        List<Integer> list = new ArrayList<Integer>(){};
        // 直接打印
        System.out.println(list);
        // 转成Array后打印
        System.out.println(Arrays.toString(list.toArray()));
        // forEach方法
        list.forEach(System.out::println);

        // 重写class的toString()方法
        Student student = new Student(2);
        Student student2 = new Student(3);
        List<Student> listStudent = new ArrayList<>();
        listStudent.add(student);
        listStudent.add(student2);
        System.out.println(listStudent);
    }

5、遍历

    public static void getList(List<?> list) {
        // 迭代器,通过Iterator遍历List永远是最高效的方式
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
    
    public static class Student{
        private int age;
        public Student(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "age = " + age;
        }
    }

6、排序

    public static void sortList(List<String> list) {
        list.add(0, "a");
        list.add(1, "cc");
        list.add(0, "aa");
        // Collections排序方法,默认升序排序
        Collections.sort(list);
        System.out.println(list); // a aa  cc

        // 降序排序:重写Collections的sort方法
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });
        System.out.println(list); // cc aa a

        // 降序排序:Collections的reverse方法
        Collections.reverse(list);
        System.out.println(list); // a aa  cc

        List<Integer> intList = new ArrayList<Integer>(){};
        intList.add(2);
        intList.add(3);
        Collections.sort(intList, new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return o2 - o1;
            }
        });
        System.out.println(intList); // [3, 2]
    }

    public static void sortObjectList() {
        List<Human> list = new ArrayList<>();
        list.add(new Human("F", 4, "fff"));
        list.add(new Human("A", 12, "aaa"));
        list.add(new Human("N", 1, "nnn"));

        Collections.sort(list, new Comparator<Human>() {
            @Override
            public int compare(Human o1, Human o2) {
                // 以升序排序,返回1标识交换位置,返回-1表示顺序不变,返回0表示相等
                int ret = o1.getAge() - o2.getAge();
                if (ret > 0) {
                    return 1;
                } else if (ret < 0) {
                    return -1;
                } else {
                    return 0;
                }
            }
        });
        System.out.println(list);
    }

    static class Human {
        private String name;
        private int age;
        private String city;
        public Human(String name, int age, String city){
            this.name = name;
            this.age = age;
            this.city = city;
        }

        public int getAge() {
            return age;
        }

        @Override
        public String toString() {
            return "Human{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", city='" + city + '\'' +
                    '}';
        }
    }

7、完整代码

import java.util.*;

public class ListNotes {
    public static void main() {
        initList(); // 初始化
        modifyList(); // 增删
        printList(); // 打印
        getList(new ArrayList<String>()); // 遍历
        sortList(new ArrayList<>()); // 排序
        sortObjectList(); // 对象排序
    }

    public static void initList() {
        List<Integer> list = new ArrayList<Integer>(){};
        list.add(2);
        list.add(3);
        // 另一写法
        List<Integer> list2 = new ArrayList<Integer>(){{add(5);add(6);}};
        // Java9支持,List对象不可修改
        // List<Integer> list3 = List.of(23, 44, 15);
    }

    public static void modifyList() {
        List<String> list = new ArrayList<>();
        list.add("ok");
        list.add("no");
        list.add("yes");
        System.out.println(list); // [ok, no, yes]
        // 通过下表移除
        list.remove(1);
        System.out.println(list); // [ok, yes]
        // 通过对象移除
        list.remove("ok"); // [yes]
        System.out.println(list);
    }

    public static void printList() {
        List<Integer> list = new ArrayList<Integer>(){};
        // 直接打印
        System.out.println(list);
        // 转成Array后打印
        System.out.println(Arrays.toString(list.toArray()));
        // forEach方法
        list.forEach(System.out::println);

        // 重写class的toString()方法
        Student student = new Student(2);
        Student student2 = new Student(3);
        List<Student> listStudent = new ArrayList<>();
        listStudent.add(student);
        listStudent.add(student2);
        System.out.println(listStudent);
    }

    public static class Student{
        private int age;
        public Student(int age) {
            this.age = age;
        }
        @Override
        public String toString() {
            return "age = " + age;
        }
    }

    public static void getList(List<?> list) {
        // 迭代器,通过Iterator遍历List永远是最高效的方式
        Iterator<?> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }

    public static void sortList(List<String> list) {
        list.add(0, "a");
        list.add(1, "cc");
        list.add(0, "aa");
        // Collections排序方法,默认升序排序
        Collections.sort(list);   // a aa  cc
        System.out.println(list);

        // 降序排序:重写Collections的sort方法
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return o2.compareTo(o1);
            }
        });  // cc aa a
        System.out.println(list);

        // 降序排序:Collections的reverse方法
        Collections.reverse(list);  // a aa  cc
        System.out.println(list);
    }

    public static void sortObjectList() {
        List<Human> list = new ArrayList<>();
        list.add(new Human("F", 4, "fff"));
        list.add(new Human("A", 12, "aaa"));
        list.add(new Human("N", 1, "nnn"));

        Collections.sort(list, new Comparator<Human>() {
            @Override
            public int compare(Human o1, Human o2) {
                // 以升序排序,返回1标识交换位置,返回-1表示顺序不变,返回0表示相等
                int ret = o1.getAge() - o2.getAge();
                if (ret > 0) {
                    return 1;
                } else if (ret < 0) {
                    return -1;
                } else {
                    return 0;
                }
            }
        });
        System.out.println(list);
    }

    static class Human {
        private String name;
        private int age;
        private String city;
        public Human(String name, int age, String city){
            this.name = name;
            this.age = age;
            this.city = city;
        }

        public int getAge() {
            return age;
        }

        @Override
        public String toString() {
            return "Human{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    ", city='" + city + '\'' +
                    '}';
        }
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值