赞
踩
代码演示:
- import java.util.*;
-
- public class ListTest5 {
- public static void main(String[] args) {
- Set<Integer> set = new HashSet<>(); //一行经典代码,多态写法,创建了一个HashSet集合对象
- //HashSet集合:无序,不重复,无索引
- set.add(555);
- set.add(222);
- set.add(222);
- set.add(111);
- set.add(333);
- set.add(333);
- set.add(444);
- System.out.println(set); //[555, 444, 333, 222, 111]
- System.out.println("---------------------------------");
- Set<Integer> set2 = new LinkedHashSet<>();
- //LinkedHashSet集合:有序,不重复,无索引
- set2.add(555);
- set2.add(222);
- set2.add(222);
- set2.add(111);
- set2.add(333);
- set2.add(333);
- set2.add(444);
- System.out.println(set2); //[555, 222, 111, 333, 444]
- System.out.println("---------------------------------");
- Set<Integer> set3 = new TreeSet<>();
- //TreeSet:可排序,不重复,无索引
- set3.add(555);
- set3.add(222);
- set3.add(222);
- set3.add(111);
- set3.add(333);
- set3.add(333);
- set3.add(444);
- System.out.println(set3); //[111, 222, 333, 444, 555]
- }
- }

注意:Set要用到的常用方法,基本上就是Collection提供的!
自己几乎没有额外新增一些常用功能!
在学习Set系列之前得先了解哈希值
哈希表是一种增删改查数据性能都较好的结构
Hashset集合默认不能对内容一样的两个不同对象去重复!因为它们哈希值一样
比如内容一样的两个学生对象存入到Hashset集合中去,Hashset集合是不能去重复的!
例:
- import java.util.HashSet;
-
- public class SetTest2 {
- public static void main(String[] args) {
- Student s1 = new Student("小明","男","170");
- Student s2 = new Student("小明","男","170");
- Student s3 = new Student("小明","男","170");
- HashSet<Student> students = new HashSet<>();
- students.add(s1);
- students.add(s2);
- students.add(s3);
- System.out.println(students);
-
- }
- }
运行结果:
如果希望Set集合认为2个内容一样的对象是重复的必须重写对象的hashcode()和equals()方法
注意:
TreeSet集合存储自定义类型的对象时,必须指定排序规则,支持如下两种方式来指定比较规则
方法一:
- import java.util.Objects;
-
- public class Student implements Comparable<Student>{
- private String name;
- private String sex;
- private double height;
-
- //按照身高升序排序
- @Override
- public int compareTo(Student o) {
- return Double.compare(this.getHeight(), o.getHeight());
- }
-
- //......
- }
方法二:
- public class SetTest3 {
- public static void main(String[] args) {
- Student s1 = new Student("小明","男",170);
- Student s2 = new Student("小美","女",168);
- Student s3 = new Student("小黑","男",188);
- //按照身高升序排序
- TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
- @Override
- public int compare(Student o1, Student o2) {
- return Double.compare(o1.getHeight(),o2.getHeight());
- }
- });
- students.add(s1);
- students.add(s2);
- students.add(s3);
- System.out.println(students);
- }
- }

注意:如果类本身有实现Comparable接口,Treeset集合同时也自带比较器,默认使用集合自带的比较器排序
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。