Collection集合 Set List List集合实现学生类成绩年龄排序

Collection

集合的特点:提供一种存储空间可变的存储类型,存储的数据容量可以随时发生改变。

image-20210806100415307
蓝色是接口 红色是实现类

1.3 Collection 集合概述和使用

Collection集合概述

  • 是单例集合的顶层接口,它表示一组对象,这些对象也称为Collection的元素
  • JDK不提供此接口的任何直接实现,它提供更具体的子接口(如Set和List)实现

创建Collection集合的对象

  • 多态的方式
  • 具体的实现类Array List

Collection< String > c = new ArrayList < String >();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FYlIHi5d-1628671055331)(https://i.loli.net/2021/08/06/PwROXk4nItzSo9u.png)]

Iterator:迭代器,集合的专用遍历方式

Iterator < String > it=c.iterator();

import java.util.ArrayList;
import java.util.Iterator;

public class RunoobTest {
    public static void main(String[] args) {

        // 创建集合
        ArrayList<String> sites = new ArrayList<String>();
        sites.add("Google");
        sites.add("Runoob");
        sites.add("Taobao");
        sites.add("Zhihu");

        // 获取迭代器
        Iterator<String> it = sites.iterator();

        // 输出集合中的第一个元素
        System.out.println(it.next());
    }
}
while(it.hasNext()) {        //输出所有元素
    System.out.println(it.next());
}

List集合概述和特点

List集合概述

  • 有序集合,用户可以精确控制每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素
  • 与Set集合不同,列表通常允许重复的元素

List集合特点

  • 有序:存储和取出的元素顺序一致
  • 可重复:存储的元素可以重复

image-20210806141944367

image-20210806144209185

image-20210806145231659

List集合子类集合特点

List 集合常用子类:ArrayList,LinkedList

  • ArrayList:底层数据结构是数组,查询快,增删慢
  • LinkedList:底层数据结构是链表,查询慢,增删快

两个用法和方法一模一样 根据需求进行选择,如果不知道就用ArraryList

image-20210806173020956

Set集合

Set集合特点

  • 不包含重复元素的集合
  • 没有带索引的方法,所以不能使用普通for遍历循环

哈希值:是jdk根据对象的地址或者字符串或者数字算出来的int类型的数值

object类中有一个方法可以获取对象的哈希值

  • public int hashCode();

HashSet集合概述和特点

HashSet集合特点

  • 底层数据是哈希表
  • 对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
  • 没有带索引的方法,所以不能使用普通for循环遍历
  • 由于是Set集合,所以是不包含重复元素的集合

用HashSet集合添加学生类 要重写 equals()和hashCode();方法

TreeSet集合概述和特点

TreeSet集合的特点

  • 元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法

    • TreeSet();根据其元素的自然排序进行排序
    • TreeSet(Comparator comparator):根据指定的比较器进行排序
  • 没有带索引的方法,所以不能使用普通循环遍历

  • 由于是Set集合,所以不包含重复元素的集合

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yJRddvUl-1628671055342)(https://i.loli.net/2021/08/06/nmoUGFbeYIKlauP.png)]

removeAll(List.of(“sdfdsf”,“sdfds”)); 批量删除

removeIf(e - > e.toString().startsWith(“java”)); //删除含有java的

list.contains(“java”); //判断是否有java

学生按照成绩排序示例

public class StudentDemo1 {
    public static void main(String[] args) {
        Student s1=new Student("zhang",50);
        Student s2=new Student("yang",30);
        Student s3=new Student("wang",40);
        List<Student> list=new ArrayList<Student>();
        list.add(s1);
        list.add(s2);
        list.add(s3);
        Collections.sort(list, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o1.getPrice()- o2.getPrice();
          //return o1.getName().compareTo(o2.getName());
                //根据年龄排序
            }

        });
        for (Student l:list){
            System.out.println("学生名字"+l.getName()+"成绩"+l.getPrice());
        }
    }
}

当学生类有姓名和成绩相同时 hashset 集合也会同时存进去 需要在学生类重写equals()和hashCode()方法 idea上面有快捷生成方式alt+insert

public class Student {
    private String name;
    private int price;

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

    public String getName() {
        return name;
    }

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

    public int getPrice() {
        return price;
    }

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

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return price == student.price && Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, price);
    }
}

测试类

public class StudentDemo2 {
    public static void main(String[] args) {
        Student s1=new Student("zhang",50);
        Student s2=new Student("yang",30);
        Student s3=new Student("wang",40);
        Student s4=new Student("zhang",50);
        Set<Student> set=new HashSet<Student>();
        set.add(s1);
        set.add(s2);
        set.add(s3);
        set.add(s4);
        //System.out.println(set);
        for (Student s:set){
            System.out.println("学生名字"+s.getName()+"成绩"+s.getPrice());
        }

    }
}



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值