相关疑难解决方法(0)

比较器和等号()

假设我需要TreeSet使用某些域逻辑排序的元素.通过这个逻辑,一些元素的顺序并不重要,因此比较方法可以返回0,但在这种情况下我无法将它们放入TreeSet.

所以,问:我将从这样的代码中得到什么缺点:

class Foo implements Comparable<Foo>{}
new TreeSet<Foo>(new Comparator<Foo>(){
    @Override
    public int compare(Foo o1, Foo o2) {
        int res = o1.compareTo(o2);
        if(res == 0 || !o1.equals(o2)){
            return o1.hashCode() - o2.hashCode();
        }
        return res;
    }
});
Run Code Online (Sandbox Code Playgroud)

更新:

好.如果它应该永远是方法之间的一致性equals(),hashcode()并且compareTo(),作为@SPFloyd - seanizer和其他人说.如果它会更好,甚至是很好的,如果我将删除Comparable界面和移动这样的逻辑Comparator(我能做到这一点不破封装)?所以它将是:

class Foo{}
new TreeSet<Foo>(new Comparator<Foo>(){
    @Override
    public int compare(Foo o1, Foo o2) {
        //some logic start
        if(strictliBigger(o1, o2)){ return 1;}
        if(strictliBigger(o2, o1)){ return -1;}
        //some logic …
Run Code Online (Sandbox Code Playgroud)

java equals comparator treeset

11
推荐指数
1
解决办法
2万
查看次数

使用保留包名访问包 - 私有变量

我正在研究源代码,java.util.HashMap我想看看hashcode函数在Entrys 的内部数组(这是一个软件包私有变量)中分配密钥的效果如何.所以我java.util在我的项目中创建了一个名为查看天气I 的软件包可以欺骗编译器认为它是相同的包.令人惊讶的是它工作,我写了以下代码:

package java.util;

public class HashMapExt<K, V> extends HashMap<K, V> implements Map<K, V> {

    public static void main(String[] args) {
        HashMapExt<Integer, String> mp = new HashMapExt<Integer, String>();
        mp.put(1, "Hello");
        mp.put(2, "Map");
        mp.put(3, "Extention");
        mp.printData();
    }

    void printData() {

        System.out.println(Arrays.toString(table));
    }
}
Run Code Online (Sandbox Code Playgroud)

它成功编译但在运行时它给出了一个例外:

Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at …
Run Code Online (Sandbox Code Playgroud)

java access-modifiers

3
推荐指数
1
解决办法
1034
查看次数

标签 统计

java ×2

access-modifiers ×1

comparator ×1

equals ×1

treeset ×1