小编Abb*_*don的帖子

HashSet包含方法,奇怪的行为

这是我的代码:

public class testGui {



    public static void main(String[] arg){
        class TESTS{
            String t;

            public TESTS(String t){
                this.t = t;
            }

            @Override
            public boolean equals(Object x){
                System.out.println("My method is called...");
                if(x instanceof TESTS){
                    TESTS zzz = (TESTS) x;
                    return zzz.t.compareTo(t)==0;
                }
                else return false;
            }
        }
        HashSet<TESTS> allItems = new HashSet<TESTS>();
        allItems.add(new TESTS("a"));
        allItems.add(new TESTS("a"));
        System.out.println(allItems.contains(new TESTS("a")));
    }

}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么hashset包含的方法不是调用我们的规范中提到的equals方法:

更正式地,如果此set不包含元素e,则将指定的元素o添加到此set中(o == null?e == null:o.equals(e))

我的代码返回false而不是进入我的equals方法.

非常感谢您的回答!

java

7
推荐指数
2
解决办法
3478
查看次数

LRU字节缓存java

我需要在java中实现具有最大大小的缓存,希望使用内存中缓存的实际大小而不是缓存中的元素数量来实现.此缓存基本上将String作为键,String作为值.我已经使用java的LinkedHashMap结构实现了缓存,但问题是如何知道缓存的实际大小,以便我可以调整策略以在大小太大时删除对象.

想要使用检测包的getObjectSize()计算它,但似乎没有按预期工作.

当我执行getObjectSize(一个字符串)时,无论字符串的大小是多少,它都返回相同的大小:32.我猜它只是使用字符串的引用大小或类似的东西,而不是内容.所以不知道如何有效地解决这个问题.

你有什么想法 ?

非常感谢!

java

5
推荐指数
1
解决办法
623
查看次数

标签 统计

java ×2