集合——Set

Set接口

特点:无序且不可重复

实现类:

  1. HashSet
  2. LinkedHashSet
  3. TreeSet

1.LikedHashSet

1.1 常用方法:

package com.study.linkedhashset;import java.util.LinkedHashSet;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;public class Test01 {public static void main(String[] args) {/*** 知识点:使用LinkedHashSet方法* * 特点:去重+有序*/LinkedHashSet<String> set = new LinkedHashSet<>();//添加元素set.add("麻生希");set.add("椎名空");set.add("爱田奈奈");set.add("三上悠亚");set.add("明日花绮罗");//获取元素的个数int size = set.size();System.out.println("获取元素的个数:" + size);//5LinkedHashSet<String> newSet1 = new LinkedHashSet<>();Collections.addAll(newSet1, "aaa","bbb","ccc","明日花绮罗");//利用集合工具类进行批量添加set.addAll(newSet1);//将新集合中所有的元素添加到指定集合的末尾//清空集合中所有的元素//set.clear();System.out.println("判断集合中是否包含某个元素:" + set.contains("椎名空"));//trueLinkedHashSet<String> newSet2 = new LinkedHashSet<>();Collections.addAll(newSet2, "eee","ddd","fff","ggg");//利用集合工具类进行批量添加System.out.println("判断集合中是否包含某个集合中所有元素:" + set.containsAll(newSet2));//falseboolean empty = set.isEmpty();//有元素-false 没有元素-trueSystem.out.println("判断集合中是否没有元素:" + empty);//false//删除set.remove("爱田奈奈");//依据元素删除元素//删除 - 去交集LinkedHashSet<String> newSet3 = new LinkedHashSet<>();Collections.addAll(newSet3, "fff","aaa","bbb","xxx");//利用集合工具类进行批量添加set.removeAll(newSet3);//保留交集 LinkedHashSet<String> newSet4 = new LinkedHashSet<>();Collections.addAll(newSet4, "小明","小红","椎名空","爱田奈奈","三上悠亚","yyy");//利用集合工具类进行批量添加set.retainAll(newSet4);//将集合转换为数组Object[] array = set.toArray();System.out.println(Arrays.toString(array));System.out.println("-------------");//遍历 - foreachfor (String element : set) {System.out.println(element);}System.out.println("-------------");//遍历 - Iterator迭代器Iterator<String> it = set.iterator();//获取Iterator迭代器对象while(it.hasNext()){//判断是否有可迭代的元素String e = it.next();//返回下一个元素System.out.println(e);}    }
}

2.TreeSet

2.1 特点:

常用方法与LinkedHashSet一致,它是自然排序

2.2 TreeSet排序

需求1:

创建两个TreeSet对象,分别存Integer、String,感受排序

package com.study.treeset;import java.util.Iterator;
import java.util.TreeSet;public class Test01 {public static void main(String[] args) {//TreeSet排序//TreeSet存Integer:数字排序TreeSet<Integer> set1 = new TreeSet<Integer>();set1.add(2);set1.add(5);set1.add(4);set1.add(1);set1.add(3);set1.add(6);for (Integer integer : set1) {System.out.println(integer);//1 2 3 4 5 6}System.out.println("-------------");//TreeSet存String:字典排序TreeSet<String> set2 = new TreeSet<String>();set2.add("A");set2.add("C");set2.add("B");set2.add("E");set2.add("D");Iterator<String> it = set2.iterator();while(it.hasNext()) {String element = it.next();System.out.println(element);//A B C D E}}
}
1
2
3
4
5
6
-------------
A
B
C
D
E

需求2:

创建TreeSet对象,存储Student,并用内置比较器按照学生年龄大小后输出

代码实现:

package com.study.treeset;import java.util.TreeSet;public class Test02 {public static void main(String[] args) {//创建TreeSet对象,存储StudentTreeSet<Student> set = new TreeSet<>();set.add(new Student("麻生希", '女', 26, "2107", "001"));set.add(new Student("北岛玲", '女', 31, "2107", "002"));set.add(new Student("水菜类", '女', 29, "2107", "003"));set.add(new Student("樱井步", '女', 26, "2107", "004"));set.add(new Student("朝桐光", '女', 33, "2107", "005"));set.add(new Student("椎名空", '女', 29, "2107", "006"));set.add(new Student("爱田奈奈", '女', 34, "2107", "007"));set.add(new Student("水野朝阳", '女', 26, "2107", "008"));set.add(new Student("小峰由衣", '女', 29, "2107", "009"));set.add(new Student("古川伊织", '女', 25, "2108", "001"));set.add(new Student("吉泽明步", '女', 27, "2108", "002"));set.add(new Student("三上悠亚", '女', 24, "2108", "003"));set.add(new Student("深田咏美", '女', 24, "2108", "004"));set.add(new Student("泷泽萝拉", '女', 29, "2108", "005"));set.add(new Student("濑亚美莉", '女', 29, "2108", "006"));for (Student stu : set) {System.out.println(stu);}}
}package com.study.treeset;public class Student implements Comparable<Student>{private String name;private char sex;private int age;private String classId;private String id;public Student() {}public Student(String classId, String id) {this.classId = classId;this.id = id;}public Student(String name, char sex, int age, String classId, String id) {this.name = name;this.sex = sex;this.age = age;this.classId = classId;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public char getSex() {return sex;}public void setSex(char sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}public String getId() {return id;}public void setId(String id) {this.id = id;}@Overridepublic boolean equals(Object obj) {if(this == obj){return true;}if(obj instanceof Student){Student stu = (Student) obj;if(this.classId.equals(stu.classId) && this.id.equals(stu.id)){return true;}}return false;}@Overridepublic String toString() {return name + "\t" + sex + "\t" + age + "\t" + classId + "\t" + id;}//按照年龄排序@Overridepublic int compareTo(Student o) {//     if(this.getAge() > o.getAge()) {//          return 1;
//      }
//      if(this.getAge() < o.getAge()) {//          return -1;
//      }
//      return 0;return this.getAge() - o.getAge();}
}
三上悠亚 女   24  2108    003
古川伊织    女   25  2108    001麻生希  女   26  2107    001
吉泽明步    女   27  2108    002水菜类  女   29  2107    003北岛玲  女   31  2107    002朝桐光  女   33  2107    005
爱田奈奈    女   34  2107    007

需求3:

创建TreeSet对象,存储Student,并用外置比较器按照名字长度排序,长度一致按照年龄排序

代码实现:

package com.study.treeset;import java.util.Comparator;
import java.util.TreeSet;public class Test03 {public static void main(String[] args) {//按照名字长度排序,长度一致按照年龄排序TreeSet<Student> set = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student o1, Student o2) {if(o1.equals(o2)){return 0;}if(o1.getName().length() != o2.getName().length()){return o1.getName().length() - o2.getName().length();}if(o1.getAge() != o2.getAge()){return o1.getAge() - o2.getAge();}return 1;}});set.add(new Student("麻生希", '女', 26, "2107", "001"));set.add(new Student("北岛玲", '女', 31, "2107", "002"));set.add(new Student("水菜类", '女', 29, "2107", "003"));set.add(new Student("樱井步", '女', 26, "2107", "004"));set.add(new Student("朝桐光", '女', 33, "2107", "005"));set.add(new Student("椎名空", '女', 29, "2107", "006"));set.add(new Student("爱田奈奈", '女', 34, "2107", "007"));set.add(new Student("水野朝阳", '女', 26, "2107", "008"));set.add(new Student("小峰由衣", '女', 29, "2107", "009"));set.add(new Student("古川伊织", '女', 25, "2108", "001"));set.add(new Student("吉泽明步", '女', 27, "2108", "002"));set.add(new Student("三上悠亚", '女', 24, "2108", "003"));set.add(new Student("深田咏美", '女', 24, "2108", "004"));set.add(new Student("泷泽萝拉", '女', 29, "2108", "005"));set.add(new Student("濑亚美莉", '女', 29, "2108", "006"));for (Student stu : set) {System.out.println(stu);}}
}
 麻生希 女   26  2107    001樱井步  女   26  2107    004水菜类  女   29  2107    003椎名空  女   29  2107    006北岛玲  女   31  2107    002朝桐光  女   33  2107    005
三上悠亚    女   24  2108    003
深田咏美    女   24  2108    004
古川伊织    女   25  2108    001
水野朝阳    女   26  2107    008
吉泽明步    女   27  2108    002
小峰由衣    女   29  2107    009
泷泽萝拉    女   29  2108    005
濑亚美莉    女   29  2108    006
爱田奈奈    女   34  2107    007

内置比较器与外置比较器的区别:

内置比较器Student类要实现Comparable接口,重写CompareTo()方法

外置比较器在定义TreeSet集合时,使用匿名内部类实现Comparator接口

外置比较器优先于内置比较器

java集合——Set相关推荐

  1. java 集合 接口_Java集合之Collection接口

    1 - Java集合介绍 /* 1. 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象 的操作,就要对对象进行存储. 2. 另一方面,使用Array存储对象方面具有一些弊 端,而 ...

  2. java 头尾 队列_超详细的java集合讲解

    1 集合 1.1 为什么会出现集合框架 [1] 之前的数组作为容器时,不能自动拓容 [2] 数值在进行添加和删除操作时,需要开发者自己实现添加和删除. 1.2 Collection接口 1.2.1 C ...

  3. java集合总结_Java中集合总结

    Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而 ...

  4. 考考基础部分,谈谈Java集合中HashSet的原理及常用方法

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:工匠初心 cnblogs.com/LiaHon/p/1125 ...

  5. Java集合框架综述,这篇让你吃透!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:平凡希 cnblogs.com/xiaoxi/p/60899 ...

  6. 【Java集合框架】ArrayList类方法简明解析(举例说明)

    本文目录 1.API与Java集合框架 2.ArrayList类方法解析 2.1 add() 2.2 addAll() 2.3 clear() 2.4 clone() 2.5 contains() 2 ...

  7. Java基础篇:Java集合

    文章目录 1.概述 2.Collection接口 2.1 Collection接口方法 2.2 Iterator迭代器接口 2.3 Collection子接口之:List接口 2.4 Collecti ...

  8. java奇怪的问题_一个奇怪的Java集合问题

    int size = list.size(); Integer existIndex = -1; for (int index = 0; index < size; index++) { Pho ...

  9. Java集合框架的知识总结(1)

    Java集合框架的知识总结(1) 所有集合类都位于java.util包下.集合中只能保存对象(保存对象的引用变量). Java的集合类主要由两个接口派生而出:Collection和Map,Collec ...

  10. java集合框架史上最详解(list set 以及map)

    title: Java集合框架史上最详解(list set 以及map) tags: 集合框架 list set map 文章目录 一.集合框架总体架构 1.1 集合框架在被设计时需满足的目标 1.2 ...

最新文章

  1. JAVA中类似C中memcpy功能
  2. IDT系列:(一)初探IDT,Interrupt Descriptor Table,中断描述符表
  3. MySQL批量查询能返回集合吗_JDBC——查询多条记录,返回对应的对象的集合;查询一条记录,返回对应的对象...
  4. 新建VHDL的Vivado工程
  5. outlook恢复已删除邮件
  6. pythonfor循环例句_Python for 循环语句
  7. Mybatis核心配置文件SqlMapConfig.xml
  8. c语言 选择结构,C语言学习:选择结构
  9. 每天一个linux命令(55)--at命令
  10. 公司内网与外网连通中的一些小问题(达内)
  11. 图形化UDP发包小工具
  12. 2020寒假第二周总结
  13. 全面理解ERP和APS:用饭局的例子说明,MRP 还是APS
  14. Godot Engine:格斗游戏中的必杀技(大招/绝招/特殊技/Special Move )输入系统实现
  15. n-魔方阵(找规律)
  16. 2023北京工业大学计算机考研信息汇总
  17. leetcode-169. Majority Element
  18. java中文处理学习:Hello Unicode
  19. docker启动ssh、xrdp命令
  20. Datalogic得利捷将携新品Memor 11系列移动终端亮相2023中国零售业博览会

热门文章

  1. 带有serpstack的实时Google搜索结果API
  2. Fansblog HDU - 6608
  3. 5、C++结构体的使用
  4. 分享 outlook 附件被禁止访问的解决方法
  5. Linux脚本方式修改Mac地址,两种修改Linux系统中MAC地址的方法
  6. 2022年前端面试集锦
  7. Hive 优化(通用版)
  8. 哈工大计算机学院学号,【复试机试内容回忆汇总帖】2019年哈尔滨工业大学计算机考研...
  9. 超微服务器硬盘红灯_服务器硬盘亮红灯崩溃怎么办?数据丢失都是怎么找回的...
  10. TIA博途中OB86组织块的功能和使用方法