欢迎访问宙启技术站
智能推送

如何在Java程序中使用List函数?

发布时间:2023-06-16 15:07:19

Java语言中的List是集合框架中最常用的一种数据结构,它提供了一种有序容器,其中可以存储不同种类的对象,并且可以访问和操作这些对象。List提供了一套接口,这些接口定义了一些常用的操作,例如添加、删除、查找和排序等,使开发者可以很方便地使用它们。

一、List的定义和使用

List是一种抽象的数据结构,它提供了一组对元素进行操作的方法。Java中的List是一个接口,它有多种实现方式,如ArrayList、LinkedList等。

1.1 List的定义

List是一个接口,定义了一些方法,如下:

其中,E是List中存储的元素的类型。List接口继承自Collection接口,因此它包含了Collection中定义的所有方法。List的方法主要有以下几个:

:将指定的元素添加到List的末尾;

:在指定index位置插入指定的元素;

:从List中删除指定的元素;

:从List中删除指定位置的元素,并返回删除的元素;

:获取指定位置的元素;

:用指定元素替换指定位置的元素;

:判断List中是否包含指定的元素;

:返回List中元素的个数;

:返回一个ListIterator遍历List。

1.2 List的使用

具体使用List的方法,需要针对List的实现方式进行区分。

1)使用ArrayList

ArrayList是一种数组实现的List,底层使用数组存储元素。我们在使用ArrayList时不需要考虑底层的实现细节,只需按照List的接口编写代码即可。下面是使用ArrayList的一些示例代码:

List<String> list = new ArrayList<>();
list.add("Hello"); //添加元素
list.add("World");
System.out.println(list.get(0)); //获取元素
System.out.println(list.get(1));

list.remove(1); //删除元素
System.out.println(list);

list.add(0, "Java"); //插入元素
System.out.println(list);

System.out.println(list.contains("Java")); //判断元素是否在List中

for (String s : list) { //遍历List
    System.out.println(s);
}

2)使用LinkedList

LinkedList是一种链表实现的List,底层使用双向链表存储元素。使用LinkedList与使用ArrayList相似,也不需要考虑底层的实现细节,只需按照List的接口编写代码。下面是使用LinkedList的一些示例代码:

List<String> list = new LinkedList<>();
list.add("Hello");
list.add("World");
System.out.println(list.get(0));
System.out.println(list.get(1));

list.remove(1);
System.out.println(list);

list.add(0, "Java");
System.out.println(list);

System.out.println(list.contains("Java"));

for (String s : list) {
    System.out.println(s);
}

二、List的排序

List提供了sort方法进行排序。默认情况下,sort方法使用自然顺序对List进行排序。例如,将一个包含字符串的List排序,将按字典顺序排序。下面是对一个包含整数的List进行递增排序的示例代码:

List<Integer> list = new ArrayList<>();
list.add(3);
list.add(1);
list.add(2);
System.out.println(list);

Collections.sort(list); //排序
System.out.println(list);

输出:

[3, 1, 2]
[1, 2, 3]

有时需要对List进行自定义排序。例如,按学生姓名对学生列表排序。可以使用Comparator接口实现自定义排序。Comparator接口定义了两个方法:compare和equals。compare方法用于比较两个对象的顺序,equals方法用于比较两个对象是否相等。

下面是对一个包含学生信息的List进行自定义排序的示例代码:

class Student {
    private String name;
    private int age;
    private int score;

    public Student(String name, int age, int score) {
        this.name = name;
        this.age = age;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public int getScore() {
        return score;
    }

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

List<Student> list = new ArrayList<>();
list.add(new Student("Tom", 18, 90));
list.add(new Student("Jerry", 20, 80));
list.add(new Student("Bob", 19, 95));
System.out.println(list);

//按姓名升序排序
Collections.sort(list, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getName().compareTo(o2.getName());
    }
});
System.out.println(list);

//按年龄降序排序
Collections.sort(list, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return o2.getAge() - o1.getAge();
    }
});
System.out.println(list);

//按成绩升序排序
Collections.sort(list, new Comparator<Student>() {
    @Override
    public int compare(Student o1, Student o2) {
        return o1.getScore() - o2.getScore();
    }
});
System.out.println(list);

输出:

[Student{name='Tom', age=18, score=90}, Student{name='Jerry', age=20, score=80}, Student{name='Bob', age=19, score=95}]
[Student{name='Bob', age=19, score=95}, Student{name='Jerry', age=20, score=80}, Student{name='Tom', age=18, score=90}]
[Student{name='Jerry', age=20, score=80}, Student{name='Bob', age=19, score=95}, Student{name='Tom', age=18, score=90}]
[Student{name='Jerry', age=20, score=80}, Student{name='Tom', age=18, score=90}, Student{name='Bob', age=19, score=95}]

三、List的遍历

List提供了三种遍历方式,分别是for循环遍历、迭代器遍历和forEach遍历。

3.1 for循环遍历

使用for循环遍历List时,需要确定List的长度,通过下标访问List中的元素。下面是使用for循环遍历List的示例代码:

List<String> list = Arrays.asList("Hello", "World", "Java");
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}

输出:

Hello
World
Java

3.2 迭代器遍历

使用迭代器遍历List时,无需考虑List的长度,可以通过迭代器访问List中的元素,还可以在遍历过程中进行删除或添加操作。下面是使用迭代器遍历List的示例代码:

List<String> list = Arrays.asList("Hello", "World", "Java");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

输出:

Hello
World
Java

3.3 forEach遍历

使用forEach遍历List时,无需考虑List的长度,可以将List中的元素逐个传递给Lambda表达式进行处理。下面是使用forEach遍历List的示例代码:

List<String> list = Arrays.asList("Hello", "World", "Java");
list.forEach(s -> System.out.println(s));

输出:

Hello

World

Java

`