2025年集合框架之set集合

集合框架之set集合目录 1 set 集合的特点 2 set 集合的遍历方式 3 set 底层去重原理 4 treeSet 自然排序比较器排序 内容 一 set 集合的特点 1 不可重复 基本数据类型 amp String 2 无序 二 set 集合的遍历方式 1 foreach 遍历 2 迭代器遍历 代码如下

大家好,我是讯享网,很高兴认识大家。

目录

1.set集合的特点

2.set集合的遍历方式

3.set底层去重原理

4.treeSet(自然排序比较器排序)

内容:
在这里插入图片描述
讯享网

一、set集合的特点

二、set集合的遍历方式

1、foreach遍历
2、迭代器遍历
代码如下:

package com.xnx.sex; import java.util.HashSet; import java.util.Iterator; / * set集合的特点 * 不重复:基本数据类型&String * @author Administrator * */ public class Demo1 { public static void main(String[] args) { HashSet set=new HashSet<>(); set.add("zs"); set.add("ls"); set.add("ww"); set.add("老六"); set.add("ls"); System.out.println(set.size()); System.out.println("========增强for========"); for (Object obj : set) { System.out.println(obj); } System.out.println("========迭代器========"); Iterator it = set.iterator(); while(it.hasNext()){ System.out.println(it.next()); } } } 

讯享网

运行效果:

foreach与迭代器遍历的运行效果

三、set底层去重原理

代码展示:

讯享网package com.xnx.sex; import java.util.HashSet; / * set底层去重原理 * 1、set去重底层原理是与对象的hashcode以及equals方法相关 * 2、判断重复元素的时候,是比较hashcode值,在调用equals比较内容 * @author Administrator * */ public class Demo2 { public static void main(String[] args) { HashSet<Object> set=new HashSet<>(); set.add(new Person("zs",18)); set.add(new Person("ls",19));//distrinct:去重 set.add(new Person("ww",23)); set.add(new Person("老六",32)); set.add(new Person("zs",18)); System.out.println(set.size()); } } class Person /*implements Comparable<Person>*/{ private String name; private int age; public Person(String name, int age, int level) { super(); this.name = name; this.age = age; this.level = level; } public int getLevel() { return level; } public void setLevel(int level) { this.level = level; } private int level; 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 Person() { // TODO Auto-generated constructor stub } public Person(String name, int age) { super(); this.name = name; this.age = age; } @Override public String toString() { return "Person [name=" + name + ", age=" + age + ", level=" + level + "]"; } @Override public int hashCode() { System.out.println("=========hashCode========="); final int prime = 31; int result = 1; result = prime * result + age; result = prime * result + ((name == null) ? 0 : name.hashCode()); return result; } @Override public boolean equals(Object obj) { System.out.println("=========equals========="); if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Person other = (Person) obj; if (age != other.age) return false; if (name == null) { if (other.name != null) return false; } else if (!name.equals(other.name)) return false; return true; } // @Override // public int compareTo(Person o) { // int levelRes=this.level-o.level; // return levelRes==0?this.age-o.age:levelRes; // } } 

运行效果:
在这里插入图片描述

结论:1、set去重底层原理是与对象的hashcode以及equals方法相关
2、判断重复元素的时候,是比较hashcode值,在调用equals比较内容

四、treeSet(自然排序比较器排序)

1、java.lang.Comparable:自然排序 排序的规则是单一的,不能够应对复杂的变化的需求
2、java.util.comparator:比较器排序
代码展示:

package com.xnx.sex; import java.util.Comparator; import java.util.TreeSet; / * set集合排序 * java.lang.Comparable:自然排序 排序的规则是单一的,不能够应对复杂的变化的需求 * java.util.comparator:比较器排序 * @author Administrator * */ public class Demo3 { public static void main(String[] args) { / * 需求1:从xxx公司,拿到用户数据,需要根据用户的级别,进行会议座位的排序 * 需求2:按照年龄升序,打印出人员信息 * 需求3:按照用户的首字母排序 */ // Exception in thread "main" java.lang.ClassCastException: // com.xnx.sex.Person cannot be cast to java.lang.Comparable // TreeSet set=new TreeSet<>(new levelCompartor()); // TreeSet<Person> set=new TreeSet<>((x,y)-> x.getName().compareTo(y.getName())); TreeSet<Person> set=new TreeSet<>((x,y)-> { int ageRes=x.getAge()-y.getAge(); int levelRes=0; if(ageRes==0) { levelRes=x.getLevel()-y.getLevel(); }else { return ageRes; } return levelRes; }); set.add(new Person("zs", 18,1)); set.add(new Person("ls", 21,4)); set.add(new Person("ww", 29,2)); set.add(new Person("ll", 20,3)); set.add(new Person("bj", 20,3)); for (Object object : set) { System.out.println(object); } } public static void main2(String[] args) { / * 需求1:从xxx公司,拿到用户数据,需要根据用户的级别,进行会议座位的排序 * zs 部门总监 1 * ls 普通员工 3 * ww 部门经理 2 * .... * xxxservice.list(1); * * 现象: * 1、String默认是能够排序的 * 2、自定义的对象无法排序,报类型转换异常 * * 需求2: * 按照年龄升序,打印出人员信息 * * 需求3: * 按照用户的首字母排序 */ // Exception in thread "main" java.lang.ClassCastException: // com.xnx.sex.Person cannot be cast to java.lang.Comparable TreeSet set=new TreeSet<>(); set.add(new Person("zs", 18,1)); set.add(new Person("ls", 21,4)); set.add(new Person("ww", 29,2)); set.add(new Person("ll", 20,3)); set.add(new Person("bj", 20,3)); for (Object object : set) { System.out.println(object); } } } class levelCompartor implements Comparator<Person>{ @Override public int compare(Person o1, Person o2) { int levelRes=o1.getLevel()-o2.getLevel(); return levelRes==0?o1.getAge()-o2.getAge():levelRes; } } 

运行效果:
在这里插入图片描述

小讯
上一篇 2025-04-11 18:40
下一篇 2025-01-06 18:20

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/51948.html