Сравните объекты в LinkedList.contains ()

В B1 введите:

=INT(A1*0.001)

и скопируйте вниз:

enter image description here

Чтобы изменить значения на месте , попробуйте этот макрос VBA:

Sub FixKolumnA()
    Dim i As Long
    For i = 1 To 4
        Cells(i, 1).Value = Int(Cells(i, 1).Value * 0.001)
    Next i
End Sub

9
задан Quinn Taylor 15 June 2009 в 20:14
поделиться

6 ответов

LinkedList использует, равняется методу, не Comparable.compareTo. Необходимо переопределить, равняется (и хэш-код) в MyObject для решения проблемы.

26
ответ дан 4 December 2019 в 06:30
поделиться

contains() использование метода equals() определить, является ли объект в списке. Я подозреваю Ваш класс MyObject не переопределяет equals() метод, и это будет то, почему myList.contains(b) возвращается false.

3
ответ дан 4 December 2019 в 06:30
поделиться

Необходимо переопределить .equals (Oject), и .hashCode () методы в классе MyObject (хэш-код не необходим для Списка..., но когда Вы, сверхобряд равняется контракту, говорите, что необходимо переопределить хэш-код).

По существу то, что делает содержание, является этим:

for(each item in the list)
{
    if(theCurrentItem.equals(theItemYouAreLookingFor))
    {
        return (true);
    }
}

return (false);

Смотрите на документацию для Объекта (для, равняется и хэш-код), здесь

Также действительно хорошая книга для чтения является Эффективным Java

3
ответ дан 4 December 2019 в 06:30
поделиться

Документация для содержит метод, следующие:

Возвращает true, если этот набор содержит указанный элемент. Более официально, возвращает true, если и только если этот набор содержит по крайней мере один элемент e таким образом что (o == пустой указатель? e == пустой указатель: o.equals (e)).

Поэтому необходимо переопределить MyObject, равняется (Возразите o), метод.

Таким образом для Вашего примера:

public class MyObject {
  String myVal;

  public boolean equals(Object o ) {
    return ((MyObject)o).myVal.equals(myVal);
  }
}

Вы ничего не должны реализовывать с интерфейсом Comparable.

2
ответ дан 4 December 2019 в 06:30
поделиться
( a == b ) == true

Вы имели в виду a.equals(b) и b.equals(a) вернуть true? Это не то же как проверка на ссылочное равенство, ни проверка на a.compareTo(b) == 0.

LinkedList.contains() использование equals(), таким образом, необходимо удостовериться, что метод был реализован правильно. equals() должно также согласовываться с compareTo(), хотя это не строго необходимо. Если Вы используете основанную на хеше структуру данных (например. HashSet), необходимо гарантировать это hashCode() реализован правильно.

2
ответ дан 4 December 2019 в 06:30
поделиться

Вместо того, чтобы использовать LinkedList, чтобы перерыть каждый элемент, Иметь Вас рассмотрел использование нового HashSet (Компаратор). Это эффективно сравнит элементы для нахождения соответствия.

1
ответ дан 4 December 2019 в 06:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: