JAVA基础之Set集合、TreeSet、Vector

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:

今天学习了Vector、Set集合、TreeList


提示:以下是本篇文章正文内容,下面案例可供参考

一、Vector

向量与ArrayList之间的共性:都是List接口下的实现类底层都是数组。
区别:

VectorArrayList
线程安全线程不安全
每次扩容2倍每次扩容1.5倍

实例代码如下:

public class Class_09_Vector {
    public static void main(String[] args) {
        new Vector<>(16).add(10);
        System.out.println(new Vector<>(16).add(10));
    }
}

二、Set集合

Set集合 : 无序的、去重的
新增方法 : static Set of(E… elements) 返回包含任意数量元素的不可修改集合。
遍历方式 : foreach iterator

实例代码如下:

public class Class_10_Set {
    public static void main(String[] args) {
        Set<Integer> set = new HashSet<>();

        set.add(15);
        set.add(15);
        set.add(78);
        set.add(799);
        set.add(100);
        System.out.println("我是普通输出==================");
        System.out.println(set);
        System.out.println("我是forEach输出==================");
        set.forEach(System.out::println);
        System.out.println("我是迭代器输出==================");
        Iterator<Integer> i = set.iterator();
        while (i.hasNext()) {
            System.out.println(i.next());
        }
        System.out.println("我是增强for循环输出==================");
        for (Integer integer : set) {
            System.out.println(integer);
        }
        System.out.println("我是of方法创建的set集合");
        Set<Double> list1 = Set.of(1.00, 12.00, 3.00);
        list1.add(50.00);
        System.out.println(list1);


    }

}


输出结果如下:

在这里插入图片描述

三、TreeSet

1、TreeSet的基本用法

TreeSet:无序的、去重的
特点:可以自动升序排列
遍历方式:

  1. foreach
  2. iterator
  3. descendingIterator()

TreeSet一些方法的实现
实例代码如下:

  public static void main(String[] args) {
        TreeSet<Integer> tree = new TreeSet<>();
        tree.add(12);
        tree.add(45);
        tree.add(12);
        tree.add(23);
        tree.add(90);
        System.out.println(tree);
        //ceiling 返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则null 。
        System.out.println(tree.ceiling(20));
        //floor返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则null 。
        System.out.println(tree.floor(20));
        //按降序返回此 set 中元素的迭代器。
        tree.descendingIterator();
        System.out.println(tree);
        //last()返回此集合中当前的最后一个(最高)元素。
        System.out.println(tree.last());
        //lower(E e)返回此集合中严格小于给定元素的最大元素,如果没有这样的元素,则null 。
        System.out.println(tree.lower(20));
        //pollLast()检索并删除最后一个(最高)元素,如果此集合为空,则返回null 。
        tree.pollLast();
        System.out.println(tree);
        //remove(Object o)如果存在,则从此集合中删除指定的元素。
        tree.remove(12);

输出结果如下:
在这里插入图片描述

2、TreeSet的比较器

TreeSet不能存放不同类型的数,否则会抛出类型转换异常(ClassCastException)。
示例代码如下:


        TreeSet<Object> t4 = new TreeSet<>();
        t4.add("se");
        t4.add(15);
        t4.add('a');
        t4.add(15);
        System.out.println(t4);

输出结果如下:
在这里插入图片描述

但是可以通过重写内部比较器 Comparable来执行所需求的比较类型。
示例代码如下:

public class Hw_05 {
    public static void main(String[] args) {
//        TreeSet<employee> tree = new TreeSet<>();
//        TreeSet<employee> tree = new TreeSet<>(new Dome());
        /*匿名内部类
            TreeSet<employee> tree = new TreeSet<>(new Comparator<employee>(){
            @Override
            public int compare(employee o1, employee o2) {
                return o1.getAge() - o2.getAge();
            }
        });*/
        TreeSet<employee> tree = new TreeSet<>((o1, o2) -> o1.getAge() - o2.getAge());
        tree.add(new employee("迪迦", 18, 23000));
        tree.add(new employee("盖亚", 19, 22000));
        tree.add(new employee("戴拿", 20, 21000));
        tree.add(new employee("梦比优斯", 20, 21000));
        System.out.println(tree);


    }
}

//comparator 外部比较器
//class Dome implements Comparator<employee> {
//
//    @Override
//    public int compare(employee o1, employee o2) {
//        return o1.getAge() - o2.getAge();
//    }
//
//
//}

class employee implements Comparable<employee> {
    private String name;
    private int age;
    private double salary;

    public employee() {
    }

    public employee(String name, int age, double salary) {
        this.name = name;
        this.age = age;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

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

    @Override
    //重写内部比较器
    /**
     * 若返回值为整数则升序排序 则代表this.大于o 否则就是小于
     * 若返回值为0 则说他们相等,则去重
     */
    public int compareTo(employee o) {
        int a = Double.compare(this.salary, o.salary);//首先按工资比较,若this>o 则返回正数,否则返回负数。相等返回0
        if (a == 0) {
            if ((this.age - o.age) != 0) {
                return this.age - o.age;
            } else if (this.name.equals(o.name)) {
                return 0;
            } else {
                return this.name.compareTo(o.name);
            }
        }
        return a;
    }
}

输出结果如下:
在这里插入图片描述

总结

今天主要学习了上述的知识。重点掌握了TreeSet重写比较器。明天加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值