set集合

特点:元素唯一,元素无序,具体表现为取出和存入的顺序不同。
方法:HashSet LinkedHashSet TreeSet

HashSet

HashSet特点:
顶层数据结构是哈希表(数组+链表 JDK1.7 数组+链表+二叉树 JDK1.8)
元素唯一,且无序(存取顺序不一致)
唯一性是靠 元素重写hashCode()和equals方法来保证的。
如果元素不重写hashCode() 和 equals方法,则无法保证唯一性。
底层用HashMap 来存的

public class MyTest3 {public static void main(String[] args) {//HashSet 底层数据结构是哈希表,元素无序,且唯一,元素的唯一性是靠 元素重写//hashCode()和equals方法来保证的。如果元素不重写hashCode() 和 equals方法,则无法保证唯一性。//HashSet 集合 底层用HashMap 来存的HashSet<Student> set = new HashSet<>();set.add(new Student("杨超越",20));set.add(new Student("杨幂", 22));set.add(new Student("杨紫", 20));set.add(new Student("杨洋洋", 20));set.add(new Student("杨超越", 20));set.add(new Student("杨幂", 22));set.add(new Student("杨紫", 20));set.add(new Student("杨洋洋", 20));for (Student student : set) {System.out.println(student.getName()+"==="+student.getAge());}}
public 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;}boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age &&Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}
}
/*杨紫===20
杨幂===22
杨洋洋===20
杨超越===20
*/

LinkedHashSet

LinkedHashSet:
底层数据结构是链表和哈希表
元素唯一,且有序(存~~ 取顺序一致)
链表保证了有效,哈希表保证了唯一

public class MyTest {public static void main(String[] args) {// LinkedHashSet 底层数据结构是链表和哈希表,元素唯一,且有序(存取顺序一致)链表保证了有效,哈希表保证了唯一LinkedHashSet<String> set = new LinkedHashSet<>();set.add("张曼玉");set.add("王祖贤");set.add("钟楚红");set.add("林青霞");set.add("杨超越");set.add("张曼玉");set.add("王祖贤");set.add("钟楚红");set.add("林青霞");set.add("杨超越");for (String s : set) {System.out.println(s);}ArrayList<String> strings = new ArrayList<>();strings.add("aaa");strings.add("bbb");strings.add("ccc");strings.add("ddd");strings.add("aaa");strings.add("bbb");strings.add("ccc");strings.add("ddd");//使用有参构造,对List 集合去重LinkedHashSet<String> strings1 = new LinkedHashSet<>(strings);System.out.println(strings1);}
}
public class Student {private String name;private int age;public Student(){}public Student(String name, int age){this.name = name;this.age = age;}public void show () {System.out.println(name +"..."+age);}public String getName(){return name;}public int getAge(){return age;}}/*张曼玉
王祖贤
钟楚红
林青霞
杨超越
[aaa, bbb, ccc, ddd]*/

TreeSet

特点:
元素唯一,并且可以对元素进行排序
排序:
//一种是自然排序:自然排序,你使~~ 用得是无参构造,自然排序,对排序得元素有要求,要求,元素必须实现一个
Comparable 接口,重写该接口中得 compareTo()方法,根据此方法 返回得正负 0 来决定元素在二叉树中的左右位置,返回0 就不往里面方法
//一种是比较器排序

自然排序

 public class Demo {public static void main(String[] args) {TreeSet<Student> set = new TreeSet<>();set.add(new Student("杨超越asdfasfd", 20));set.add(new Student("杨超越2", 20));set.add(new Student("杨超越sdfsdf", 20));set.add(new Student("杨子涵", 22));set.add(new Student("王祖贤", 22));set.add(new Student("王祖贤", 23));set.add(new Student("杨树林sss", 25));set.add(new Student("杨康sss", 29));set.add(new Student("杨过ssssssssss", 23));set.add(new Student("杨梅sssssssssssssssssssssssssssssss", 18));set.add(new Student("杨紫dfdfdfdfdf", 16));set.add(new Student("杨洋洋", 17));set.add(new Student("杨洋洋asddfassd", 17));for (Student student : set) {System.out.println(student);}}
}
class  Student implements Comparable<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;}@Overridepublic int compareTo(Student o) {int num1=this.name.length()-o.name.length();int num2=num1==0?this.name.compareTo(o.name):num1;int num3=num2==0?this.age-o.age:num2;return num3;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

比较器排序

public class Demo {public static void main(String[] args) {TreeSet<Student> set = new TreeSet<>(new Comparator<Student>() {@Overridepublic int compare(Student s1, Student s2) {int num=s1.getAge()-s2.getAge();int num2=num==0?s1.getName().compareTo(s2.getName()):num;return num2;}});set.add(new Student("杨超越asdfasfd", 20));set.add(new Student("杨超越2", 20));set.add(new Student("杨超越sdfsdf", 20));set.add(new Student("杨子涵", 22));set.add(new Student("王祖贤", 22));set.add(new Student("王祖贤", 23));set.add(new Student("杨树林sss", 25));set.add(new Student("杨康sss", 29));set.add(new Student("杨过ssssssssss", 23));set.add(new Student("杨梅sssssssssssssssssssssssssssssss", 18));set.add(new Student("杨紫dfdfdfdfdf", 16));set.add(new Student("杨洋洋", 17));set.add(new Student("杨洋洋asddfassd", 17));for (Student student : set) {System.out.println(student);}}
}
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;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}
class MyCompareTor implements Comparator<Student>{@Overridepublic int compare(Student s1, Student s2) {int num=s1.getAge()-s2.getAge();int num2=num==0?s1.getName().compareTo(s2.getName()):num;return num2;}
}

Java-Set集合相关推荐

  1. java 数组集合转换_Java 实例 – 集合转数组

    Java 实例 - 集合转数组 以下实例演示了如何使用 Java Util 类的 list.add() 和 list.toArray() 方法将集合转为数组: /* author by w3cscho ...

  2. java icomparer_集合数据处理(C#、JavaScript 和 Java)

    Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...

  3. java中集合的区别_Java中的集合与集合之间的区别

    Java收集框架用于操纵对象的收集.收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等. 集合是Java集合框架中的接口.它分为两部分-Java ut ...

  4. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  5. java中集合的排序

    java中集合的排序 import java.util.Set; import java.util.HashSet; import java.util.List; import java.util.A ...

  6. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  7. java各种集合的线程安全

    转载自  java各种集合的线程安全 线程安全 首先要明白线程的工作原理,jvm有一个main memory,而每个线程有自己的working  memory,一个线程对一个variable进行操作时 ...

  8. Java Map集合面试题汇总

    转载自 Java Map集合面试题汇总 1. 你都知道哪些常用的Map集合? 2.Collection集合接口和Map接口有什么关系? 3.HashMap是线程安全的吗?线程安全的Map都有哪些?性能 ...

  9. java 读取集合到流中_Java 10:将流收集到不可修改的集合中

    java 读取集合到流中 Java 10引入了几种新方法来促进不可修改集合的创建. List.copyOf , Set.copyOf和Map.copyOf方法从现有实例创建新的集合实例. 例如: Li ...

  10. java中集合选取怎么选_集合中的可选

    java中集合选取怎么选 有时有人认为Optional类型值得在集合中使用. 据称,它解决了以下问题: HashMap在没有键映射以及值null映射到键的情况下返回null . 如果使用Map< ...

最新文章

  1. 1196: 数星星(二)(结构体专题)_福利:最新导数6大专题!高分段提分有困扰?听北大状元漫谈提分...
  2. 人生曲线——我们不拥有将来,只拥有此刻
  3. 你知道标志着团队已经敏捷化的8个信号吗?
  4. AI芯片的过去、现在与未来
  5. OpenCV实时美颜摄像并生成H264视频流
  6. Handler-接受子线程数据更新UI主线程;非主线程通信--HandlerThread
  7. qt解析html的数据,windows下用QTwebkit解析html
  8. SpringBoot项目的 log4j漏洞解决—JeecgBoot
  9. Django:Web框架,WSGI,WSGI实现浏览器与服务器通信,路由route,WSGI实现页面访问
  10. 2019-11-24转载Ganglia 安装和使用
  11. dota地图命令大全
  12. 用计算机技术辅助语文教学,利用计算机技术辅助拼音学习“潜力无限”
  13. 训练深度学习模型时电脑自动重启
  14. 互联网开发岗实习及秋招总结
  15. 防火墙服务器搭建与应用(1.0)
  16. 动画云创始人胥克谦课程格子创始人李天放分享创业经历
  17. 知识蒸馏系列(一):三类基础蒸馏算法
  18. mysql自动排课_高校智能排课系统算法
  19. 关于DFS(分布式管理系统)——独立空间,文件夹的隶属关系和设置——安装和参数
  20. minimap2论文算法详解(主要针对RNA-seq)

热门文章

  1. python安装dlib遇到的错误:AttributeError:module ‘dlib’ has no attribute ‘get_frontal_face_detector’问题解决
  2. sdnu.1026 田忌赛马续
  3. 隐藏服务器端信息X-Powered-By: Servlet/3.0
  4. 邦纳视觉镜头LCF08LK1F
  5. 华为云计算基础之Fusion Compute介绍
  6. Bios工程师手边事—ACPI电源管理
  7. TypeScript 命名空间整理
  8. 机器学习准备数据时如何避免数据泄漏
  9. uniapp 刷新页面
  10. 通过基于模型的系统工程简化复杂性案例研究