栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Set接口和Set子实现类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Set接口和Set子实现类

1.Set接口
1.Set接口特点:不包含重复元素,元素唯一
			 无序性
2.Set和List的存取方式一样
2.HashSet集合
1.当调用HashSet的add()方法存入元素时,会先调用hashCode()方法,获取哈希值,根据对象的哈希值计算出一个存储位置,如果位置没有元素,则存入;如果该位置有元素,则调用equals()方法让当前存入的元素和该位置上的元素进行比较.返回false,将元素存入集合,返回true,则将元素舍弃.
   自定义类型需要重写hashCode()和equals()方法
3.TreeSet集合
1.底层依赖TreeMap,TreeMap底层数据结构为红黑树结构
2.使用不同的构造方法,会选择不同的排序方式
    自然排序:TreeSet(),接口Comparable,重写compareTo方法
    比较器排序:TreeSet(Comparator comparator)
        	接口Comparator,compare方法
3.1 自然排序实现代码
public class Student implements Comparable{
    private String name;
    private int age;
   //此处有参构造,无参构造,get/set方法
    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", age=" + age +
                '}';
    }
    //重写compareTo方法
    public int compareTo(Student s){
         int num  = this.age - s.age ;//由小到大
    int num2 = (num==0)?(this.name.compareTo(s.name)):num ;
        return num2;
    }
}
3.2 比较器排序实现代码
方式一:定义子实现类
	public class MyComparator implements Comparator {
    @Override
    public int compare(Student s1, Student s2) {
        int num = s1.getAge() - s2.getAge() ;
        int num2 = (num==0)?(s1.getName().compareTo(s2.getName())):num ;
        return num2;
    }
}
	TreeSet ts = new TreeSet<>(new MyComparator()) ;

方式二:匿名内部类
	   TreeSet ts = new TreeSet<>(new Comparator() {
            @Override
            public int compare(Student s1, Student s2) {
                int num = s2.getAge() - s1.getAge() ;
                int num2 = (num==0)?(s1.getName().compareTo(s2.getName())):num ;
                return num2;
            }
        }) ;

方式三:拉姆达表达式
          TreeSet ts = new TreeSet<>((s1,s2) ->{
                int num = s2.getAge() - s1.getAge() ;
                int num2 = (num==0)?(s1.getName().compareTo(s2.getName())):num ;
                return num2;
            }
        ) ;

4.泛型
:任意java类型
:向下限定,E这个类型以及他的子类
:向上限定,E这个类型以及他的父类
5.ArrayList集合嵌套
public class Test{
    main(){
        ArrayList> bigArray = new ArrayList<>();
        ArrayList array1 = new ArrayList<>() ;
        //创建小集合
        ArrayList array1 = new ArrayList<>() ;
         ArrayList array1 = new ArrayList<>() ;
        Student s1 = new Student("刘备",35) ;
        Student s2 = new Student("曹操",40) ;
        array1.add(s1) ;
        array1.add(s2) ;
        //将小集合添加到大集合中
        bigArray.add(array1) ;


        //第二个子集合
        ArrayList array2 = new ArrayList<>() ;
        //里面添加两个学生数据
        Student s3 = new Student("唐僧",50) ;
        Student s4 = new Student("孙悟空",42) ;
        array2.add(s3) ;
        array2.add(s4) ;
        //将小集合添加到大集合中
        bigArray.add(array2) ;

        //第三个子集合
        ArrayList array3 = new ArrayList<>() ;
        //里面添加两个学生数据
        Student s5 = new Student("宋江",39) ;
        Student s6 = new Student("西门庆",28) ;
        array3.add(s5) ;
        array3.add(s6) ;
        //将小集合添加到大集合中
        bigArray.add(array3) ;

        //方便遍历---->增强for
        //当前大集合的数据类型: ArrayList>
        System.out.println("学生的信息如下");
        for(ArrayList myArray:bigArray){
            //子集合ArrayList --->里面的数据类型就是Student
            for(Student s :myArray){
                System.out.println("t"+s.getName()+"t"+s.getAge());
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/716904.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号