Java - List

List

接口基本介绍

1、List集合类中的元素是有序的 ,即添加顺序和取出顺序一致,先进先出。List中的元素可重复

2、List集合中的每个元素都有其对应的顺序索引,即支持索引

3、List容器中的元素都对应一个整数型的序号,记载其在容器中的位置,可以根据序号存取容器中的元素。

4、List接口比较常用的实现类有:ArrayList、 LinkedList 和 Vector

List常用方法

List集合中添加了一些根据索引来操作集合元素的方法

Java 复制代码
package com.zhang.test_package.list_;

import java.util.ArrayList;
import java.util.List;

public class List_ {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        // 1、集合是有序的,而且元素可重复
        // add方法:插入 add(int index, Object ele); 指定插入的位置
        list.add("tom");
        list.add("jack");
        list.add("mary");
        list.add("tom");
        list.add(2, "zhang");
        System.out.println(list);

        // addAll:在index位置开始,添加多个元素
        // addAll(int index, Collection c);
        ArrayList list1 = new ArrayList();
        list1.add("张三");
        list1.add("李四");
        list.addAll(2, list1);
        System.out.println(list);

        // List中的每个元素都有对应的顺序索引
        // get 方法,根据下标添加
        System.out.println(list.get(2)); // 张三

        // indexOf(Object o): 参数为Object,返回对应参数的index
        System.out.println(list.indexOf("zhang")); // 4

        // lastIndexOf(Object o):返回参数最后一次在集合中出现的index
        System.out.println(list.lastIndexOf("tom")); // 6

        // remove(int index): 删除指定index的元素,下标超出或者不合理会报错。
        System.out.println(list.remove(0));

        // set(int index, Object element); 设置指定位置的元素,相当于替换
        // 注意下标
        System.out.println(list);
        list.set(0, "三丰");
        System.out.println(list);

        //subList(int fromIndex, int toIndex)
        // 返回从fromIndex到toIndex间的元素,注意左闭右开
        List list2 = list.subList(0, 2);
        System.out.println(list2);

    }
}

练习题

Java 复制代码
package com.zhang.test_package.list_;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;


public class ListExercise {
    public static <T> void sortList(List list, Comparator c) {
        int size = list.size();
        for (int i = 0; i < size - 1; i++) {
            for (int j = 0; j < size - i -1; j++) {
                T left = (T) list.get(j);
                T right = (T) list.get(j + 1);
                if (c.compare(left, right) > 0) {
                    list.set(j, right);
                    list.set(j + 1, left);
                }
            }
        }
    }

    public static void main(String[] args) {
        ArrayList<Book> books = new ArrayList<>();
        books.add(new Book("三国演义", "罗贯中", 10.1));
        books.add(new Book("红楼梦", "曹雪芹", 13.1));
        books.add(new Book("小李飞刀", "古龙", 10.43));

        sortList(books, new Comparator<Book>() {
            @Override
            public int compare(Book o1, Book o2) {
                double price = o1.getPrice() - o2.getPrice();
                if (price>0) {
                    return 1;
                } else if (price==0){
                    return 0;
                } else {
                    return -1;
                }
            }
        });

        for(Book book :books)
            {
                System.out.println(book);
            }
        }
    }

    class Book {
        private String name;
        private double price;
        private String author;

        public Book(String name, String author, double price) {
            this.name = name;
            this.price = price;
            this.author = author;
        }

        @Override
        public String toString() {
            return "名称: " + name + "\t" +
                    "价格: " + price + "\t" +
                    "作者: '" + author + "'";
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public double getPrice() {
            return price;
        }

        public void setPrice(double price) {
            this.price = price;
        }

        public String getAuthor() {
            return author;
        }

        public void setAuthor(String author) {
            this.author = author;
        }
    }
相关推荐
千里码aicood5 分钟前
【springboot+vue】党员党建活动管理平台(源码+文档+调试+基础修改+答疑)
java·数据库·spring boot
Chan169 分钟前
【智能协同云图库】基于统一接口架构构建多维度分析功能、结合 ECharts 可视化与权限校验实现用户 / 管理员图库统计、通过 SQL 优化与流式处理提升数据
java·spring boot·后端·sql·spring·intellij-idea·echarts
先做个垃圾出来………14 分钟前
差分数组(Difference Array)
java·数据结构·算法
BillKu31 分钟前
Java核心概念详解:JVM、JRE、JDK、Java SE、Java EE (Jakarta EE)
java·jvm·jdk·java ee·jre·java se·jakarta ee
刘婉晴1 小时前
【Java】NIO 简单介绍
java·nio
渣哥2 小时前
聊聊我和 ArrayList、LinkedList、Vector 的“一地鸡毛”
java
浮游本尊2 小时前
Java学习第20天 - 性能优化与监控
java
纪莫2 小时前
技术面:Java并发(线程同步、死锁、多线程编排)
java·java面试⑧股
衍余未了2 小时前
k8s 内置的containerd配置阿里云个人镜像地址及认证
java·阿里云·kubernetes
叽哥2 小时前
Kotlin学习第 4 课:Kotlin 函数:从基础定义到高阶应用
android·java·kotlin