Set集合

本文详细介绍了Java集合框架中的Set集合及其特点,包括HashSet和TreeSet。Set不允许存储重复元素且无索引。通过示例展示了如何遍历Set集合以及如何实现元素的自然排序和定制排序。TreeSet可以按照元素规则进行排序,可以使用Comparable接口或Comparator进行排序。此外,还展示了自定义学生类实现Comparable接口进行自然排序的例子。
摘要由CSDN通过智能技术生成

Set集合元素和特点

  • 不可以存储重复元素 没有索引
  • 不能使用不同的for循环遍历
    在这里插入图片描述

Set集合的使用

public static void main(String[] args) {
        Set<String> set = new HashSet<> ();
        set.add("sss");
        set.add("aaa");
        set.add("sss");
        //遍历集合,set集合是没有索引的,所以不能使用通过索引获取元素的方法
        Iterator<String> iterator = set.iterator ();
        while (iterator.hasNext ()){
            System.out.println (iterator.next ());
        }
        System.out.println ("-----------简易遍历------------");
        for (String s : set) {
            System.out.println (s);
        }

    }

TreeSet集合

TreeSet集合概述和特点
1.不可以存储重复元素
2.没有索引
3.可以将元素按照规则进行排序
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comparator comparator):根据指定的比较器进行排序
TreeSet():自然排序

    /**
     *自然排序Com怕让table的使用
     * 创建学生类,然后实现Comparatable接口,重写compareto方法(),进行排序
     */
    public static void main(String[] args) {
        /*
           按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
         */
        Set<Studeng>  set = new TreeSet<> ();
        Studeng s1 = new Studeng("zhangsan",27);
        Studeng s2 = new Studeng("lisi",27);
        Studeng s3 = new Studeng("wangwu",29);
        set.add (s1);
        set.add (s2);
        set.add (s3);
        for (Studeng studeng : set) {
            System.out.println (studeng);
        }



    }

class Studeng implements Comparable<Studeng>{
    private String name;
    private int age ;

    public Studeng() {
    }

    public Studeng(String name, int age) {
        this.name = name;
        this.age = 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;
    }

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

    /*
     负数表示小于
     0表示相等
     整数表示大于
     */
    @Override
    public int compareTo(Studeng o) {
        if(this.age==o.age){
            //这里的compareTo是字符串中的方法,进行字母排序
            return  this.name.compareTo (o.getName ());
        }
        return this.age-o.age;
    }
}

比较器排序Comparator的使用

public class Demo02 {
    /**
     *比较器排序,Conparator 使用
     *
     */
    public static void main(String[] args) {
        /*
          按照年龄从小到大排序,年龄相同时,按照姓名的字母顺序排序
         */
        Comparator<Student> studentComparator = new Comparator<Student> () {
            /*
                负数表示小于
                0表示相等
                整数表示大于
            */
            @Override
            public int compare(Student o1, Student o2) {
                //o1表示现在要存入的那个元素、o2表示已经存入到集合中的元素
                if(o1.getAge ()==o2.getAge ()){
                    return o1.getName().compareTo(o2.getName()) ;
                }
                return o1.getAge() - o2.getAge();
            }
        };
        Set ts = new TreeSet (studentComparator);
        Student t1 = new Student("zhangsan",23);
        Student t2 = new Student("lisi",22);
        Student t3 = new Student("wangwu",24);
        Student t4 = new Student("zhaoliu",24);
        //把老师添加到集合
        ts.add(t1);
        ts.add(t2);
        ts.add(t3);
        ts.add(t4);
        Iterator iterator = ts.iterator ();
        while (iterator.hasNext ()){
            System.out.println (iterator.next ());
        }


    }
}
class Student{
    private String name;
    private int age;

    public Student() {
    }

    public Student(String name, int age) {
        this.name = name;
        this.age = 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;
    }

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值