Java ArrayList包含的方法没有识别整数数据类型。

问题描述 投票:0回答:2

我正在创建一个字符串和整数混合数据类型的ArrayList。然后我使用contains方法来识别和打印特定的成员。虽然contains方法可以识别字符串,但它似乎并不能识别列表中的整数值。我如何检查混合类型列表中的整数值?

编码。

public class ArrayListClass {

    public static void main(String[] args) {
        ArrayList mixArrayList = new ArrayList();

        ArrayListClass ArrayListObj = new ArrayListClass();
        mixArrayList.add("Alpha");
        mixArrayList.add("Beta");
        mixArrayList.add("Gamma");
        mixArrayList.add("Delta");
        mixArrayList.add(1);
        mixArrayList.add(2L);
        mixArrayList.add(3.0);
        mixArrayList.add(4F);
        mixArrayList.add(ArrayListObj);

        System.out.println("mixArrayList is "+ mixArrayList);

        if (mixArrayList.contains(2)) {
            System.out.println("List contains 2");
        }
        else{
            System.out.println("List does not contain 2");
        }
        if ((mixArrayList.contains("Gamma"))) {
            System.out.println("List contains Gamma");
        }
        else{
            System.out.println("List does not contain Gamma");
        }
    }
}

输出:

===========
mixArrayList is [Alpha, Beta, Gamma, Delta, 1, 2, 3.0, 4.0, ArrayListPractice.ArrayListClass@b4c966a]
List does not contain 2
List contains Gamma

Process finished with exit code 0
java arraylist contains
2个回答
2
投票

列表是通用类。请看 教程 由Oracle。

所以,当你做以下工作时。

List<Object> list = new ArrayList<>();
list.add(2L);

这个... 2L 箱子 作为 Long2 盒作为 Integer.

所以... list.contains(2) 找寻 Integer 从而找不到你的 2L 的条目。


0
投票

这是因为 2 不等于 2L.


0
投票

我在当地的Scala REPL中尝试了一些东西。

scala> val num = new java.lang.Integer(2)
num: Integer = 2

scala> val sameNum = new java.lang.Long(2)
sameNum: Long = 2

scala> num.equals(sameNum)
res0: Boolean = false

scala> sameNum.equals(num)
res1: Boolean = false

这是相关的,因为 ArrayList<E>.contains(Object key) 电话 indexOf(Object key) 并返回true,如果给出的结果大于-1,并且 indexOf() 反过来 equals() 定义的 key 或该类的一个超类)。至少在Java 8中是这样的,我怀疑它是否有变化。

而且 Integer.equals(Object other) 检查 other 是一个实例 IntegerLong.equals(Object other) 检查 other 是一个实例 Long. 它们都是 Number的实例,所以其中一个的实例不会被 equals().

我想,如果你真的想的话,你可以制作你自己的JDK版本,其中的每个子类都可以是 Number 确定 equals() 以解开盒子中的数值,如果 other 的任何一个实例。Number 并将其作为基元进行比较。既然,毕竟。

scala> 2 == 2L
res7: Boolean = true

scala> /* and... */ 2L == 2
res8: Boolean = true

在问过自己之后,我可能很快就会放弃重写JDK的想法。"我到底需要这个干什么?"

© www.soinside.com 2019 - 2024. All rights reserved.