java学习笔记(11) ---List和Set集合

List集合

List集合继承了Collection集合的全部功能,同时因为List系列集合有索引,因为List集合多了索引,所以多了很多按照索引操作元素的功能:ArrayList实现类集合底层基于数组存储数据的,查询快,增删慢!
             - public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
             - public E get(int index):返回集合中指定位置的元素。
             - public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
             - public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回更新前的元素值。

LinkedList集合

LinkedList也是List的实现类:底层是基于链表的,增删比较快,查询慢!!
LinkedList是支持双链表,定位前后的元素是非常快的,增删首尾的元素也是最快的
所以LinkedList除了拥有List集合的全部功能还多了很多操作首尾元素的特殊功能:
         - public void addFirst(E e):将指定元素插入此列表的开头。
         - public void addLast(E e):将指定元素添加到此列表的结尾。
         - public E getFirst():返回此列表的第一个元素。
         - public E getLast():返回此列表的最后一个元素。
         - public E removeFirst():移除并返回此列表的第一个元素。
         - public E removeLast():移除并返回此列表的最后一个元素。
         - public E pop():从此列表所表示的堆栈处弹出一个元素。
         - public void push(E e):将元素推入此列表所表示的堆栈。

Set集合

如果希望元素可以重复,又有索引,查询要快用ArrayList集合。(用的最多)
如果希望元素可以重复,又有索引,增删要快要用LinkedList集合。(适合查询元素比较少的情况,经常要首尾操作元素的情况)
如果希望增删改查都很快,但是元素不重复以及无序无索引,那么用HashSet集合。
如果希望增删改查都很快且有序,但是元素不重复以及无索引,那么用LinkedHashSet集合。

TreeSet: 不重复,无索引,按照大小默认升序排序!!
    TreeSet集合称为排序不重复集合,可以对元素进行默认的升序排序。

    TreeSet集合自自排序的方式:
        1.有值特性的元素直接可以升序排序。(浮点型,整型)
        2.字符串类型的元素会按照首字符的编号排序。
        3.对于自定义的引用数据类型,TreeSet默认无法排序,执行的时候直接报错,因为人家不知道排序规则。

    自定义的引用数据类型的排序实现:

a.直接为对象的类实现比较器规则接口Comparable,重写比较方法(拓展方式)
b.直接为集合设置比较器Comparator对象,重写比较方法

import java.util.*;

public class _202216Demo {
    public static void main(String[] args) {
        Set<Student> students = new TreeSet<>((o1, o2) -> o2.getAge() - o1.getAge());
        students.add(new Student("xusong", 35));
        students.add(new Student("jin", 24));
        students.add(new Student("asd", 27));
        System.out.println(students);
    }
}

class Student implements Comparable<Student>{
    public String name;
    public int age;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public int compareTo(Student o) {
        return this.getAge() - o.getAge();
    }
}

Collections常用的API

Collections有几个常用的API:
         - public static <T> boolean addAll(Collection<? super T> c, T... elements)
             给集合对象批量添加元素!
         - public static void shuffle(List<?> list) :打乱集合顺序。
         - public static <T> void sort(List<T> list):将集合中元素按照默认规则排序。
         - public static <T> void sort(List<T> list,Comparator<? super T> ):将集合中元素按照指定规则排序。例如:Collections.sort(students, (o1, o2) -> o2.getAge() - o1.getAge());

可变参数

可变参数的格式:数据类型... 参数名称
可变参数的作用:
         传输参数非常灵活,方便。
         可以不传输参数。
         可以传输一个参数。
         可以传输多个参数。
         可以传输一个数组。
可变参数的注意事项:
            1.一个形参列表中可变参数只能有一个!!
            2.可变参数必须放在形参列表的最后面!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值