LinkedHashSet.contains()在返回false时返回true

时间:2015-08-20 12:36:43

标签: java android linkedhashset

public class MyClass extends Activity {
    public static final String DEFAULT_ID = "def";
    public static final LinkedHashSet<String> DEF_IDS = new LinkedHashSet<>(Arrays.asList(DEFAULT_ID));

    private boolean isDefault(String currentId) {
        Log.v(TAG,"isdefault("+currentId+") = " + DEF_IDS.contains(currentId));
        return DEF_IDS.contains(currentId);
    }
}

在日志中:

isdefault(profile0) = true

WTF?如果DEF_IDS不包含“profile0”,为什么它说它包含?

2 个答案:

答案 0 :(得分:0)

错误不在您发布的代码中。以下产生预期结果。

public static final String DEFAULT_ID = "def";
public static final LinkedHashSet<String> DEF_IDS = new LinkedHashSet<>(Arrays.asList(DEFAULT_ID));

private static boolean isDefault(String currentId) {
    return DEF_IDS.contains(currentId);
}

private void test(String def) {
    System.out.println("isDefault(" + def + ") = " + isDefault(def));
}

public void test() {
    test("def");
    test(DEFAULT_ID);
    test("NOT");
}

通过打印

isDefault(def) = true
isDefault(def) = true
isDefault(NOT) = false

答案 1 :(得分:0)

执行下面的代码,它给了我正确的结果 问题似乎是你使用静态的LinkedHashSet并且它将保留以前的值,直到你不会明确地清除它,即只初始化一次。

添加更多详细信息或关闭您的问题,因为它一点也不清楚,并且不提供有关您使用此代码的具体方式的完整背景。

  public static final String DEFAULT_ID = "def";
            public static final LinkedHashSet<String> DEF_IDS = new LinkedHashSet<>(Arrays.asList(DEFAULT_ID));


        public static void main(String[] args){
            isDefault("profile0");
        } 
            private static boolean isDefault(String currentId) {
               System.out.println("isdefault("+currentId+") = " + DEF_IDS.contains(currentId));
                return DEF_IDS.contains(currentId);
            }
  

输出: - isdefault(profile0)= false