gpt4 book ai didi

java - 关于泛型和集合的核心java

转载 作者:行者123 更新时间:2023-12-01 07:54:21 26 4
gpt4 key购买 nike

class ByValue<String, Integer extends Comparable<Integer>> implements Comparator<Map.Entry<String, Integer>> {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}

这是按值对 map 进行排序的代码,该代码工作正常,但我对这里使用的基本 java 技术和语法有一些疑问,

首先,我无法理解 class ByValue<String, Integer extends Comparable<Integer>> 。我们是否在声明类时使该类通用,因为我仅在方法中使用了这个通用的东西,或者我们基本上在这里做什么?

第二件事是我可以使用 Map.Entry<String, Integer>Entry<String, Integer>这两种说法有什么区别?两者在代码中都对我来说工作得很好。

最佳答案

Are we making the class generic while declaring it,because i used this generic thing in methods only, or what we are doing basically here?

是的,像这样定义的类是通用的,它的类型参数称为 IntegerString 。然而,这些不是类型 java.lang.Integerjava.lang.String - 像这样定义的参数遮蔽实际类型 java.lang.Integerjava.lang.String ,所以我建议您遵循众所周知的使用单个大写字母命名类型参数的方法:

class ByValue<T, U extends Comparable<Integer>> implements Comparator<Map.Entry<T, U>> {
public int compare(Map.Entry<T, U> o1, Map.Entry<T, U> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}

这样,您可以注意到,您的(通用)类没有实现 Comparator<Map.Entry<String, Integer>> 。如果您确实需要它,实际上不需要该类是通用的,而只需实现 Comparator接口(interface),用特定类型参数化:

class ByValue implements Comparator<Map.Entry<String, Integer>> {
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o1.getValue().compareTo(o2.getValue());
}
}
<小时/>

Second thing is I can either use Map.Entry or Entry what is the difference between these two statements here?

没有实际区别。如果您有import像这样的声明:

import java.util.Map.Entry;

那么你可以使用Entry ,而不指出定义它的类(在本例中为 Map )。

关于java - 关于泛型和集合的核心java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32126856/

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