Javafx 2 ObservableList#contains()为现有项返回false

Javafx 2 ObservableList#contains()为现有项返回false,javafx-2,Javafx 2,我尝试使用OberservableLists contains函数检查给定元素是否已经在列表中,如果没有,则添加它。 我的代码如下所示: ObservableList<Device> devicesScannerList = FXCollections.observableArrayList() deviceScannerList.add((Device)dev); 问题是deviceExists总是false,但我可以在调试模式下看到DeviceScannerList已经包含给定

我尝试使用OberservableLists contains函数检查给定元素是否已经在列表中,如果没有,则添加它。 我的代码如下所示:

ObservableList<Device> devicesScannerList = FXCollections.observableArrayList()
deviceScannerList.add((Device)dev);
问题是deviceExists总是false,但我可以在调试模式下看到DeviceScannerList已经包含给定的设备,我不想再添加它

我是否理解contains函数? 帮助会很好

Thx
Ingo

确保您的
设备
类正确实现了
equals
hashCode
方法

例如,如果使用完全相同的数据创建2个
设备
对象,则除非设备已实现
equals/hashCode
,否则它们不会被
ObservableArrayList
(或任何列表)视为相同

请参见下一个示例:

public class ObsListTest {

    static class Device {
        int value;

        public Device(int value) {
            this.value = value;
        }
    }

    public static void main(String[] args) {
        ObservableList<Device> list = FXCollections.<Device>observableArrayList();
        Device data1 = new Device(1);
        Device anotherData1 = new Device(1);
        list.add(data1);
        System.out.println(list.contains(data1)); // true
        System.out.println(list.contains(anotherData1)); // false
    }
}
请参阅此处的更多详细信息:

public class ObsListTest {

    static class Device {
        int value;

        public Device(int value) {
            this.value = value;
        }
    }

    public static void main(String[] args) {
        ObservableList<Device> list = FXCollections.<Device>observableArrayList();
        Device data1 = new Device(1);
        Device anotherData1 = new Device(1);
        list.add(data1);
        System.out.println(list.contains(data1)); // true
        System.out.println(list.contains(anotherData1)); // false
    }
}
        @Override
        public boolean equals(Object obj) {
            if (obj == null || getClass() != obj.getClass()) {
                return false;
            }
            return this.value == ((Device) obj).value;
        }

        @Override
        public int hashCode() {
            return 7 + 5*value; // 5 and 7 are random prime numbers
        }