• J2EE从入门到入土03.Set集合


    回顾:J2EE从入门到入土02.List集合

    目录

    Set接口

    HashSet

    如何在集合中去掉重复的值?使用hashset

    HashSet测试

    TreeSet

    TreeSet测试


    Set接口

    特点:

    • Set:无序(存入和取出的循序不同故不能使用下标遍历),不重复
    • List:有序,元素不可重复

    遍历:foreach,迭代器

    扩容: 初始容量16,负载因子0.75,扩容增量1倍

    Set、Queue、List都属于Collection

     

    Set接口的实现类

    HashSet

    Set和List集合一样属于接口,无法直接创建实例化对象,需要实现类来创建,HashSet、ThreeSet都是常用的实现类

    特点

    • 非线程安全
    • HashMap支持
    • 不保证插入顺序
    • 存在于java.util包中的类,同时也被称为集合,该容器中只能存储不重复的对象
    • 它存储唯一元素并允许空值(依据对象的hashcode来确定该元素是否存在)
    • 性能参数:初始容量,负载因子(默认值: 初始容量16,负载因子0.75

    对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,因此 HashSet 的实现比较简单,相关 HashSet 的操作,基本上都是直接调用底层 HashMap 的相关方法来完成

    如何在集合中去掉重复的值?使用hashset

    1. public class SetDemo {
    2. private List<Integer> list = new ArrayList<>();
    3. @BeforeAll
    4. public void setup() {
    5. set.add(1);
    6. set.add(1);
    7. set.add(2);
    8. set.add(2);
    9. set.add(3);
    10. set.add(3);
    11. }
    12. @Test
    13. public void test01() {
    14. List<Integer> tmp = new ArrayList<>(new HashSet<Integer>(list));
    15. System.out.println(tmp);
    16. }
    17. }

    HashSet测试

    使用迭代器遍历

    1. @Test
    2. public void test02() {
    3. for(Integer e: set) {
    4. System.out.println(e);
    5. }
    6. }
    7. //使用迭代器
    8. @Test
    9. public void test03() {
    10. Iterator<Integer> it = set.iterator();
    11. while(it.hasNext()) {
    12. System.out.println(it.next());
    13. }
    14. }

    删除元素

    1. @Test
    2. public void test05() {
    3. set.remove(3);
    4. System.out.println(set);
    5. }

    TreeSet

    特点

    • 是一个包含有序的且没有重复元素的集合
    • 作用是提供有序的Set集合,自然排序(比如123456...)或者根据提供的Comparator(比较器)进行排序
    • TreeSet是基于TreeMap实现的,而ThreeMap的底层是Map(键值对)

     创建一个学生类并实现比较器接口

    1. public class Student implements Comparable<Student>{
    2. private Integer sid;
    3. private String sname;
    4. private int age;
    5. public Student(Integer sid, String sname, int age) {
    6. super();
    7. this.sid = sid;
    8. this.sname = sname;
    9. this.age = age;
    10. }
    11. public Integer getSid() {
    12. return sid;
    13. }
    14. public void setSid(Integer sid) {
    15. this.sid = sid;
    16. }
    17. public String getSname() {
    18. return sname;
    19. }
    20. public void setSname(String sname) {
    21. this.sname = sname;
    22. }
    23. public int getAge() {
    24. return age;
    25. }
    26. public void setAge(int age) {
    27. this.age = age;
    28. }
    29. }

    TreeSet测试

    1. @Test
    2. public void test04() {
    3. TreeSet<Student> stu = new TreeSet<>();
    4. stu.add(new Student(1,"zs", 18));
    5. stu.add(new Student(1,"zs", 18));
    6. stu.add(new Student(2,"ls", 19));
    7. stu.add(new Student(4,"lihao", 10));
    8. stu.add(new Student(7,"lihao", 18));
    9. stu.add(new Student(5,"zengfanyan", 20));
    10. stu.add(new Student(3,"we", 30));
    11. for(Student s: stu) {
    12. System.out.println(s);
    13. }
    14. }

    输出结果为

     

  • 相关阅读:
    创建Asp.net MVC项目实现视图页面数据传值显示
    QT发送Get请求并返回内容
    window安装rust
    端午节节日PPT模板
    node.js+elementUI+echarts前后端分离全栈项目
    第6章 MyBatis框架入门详解(1)
    YOLOv7芒果独家首发改进新主干:目标检测新范式骨干PPHGNetv2改进版,充分融合信息特征,提升YOLOv7检测能力
    java计算机毕业设计springboot+vue服装商城-服装销售网站
    Hadoop环境安装与配置
    vue + el-checkbox 单选功能
  • 原文地址:https://blog.csdn.net/github_67177094/article/details/125513490