Java集合

Set集合

特点:

  1. 特点:无序,不重复

  2. 遍历:foreach,迭代器

  3. 扩容: 初始容量16,负载因子0.75,扩容增量1倍

实现类

HashSet

特点:
  1. 它存储唯一元素并允许空值,依据对象的hashcode来确定该元素是否存在

  2. 由HashMap支持

  3. 不保持插入顺序

  4. 非线程安全

public class HashSetPractice {
    public static void main(String[] args) {
        Set set = new HashSet();
        set.add(1);
        set.add(11);
        set.add(12);
        set.add(123);
        set.add(1234);
        set.add(23);
        set.add(23);
        set.add(22);
        set.add(245);
        System.out.println(set);
    }
}

结果:[1, 1234, 245, 22, 23, 11, 123, 12]
Hashset 直接去重了,因为set集合不可以出现重复的元素

TreeSet

特点
  1. 是一个包含有序的且没有重复元素的集合

  2. 作用是提供有序的Set集合,自然排序或者根据提供的Comparator进行排序

  3. TreeSet是基于TreeMap实现的

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

        Set set = new TreeSet();

        Student student1 = new Student("张一", 11);
        Student student2 = new Student("张二", 12);
        Student student3 = new Student("张三", 13);
        Student student4 = new Student("张四", 14);
        Student student5 = new Student("张五", 15);
        Student student6 = new Student("张五", 15);
        Student student7 = new Student("李五", 15);

        set.add(student1);
        set.add(student2);
        set.add(student3);
        set.add(student4);
        set.add(student5);
        set.add(student6);
        set.add(student7);

        System.out.println(set);
    }
}
自定义排序
public class Student implements Comparable<Student> {

    private String name;
    private int age;


    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 Student() {
    }

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

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

    @Override
    public int compareTo(Student o) {
        Student s = o;
        if (this.age == s.age) {
            if (this.name.equals(o.name)) {
                return 0;
            } else {
                for (int i = 0; i < this.name.length(); i++) {

                    if (this.name.charAt(i) > o.name.charAt(i)) {
                        return -1;
                    }
                }
            }
        } else if (this.age > s.age) {
            return 1;
        }
        return -1;
    }
}

set集合元素无放入顺序,且不可重复(注意:元素虽然无放入顺序,但是元素在Set中的位置是由该元素的HashCode决定的,其位置是固定的)。List支持for循环,也就是通过下标来遍历,也可以用迭代器,但是Set只能用迭代器,因为他无序,无法使用下标取值;Set:检索元素效率低,删除和插入效率高,插入和删除不会引起元素位置改变。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值