首页 > 其他分享 >58.容器_TreeMap容器的使用

58.容器_TreeMap容器的使用

时间:2024-03-27 19:22:22浏览次数:20  
标签:username 容器 return 58 TreeMap name userage public Users

TreeMap容器的使用

image-20220502150822905-16514753038931

TreeMap和HashMap同样实现了Map接口,所以,对于API的用法来说是没有区别的。HashMap效率高于TreeMap;TreeMap是可以对键进行排序的一种容器,在需要对键排序时可选用TreeMap。TreeMap底层是基于红黑树实现的。

在使用TreeMap时需要给定排序规则:

  • 元素自身实现比较规则
  • 通过比较器实现比较规则

元素自身实现比较规则

public class Users implements Comparable<Users>{
private String username;
private int userage;


public Users(String username, int userage) {
this.username = username;
this.userage = userage;
}


public Users() {
}


@Override
public boolean equals(Object o) {
System.out.println("equals...");
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;


Users users = (Users) o;


if (userage != users.userage) return false;
return username != null ? username.equals(users.username) : users.username == null;
}


@Override
public int hashCode() {
int result = username != null ? username.hashCode() : 0;
result = 31 * result + userage;
return result;
}


public String getUsername() {
return username;
}


public void setUsername(String username) {
this.username = username;
}


public int getUserage() {
return userage;
}


public void setUserage(int userage) {
this.userage = userage;
}


@Override
public String toString() {
return "Users{" +
"username='" + username + '\'' +
", userage=" + userage +
'}';
}


//定义比较规则
//正数:大,负数:小,0:相等
@Override
public int compareTo(Users o) {
if(this.userage < o.getUserage()){
return 1;
}
if(this.userage == o.getUserage()){
return this.username.compareTo(o.getUsername());
}
return -1;
}
}

 

public class TreeMapTest {
public static void main(String[] args) {
//实例化TreeMap
Map<Users,String> map = new TreeMap<>();
Users u1 = new Users("oldlu",18);
Users u2 = new Users("admin",22);
Users u3 = new Users("sxt",22);
map.put(u1,"oldlu");
map.put(u2,"admin");
map.put(u3,"sxt");
Set<Users> keys = map.keySet();
for(Users key :keys){
System.out.println(key+" --------- "+map.get(key));
}
}
}

 

public class TreeMapTest {
public static void main(String[] args) {
//实例化TreeMap
Map<Users,String> map = new TreeMap<>();
Users u1 = new Users("oldlu",18);
Users u2 = new Users("admin",22);
Users u3 = new Users("sxt",22);
map.put(u1,"oldlu");
map.put(u2,"admin");
map.put(u3,"sxt");
Set<Users> keys = map.keySet();
for(Users key :keys){
System.out.println(key+" --------- "+map.get(key));
}
}
}

通过比较器实现比较规则

public class Student {
private String name;
private int age;


public Student(String name, int age) {
this.name = name;
this.age = age;
}


public Student() {
}


@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", 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 boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;


Student student = (Student) o;


if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}


@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
}

 

public class StudentComparator implements Comparator<Student> {


//定义比较规则
@Override
public int compare(Student o1, Student o2) {
if(o1.getAge() > o2.getAge()){
return 1;
}
if(o1.getAge() == o2.getAge()){
return o1.getName().compareTo(o2.getName());
}
return -1;
}
}

 

public class TreeMapTest {
public static void main(String[] args) {
Map<Student,String> treeMap = new TreeMap<>(new StudentComparator());
Student s1 = new Student("oldlu",18);
Student s2 = new Student("admin",22);
Student s3 = new Student("sxt",22);
treeMap.put(s1,"oldlu");
treeMap.put(s2,"admin");
treeMap.put(s3,"sxt");
Set<Student> keys1 = treeMap.keySet();
for(Student key :keys1){
System.out.println(key+" ---- "+treeMap.get(key));
}
}
}

实时效果反馈

1.TreeMap可以对容器中的排序?

A 对Key排序;

B 对Value排序;

C 对Key与Value同时排序;

D 对指定的Key与Value进行排序;

答案

1=>A

标签:username,容器,return,58,TreeMap,name,userage,public,Users
From: https://www.cnblogs.com/FocusOnGood/p/17830180.html

相关文章

  • [docker] 浅谈Docker:网络模式及从容器内部访问宿主机的IP地址
    0序本文系转载参考文献,属于非原创的笔记类博文。最新结论:从Docker容器内部访问宿主的IP地址的几种方法,推荐基于Bridge模式+--link访问别的服务+172.16.0.1(访问宿主机)。1Docker的网络模式docker是比较流行的容器技术,docker镜像方便程序员对应用统一的要求,打包部......
  • [docker] 浅谈Docker:Docker容器中环境变量的应用
    0序1设置环境变量1.1场景:在Dockerfile中设置环境变量在构建Docker镜像时,可以在Dockerfile中使用ENV指令来设置环境变量ENVMY_ENV_VAR="ABC123"ENV指令用于设置环境变量,语法为ENV<key><value>ENV<key>=<value>1.2场景:使用dockerrun命令设置环境变量使用d......
  • 【C++从0到1-黑马程序员】STL容器(一)
    ​​​​​​C++从0到1-黑马程序员课程学习笔记课程链接:23string容器-构造函数_哔哩哔哩_bilibili1.String容器1.1string基本概念本质:string是C++风格的字符串,而string本质上是一个类string和char*的区别:char*是一个指针string是一个类,类内部封装了char*,管理这......
  • 前端学习-UI框架学习-Bootstrap5-002-容器
    菜鸟教程链接固定宽度.container类用于创建固定宽度的响应式页面。<divclass="container"><h1>我的第一个Bootstrap页面</h1><p>这是一些文本。</p></div>100%宽度.container-fluid类用于创建一个全屏幕尺寸的容器,容器始终跨越整个屏幕宽度(width始终为100%):......
  • laravel 容器的底层原理&聚簇索引和非聚簇索引的区别&面试心得
    1.laravel容器的底层原理Laravel容器的实现原理是基于PHP的反射机制和依赖注入(DependencyInjection)的思想。在Laravel中,容器(Container)是一个用于解决类之间依赖关系的工具。它负责实例化对象,并处理对象之间的依赖关系。容器的实现原理主要包括以下几个步骤:注册绑定:通过容器......
  • [题解]P5858 Golden Sword
    P5858「SWTR-3」GoldenSword第一道自己想出递推公式并且成功\(AC\)的\(dp\)绿题。题意简述有\(n\)种原料,每个原料有一个耐久度\(a[i]\),必须按照\(1,2,…,n\)的顺序放入炼金锅。但是炼金锅的容量是有限的,只有\(w\),所以在每次放入原料之前,都可以选择取出\(0\sims\)个原料再放......
  • 【IT老齐058】Zookeeper解决分布式系统商品库存超卖问题
    【IT老齐058】Zookeeper解决分布式系统商品库存超卖问题场景解决方案传统的synchronized是无效的,它只针对一个JVM进程内多个线程起到同步作用,对跨进程无效。利用数据库select...forupdate语句对库存进行锁定,依赖数据库自身特性,遇到跨库(分库分表)处理起来比较麻烦。利用......
  • 创新无限,引领未来——RK3588开源笔记本震撼登场!
    创新无限,引领未来——RK3588开源笔记本震撼登场!尊敬的科技达人们,你是否已经厌倦了传统的笔记本电脑?是否渴望拥有一款能够完全按照自己意愿定制的开源笔记本?现在,我们自豪地宣布,基于强大的RK3588芯片,一款创新的开源笔记本正式亮相!强大性能RK3588是瑞芯微电子推出的一款高......
  • flex布局,目前主流,其他的了解一下就行。下面实现让元素去容器的两端。和垂直居中。
    <style>.div{width:100px;height:100px;background-color:red;}.divdiv{width:20px;height:20px;background-color:blue;}</style><divclass="div"style="......
  • 【C++】常用序列式容器迭代器自增效率实测
    常用序列式容器包括vector、list、deque。本篇文章就来评析它们的迭代器,不同自增方式效率的不同。在看这篇文章之前,大家可以先看看这篇文章:【C++】自增运算符重载及其效率问题-CSDN博客,了解一下之前得出的结果。前面的文章其中一个结论是,在自定义类型的自增(自减)运算符重载......