Search code examples
javaarraylistcontains

Java ArrayList contains method does not identify integer data type


I am creating an ArrayList with mixed data types of string and integers. Then I am using contains method to identify and print specific members. Though the contains method identifies string, it does not appear to identify integer values present in the list. How can I check for integer values in a mixed type list?

Code:

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");
        }
    }
}

Output:

===========
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

Solution

  • Lists are generic classes. See Tutorial by Oracle.

    So when you do the following:

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

    The 2L boxes as a Long, whereas 2 boxes as an Integer.

    So list.contains(2) looks for an Integer and thus won't find your 2L entry.