Java学习day03--Collection的子类之List和Set

Collection的子类之List和Set

该模块涉及抽象类List、Set。也涉及List的子类ArrayList和LinkedList,Set的子类HashSet、LinkedHashSet。最后还讲解了可变参数、Collections工具类的简单用法。内容不多,但较为抽象,需要自己多练多理解。

List抽象类

List(接口)特点:1.有序的;2.可以存储重复元素;3.可以通过索引访问元素。
昨天讲了Collection类的一些方法:
增: 1个
add(E e) // 返回值为布尔类型,对于Set添加重复值时返回fasle,其余返回true
删: 2个
remove(E e) // 返回值为布尔类型,删除不存在的元素返回false
clear() // 将元素删完
查: 5个
isEmpty()
size()
toArray()
contains(E e) // 是否包含e
iterator() // 迭代器

  1. List类新增方法
    (1).增:public void add(int index,E e):将e添加到当前集合的index位置。
    (2).删:public E remove(int index):删除index位置上的元素,并将删除的元素返回。
    (3).改:public E set​(int index,E element):将element替换index位置上的元素,并将原index位置上的元素返回。
    (4).查:public E get​(int index):获取index位置上的元素。

  2. `ArrayList类
    ArrayList类是List类的子类,无新增方法。

  3. LinkedList类
    新增了模栈结构的方法
    (1) public void push(E e) 相当于addFirst()方法
    (2) public E pop() 弹栈
    (3) public E poll() 弹栈,与pop()不同的是当栈内元素为空时不会报错,且弹出null

Set抽象类

Set(接口)特点:1.无序的;2.不能存储重复元素;3.不能通过索引访问元素;
Set无新增方法,但要注意
用该数据结构添加对象去重时,需要在类中定义去重的方法:equals和hashCode方法。可以在方法里自定义根据对象的什么属性去重。

  1. `HashSet类
    无新增方法

  2. `LinkedHashSet类
    该类是有序的,它是Set的一个特例。

可变参数

如果不知道传入函数的参数有多少个时,可以利用可变参数。如:

public class Test05 {
    public static void main(String[] args) {
        System.out.println(func('f',2,3,4,5,6,7,8,9,0));
    }
    public static int func(char ch, int... arr){  // 此处的int..arr用于接收可变参数,arr在函数内部是一个数组
        int sum = ch;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return sum;
    }
}

用T… arr的形式来接收可变参数,且可变参数必须位于函数参数的最后。

Collections类

  1. Collections.shuffle(List<T> list) // 洗牌
  2. Collections.sort(List<? extends Comparable> list) // 比较
    在对象类中需要实现比较器,如:
class Student implements Comparable{
    String name;
    int age;
    @Override
public int compareTo(Object o) {
    Student s = (Student)o;
    return this.age - s.age;        // 升序
}}
  1. Collections.sort(List<?> list, Comparator cp) //自己传递一个比较器
    方式一:写一个比较器类
class Mycp implements Comparator<Student>{
    @Override
    public int compare(Student o1, Student o2) {
        return o2.age - o1.age;
    }
}

之后再Collections.sort(list2, new Mycp())

方式二:直接写一个匿名对象

Collections.sort(list2, new Comparator<Student>(){    // 匿名对象
    @Override
    public int compare(Student o1, Student o2) {
        return o2.age - o1.age;
    }
});  // 第二种写法
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值