gpt4 book ai didi

java - 为什么在Java中重载TreeMap中的Comparable时,Keyset中只有一个Key

转载 作者:行者123 更新时间:2023-11-30 02:43:36 25 4
gpt4 key购买 nike

  1. 我尝试根据字符串的长度在 TreeMap 中进行自定义排序。如果字符串的长度相同,尽管是不同的字符串,为什么我只得到一个 Key。

  2. 我该如何解决这个问题,对 equals meth0d 有什么影响,它是否会被使用或将取代它的位置。

代码:

import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap;

public class Student implements Comparable {
int RollNo;
String Name;
public Student(int RollNo, String Name) {
this.RollNo = RollNo;
this.Name = Name;
}

public int compareTo(Object arg0) {
Student str = (Student) arg0;
return Integer.valueOf(str.Name.length()).compareTo(Integer.valueOf(this.Name.length()));
}

public static void main(String[] args) {
Map<Student, Integer> mp = new TreeMap<Student, Integer>();
mp.put(new Student(1, "Sameer"), 1);
mp.put(new Student(2, "Aameer"), 2);

for(Student st : mp.keySet()){
System.out.println((st.Name));
}
}
}

最佳答案

您的compareTo方法比较名称 String 的长度s 而不是它们的内容,所以 Student TreeMap 认为具有相同长度名称的相同.

换句话说,ComparableComparatorTreeMap 使用确定键的顺序和唯一性。

您可以通过订购 TreeMap 来解决该问题按名称长度和名称内容(当长度相等时):

public int compareTo(Object arg0) {

Student str = (Student) arg0;

int lengthComp = Integer.valueOf(str.Name.length()).compareTo(Integer.valueOf(this.Name.length()));
if (lengthComp == 0) {
// compare names if the lengths are equal
return str.Name.compareTo(this.Name);
} else {
return lengthComp;
}
}

除此之外,您的类(class)最好实现 Comparable<Student> ,这将允许您的compareTo接受 Student 的方法论证。

How do I fix this and what are the implications for the equals meth0d, will it ever be used or will compareTo take its place.

equals TreeMap 未使用,和compareTo确实取代了它的位置。

关于java - 为什么在Java中重载TreeMap中的Comparable时,Keyset中只有一个Key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40904818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com