Как я могу сравнить 2 LinkedLists, но принимая Object в качестве параметра?

#java

#java

Вопрос:

Это мое школьное задание. Я не знаю, как это решить, потому что метод equals позволяет передавать только один параметр. Пожалуйста, дайте мне несколько советов.

Вот вопрос:

Добавьте метод public boolean equals(Object other), который возвращает true, когда содержимое двух объектов AList одинаково. Обратите внимание, что 2 объекта AList одинаковы, если они имеют одинаковое количество элементов, и каждый элемент в одном объекте равен элементу в соответствующем местоположении в другом объекте (15 баллов).

Описанный выше метод должен быть добавлен в LList2.java

Класс AList

 public class AList<T> implements ListInterface<T> {
private T[] list;   // array of list entries
private int numberOfEntries;
private static final int DEFAULT_INITIAL_CAPACITY = 25;

public AList() {
    this(DEFAULT_INITIAL_CAPACITY); // call next constructor
} // end default constructor

public AList(int initialCapacity) {
    numberOfEntries = 0;
    // the cast is safe because the new array contains null entries
    @SuppressWarnings("unchecked")
    T[] tempList = (T[]) new Object[initialCapacity];
    list = tempList;
} ......
  

LList2.java

 public class LList2<T> implements ListInterface<T> {
private Node firstNode; // head reference to first node
private Node lastNode;  // tail reference to last node
private int numberOfEntries;

public LList2() {
    clear();
} // end default constructor

public final void clear() // NOTICE clear is not final in interface and that is OK
{
    firstNode = null;
    lastNode = null;
    numberOfEntries = 0;
} ......
  

Комментарии:

1. Каковы ваши попытки?

2. Либо вы можете переопределить метод equals (), либо использовать comparator

3. Следуйте инструкциям, начните с создания метода, который возвращает true, если размеры совпадают, и false, если они не совпадают, затем разверните этот метод, чтобы проверить размер и первый элемент, затем начните использовать циклы

4. еще один совет, найдите instanceof` и приведите

5. Я проголосовал против, потому что это в основном «пожалуйста, сделайте мою домашнюю работу»-Вопрос

Ответ №1:

Это метод экземпляра — он сравнивает объект, переданный в качестве параметра, с объектом, для которого он вызывается (он же this ). Обратите внимание, что вам явно не нужно вызывать this , но я оставил это там, чтобы сделать код более понятным:

 @Override
public boolean equals(Object other) {
    // Check that other is even an AList
    if (!(other instanceof AList)) {
        return false;
    }

    // If it is, cast it and compare the contents:
    AList otherAList = (AList) other;

    // Compare the lenghts of the arrays
    if (this.numberOfEntires != otherAList.numberOfEntries) {
        return false;
    }

    // Compare the contents of the arrays:
    for (int i = 0; i < this.numberOfEntries;   i) {
        if (!this.list[i].equals(otherAList.list[i])) {
            return false;
        }
    }

    // Didn't find a reason why the two aren't equal, so they must be:
    return true;
}
  

Комментарии:

1. вы не должны делать домашнее задание другим парням… Это не входит в намерения StackOverflow.

2. было бы лучше использовать интерфейс вместо конкретной реализации

3. @Wisthler Это вопрос решения. Следует ли считать равными AList и a SomeOtherList с одинаковой длиной и одинаковым содержимым? Если это так, обязательно используйте интерфейс. Если нет, вы должны придерживаться конкретного класса. В любом случае приведение должно соответствовать instaceof проверке.

4. @Mureinik действительно, это зависит от требований. Что не очень понятно в данном контексте, но при чтении между строк, цель упражнения, вероятно, состоит в том, чтобы сделать это на уровне интерфейса