当前位置: 首页 > news >正文

集合框架14:TreeSet概述、TreeSet使用、Comparator接口及举例

视频链接:13.29 TreeSet概述_哔哩哔哩_bilibiliicon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from=333.788.videopod.episodes&vd_source=b5775c3a4ea16a5306db9c7c1c1486b5&p=29

1、TreeSet概述

  • 基于排列顺序实现元素不重复;
  • 实现了SortedSet接口,对元素集合自动排序;
  • 元素的接口必须实现Comparable接口,指定排序规则;
  • 通过comparaTo 方法确定元素是否为重复;

2.TreeSet添加基本类型元素使用举例

package com.yundait.demo02;import java.util.Iterator;
import java.util.TreeSet;public class TreeSetDemo01 {public static void main(String[] args) {//创建TreeSet集合TreeSet<String> strings = new TreeSet<>();//1添加元素strings.add("xyz");strings.add("abc");strings.add("beijing");//strings.add("xyz");//不能添加重复元素System.out.println(strings.size());System.out.println(strings.toString());//2删除元素//strings.remove("xyz");System.out.println(strings.size());//3遍历集合元素for (String string : strings) {System.out.println(string);}System.out.println("-----------------");Iterator<String> iterator = strings.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}//4判断System.out.println("-----------------");System.out.println(strings.contains("beijing"));System.out.println(strings.isEmpty());}
}

3.TreeSet集合添加引用类型元素举例

package com.yundait.demo02;import java.util.Iterator;
import java.util.TreeSet;/**** 使用TreeSet保存数据*村存储结构:红黑树;* 要求:元素必须要实现Comparable接口,当compareTo方法返回值为0,则认为是重复元素;*/public class TreeSetDemo02 {public static void main(String[] args) {//创建集合TreeSet<Person> people = new TreeSet<>();//1添加元素Person p1 = new Person("abc", 20);Person p2 = new Person("xyz", 20);Person p3 = new Person("nanjing", 20);Person p4 = new Person("nanjing", 19);Person p5 = new Person("nanjing", 19);people.add(p1);people.add(p2);people.add(p3);people.add(p4);people.add(p5);//因为compareTo方法返回值为0,认为是重复元素,不能添加System.out.println("集合元素的个数为:" + people.size());System.out.println(people.toString());//2删除元素//people.remove(p1);//people.remove(new Person("abc",20));//因为重写了comparable方法,所以以上两种删除方式都可以实现;System.out.println(people.toString());System.out.println("删除后元素的个数为:" + people.size() );//3遍历集合//3.1使用增强for循环for(Person person : people){System.out.println(person);}//3.2使用迭代器System.out.println("---------------------");Iterator<Person> iterator = people.iterator();while (iterator.hasNext()){System.out.println(iterator.next());}//4判断System.out.println(people.isEmpty());System.out.println(people.contains(new Person("nanjing", 19)));}
}

想要添加成功元素需要实现Comparable接口,重写接口中的compareTo 方法

public class Person implements Comparable<Person> {//元素实现Comparable接口private String name;private int age;public Person() {}public Person(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 "Person{" +"name='" + name + '\'' +", age=" + age +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (!(o instanceof Person)) return false;Person person = (Person) o;return getAge() == person.getAge() && Objects.equals(getName(), person.getName());}@Overridepublic int hashCode() {return Objects.hash(getName(), getAge());}@Override//重写comparaTo方法public int compareTo(Person o) {int n1 = this.getName().compareTo(o.getName());int n2 = this.age - o.age;return n1 == 0 ? n2 : n1;}
}

4.Comparator接口

package com.yundait.demo02;import java.util.Comparator;
import java.util.TreeSet;public class TreeSetDemo03 {public static void main(String[] args) {TreeSet<Person> people = new TreeSet<>(new Comparator<Person>() {//创建集合时,使用匿名内部类实现Comparator接口重写接口中的compare方法,自定义比较规则@Overridepublic int compare(Person o1, Person o2) {int n1 = o1.getAge() - o2.getAge();int n2 = o1.getName().compareTo(o2.getName());return n1 == 0 ? n2 : n1;}});Person p1 = new Person("abc", 28);Person p2 = new Person("xyz", 15);Person p3 = new Person("nanjing", 29);Person p4 = new Person("nanjing", 15);people.add(p1);people.add(p2);people.add(p3);people.add(p4);System.out.println(people.toString());}
}

5.小案例

/*** 案例需求:使用TreeSet集合实现字符串元素按照长度进行排序* Comparator接口实现比较;*/
public class TreeSetDemo04 {public static void main(String[] args) {TreeSet<String> strings = new TreeSet<>(new Comparator<String>() {@Overridepublic int compare(String o1, String o2) {int n1 = o1.length() - o2.length();int n2 = o1.compareTo(o2);return n1==0?n2:n1;}});strings.add("HelloWorld");strings.add("pingguo");strings.add("lisi");strings.add("zhangsan");strings.add("beijing");strings.add("cat");strings.add("nanjing");strings.add("xian");System.out.println(strings.toString());}
}


http://www.mrgr.cn/news/54902.html

相关文章:

  • 浏览器实时更新esp32-c3 Supermini http server 数据
  • 基于Multisim8路彩灯循环控制电路设计与仿真
  • 暴雨亮相第四届岩土力学与工程青年科学家论坛
  • 用Spring AI 做智能客服,基于私有知识库和RAG技术
  • MATLAB电车(宝马 i3)卸载电池再利用电气模型分析
  • django连接mysql数据库
  • 基于深度学习的地形分类与变化检测
  • 快速学会一个算法:Faster R-CNN进行目标检测!
  • leetcode day1
  • resnetv1骨干
  • 轮班管理新策略,提高效率与降低员工抱怨
  • Vue3中使用自定义指令实现后台管理系统中对于按钮权限的控制
  • 五年三次冲刺IPO失败,企业业绩成长性恐不足,三年分红约1.5亿元
  • 对比迁移项目的改动
  • 值得收藏学习的人工智能学习框架!
  • 【重学 MySQL】七十三、灵活操控视图数据,轻松掌握视图删除技巧
  • DFF对比
  • SpringBoot运维
  • FHQtreap新模板
  • 诊断知识:NRC78(Response Pending)的回复时刻
  • @RequestMapping(“/api/users“)详细解释一下这行代码
  • 【云从】八、HTTPS流程与建站
  • Redux (八) 路由React-router、嵌套路由、路由传参、路由懒加载
  • 【Android】浅析OkHttp(1)
  • MySQL-29.事务-四大特性
  • web3学习-区块链基础知识