java - .contains() 运算符不适用于带对象的 ArrayList

标签 java arraylist

我正在使用以下代码:

final UnassignedSubjectData selsub = (UnassignedSubjectData) spinSelectSubject
            .getSelectedItem();
ArrayList<UnassignedSubjectData> selectedSubjectList = null;
    if (selsubdata != null) {
        selectedSubjectList = new ArrayList<UnassignedSubjectData>(
                Arrays.asList(selsubdata));
        Log.d(LOGTAG, "Check " + selsub.toString());
        Log.d(LOGTAG, "Check " + selectedSubjectList.toString());
        Log.d(LOGTAG, "Result for if "
                + Arrays.asList(selsubdata).contains(Arrays.asList(selsub)));
if (selectedSubjectList.contains(Arrays.asList(selsub))) {
            CustomToast.showCustomToast(this,
                    "Subject already present in list");
            Log.d(LOGTAG,
                    "IN IF after TOAST " + selectedSubjectList.toString());
            return;
        }
        else
            Log.d(LOGTAG, "Showing subject not in list");
    }

selsubUnassignedSubjectData 的一个对象。

我在 LogCat 中的一个条件中得到以下内容:

Check History
Check [History, Science, Science, History]
Result for if false
Showing subject not in list

这意味着即使对象存在于 ArrayList 中,.contains() 运算符也无法正常工作。 请帮我找到解决方案。

最佳答案

首先,正如@LuiggiMendoza 指出的那样,调用

Arrays.asList(selsubdata).contains(Arrays.asList(selsub))

永远不会在这里返回 true,因为您要查找的是一个元素,而不是子列表。将其更改为:

Arrays.asList(selsubdata).contains(selsub)

第二, List#contains() 使用 equals()用于比较的列表元素的方法。默认 equals()继承自 Object比较引用,这将无法按您的意愿工作。

对于 contains()要为您的对象正常工作,您需要实现 equals() (和 hashCode() )对于 UnassignedSubjectData .

hashCode()实际上不需要比较,但它应该始终与 equals() 一起实现.

关于java - .contains() 运算符不适用于带对象的 ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16850524/

相关文章:

java - 为什么我收到错误 'Operation not allowed after ResultSet closed' ?

java - 如何将数学函数应用于 ArrayList 的每个对象

java - Libgdx动画翻转时闪烁

Java未检查警告添加数组列表

java - 我可以创建集合数组吗?

android - ArrayList 的问题

java - 捕获 HsqlException

java - 不调用jsf中的setter方法

java - AsyncTask 卡住 UI 中的 Android Thread.sleep()

java - ArrayList.remove(int index) 不适用于非匿名类对象