首页 > 其他分享 >TreeSet的使用以及Comparator接口

TreeSet的使用以及Comparator接口

时间:2023-02-20 13:33:21浏览次数:50  
标签:name Comparator age System 接口 Student println out TreeSet

package edu.wtbu;

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;

public class Demo01 {
public static void main(String[] args) {
//TreeSet:存储结构:红黑树
//要求:元素必须实现Comparable接口,compareTo(); 方法的返回值为0,认为是重复元素
//创建集合
TreeSet<String> treeSet = new TreeSet<>();

//1.添加元素
treeSet.add("xyz");
treeSet.add("abc");
treeSet.add("hello");
treeSet.add("xyz");//重复,不再添加
System.out.println("元素个数:"+treeSet.size());//元素个数:3
System.out.println(treeSet);//[abc, hello, xyz]

//2.删除元素
treeSet.remove("xyz");
System.out.println("元素个数:"+treeSet.size());//元素个数:2
System.out.println(treeSet);//[abc, hello]

//3.遍历
//1.使用增强for
for (String s:
treeSet) {
System.out.println(s);
}

//2.使用迭代器
Iterator<String> iterator = treeSet.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}

//4.判断
System.out.println(treeSet.contains("abc"));//true
System.out.println(treeSet.isEmpty());//false

System.out.println("==============================");
TreeSet<Student> treeSet1 = new TreeSet<>();

//1.添加元素
Student s1 = new Student("张三", 16);
Student s2 = new Student("李四", 17);
Student s3 = new Student("王五", 18);
Student s4 = new Student("王五", 19);
Student s5 = new Student("王五", 19);
treeSet1.add(s1);
treeSet1.add(s2);
treeSet1.add(s3);
treeSet1.add(s4);
treeSet1.add(s5);//重复,不在添加
System.out.println("元素个数:"+treeSet1.size());//元素个数:4
System.out.println(treeSet1);//[Student{name='张三', age=16}, Student{name='李四', age=17}, Student{name='王五', age=18}, Student{name='王五', age=19}]

//2.删除元素
//treeSet1.remove(s1);
treeSet1.remove(new Student("张三", 16));
System.out.println("元素个数:"+treeSet1.size());//元素个数:3
System.out.println(treeSet1);//[Student{name='李四', age=17}, Student{name='王五', age=18}, Student{name='王五', age=19}]

//3.遍历
//1.使用增强for
for (Student s:
treeSet1) {
System.out.println(s);
}

//2.使用迭代器
Iterator<Student> iterator1 = treeSet1.iterator();
while (iterator1.hasNext()){
System.out.println(iterator1.next());
}

//4.判断
System.out.println(treeSet1.contains(s2));//true
System.out.println(treeSet1.isEmpty());//false

System.out.println("=========================");
//Comparator接口:实现定制比较
TreeSet<Student> treeSet2 = new TreeSet<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
int n1 = o1.getAge() - o2.getAge();
int n2 = o1.getName().compareTo(o2.getName());
return n1==0?n2:n1;
}
});
Student s8 = new Student("张三", 15);
Student s9 = new Student("李四", 17);
Student s10 = new Student("王五", 18);
treeSet2.add(s8);
treeSet2.add(s9);
treeSet2.add(s10);
System.out.println("元素个数:"+treeSet2.size());//元素个数:4
System.out.println(treeSet2);//[Student{name='张三', age=16}, Student{name='李四', age=17}, Student{name='王五', age=18}, Student{name='王五', age=19}]

//Comparator接口的应用:使用TreeSet集合实现字符串按照长度进行排序

//创建集合,并指定比较规则
TreeSet<String> treeSet3 = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
int n1 = o1.length() - o2.length();
int n2 = o1.compareTo(o2);
return n1==0?n2:n1;
}
});
treeSet3.add("hubei");
treeSet3.add("beijing");
treeSet3.add("shanghai");
treeSet3.add("tianjin");
treeSet3.add("hunan");
treeSet3.add("shandong");
System.out.println(treeSet3);//[hubei, hunan, beijing, tianjin, shandong, shanghai]

}

}


package edu.wtbu;

import java.util.Objects;

public 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;
}

@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}

// @Override
// public int hashCode() {
// int n1 = this.name.hashCode();
// int n2 = this.age;
// return n1+n2;
// }
//
// @Override
// public boolean equals(Object obj) {
// if(obj==this){
// return false;
// }
// if(obj==null){
// return false;
// }
// if(obj instanceof Student){
// Student s = (Student) obj;
// if(this.name.equals(s.getName())&&this.age==s.getAge()){
// return true;
// }
// }
// return false;
// }

//快捷键:Alt+insert+equals and (hashCode)
// @Override
// public 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);
// }
//
// @Override
// public int hashCode() {
// return Objects.hash(name, age);
// }

//先按照姓名比,再按照年龄比
@Override
public int compareTo(Student o) {
int n1 = this.getName().compareTo(o.getName());
int n2 = this.age - o.getAge();
return n1==0?n2:n1;
}
}

标签:name,Comparator,age,System,接口,Student,println,out,TreeSet
From: https://www.cnblogs.com/123456dh/p/17137043.html

相关文章

  • PHP对接chatGPT代码,openai接口对接,php 实现chatGPT功能
    前面已经说过了如何对接chatGPT的接口,下面是PHP的代码版本<?phpdefine('OPENAI_API_KEY','你的APIKEY');$prompt=$_GET['prompt'];$response=sendPostRequest($......
  • Set接口的使用
    importjava.util.HashSet;importjava.util.Iterator;importjava.util.Set;publicclassDemo01{publicstaticvoidmain(String[]args){//Set接口:无......
  • 泛型接口
    //泛型接口:接口名<T>,不能泛型静态常量publicinterfaceMyGeneric<T>{Stringname="张三";Tserver(Tt);}publicclassMyGenericImplimplementsMyGeneric......
  • NET MVC接口服务如何运行在容器中
    有些公司内部存在一些NET项目,而公司服务器后期都换成了Linux,若单纯为这一个项目占用一台Windows服务器显得极其浪费,因此需要将NET项目嵌入到Linux服务器中,为了后期方便......
  • 接口自动化测试,一键快速校验接口返回值全部字段
    大家在日常开展自动化测试工作时,为了保证接口测试的有效性,少不了要对接口返回的响应字段进行校验、断言等操作。当接口返回的字段数量本身就很少时,接口断言操作一般都很容......
  • 某保险影像上传接口浅记
    好久没写文章了,目前的工作基本不涉及到逆向,都快忘了还有这项技能了,刚好,最近遇到一个加密参数问题,浅记一下接口分析选择图片后上传图中请求为我们需要分析的接口以及加......
  • Jmeter接口测试CSV参数化
    XXX.csv文件参数举例      ......
  • Golang接口
    理解go中的接口,首先从java的入手圆形和长方形是不同形状,因此他们是两个类,circle和rectangle在java中,他们应当拥有一个公共父类,即形状shape无论哪种形状,都应当是可计算面......
  • 接口
    接口普通类:只有具体实现抽象类:具体实现和规范(抽象方法)都有!接口:只有规范!自己无法写方法。专业的约束!约束和实现分离:面向接口编程接口就是规范,定义......
  • Java 接口
    目录1、接口的概念2、接口的定义3、接口的使用4、接口和抽象类1、接口的概念类是一种具体的实现体,而接口定义了一种规范(抽象方法),接口定义了某一批类所需要遵循的规范,接口......