2016-01-13 4 views
1

У меня возникли проблемы с пониманием того, что мне нужно сделать для этого проекта! Не просить какой-либо код, потому что я хочу иметь возможность сделать это сам.Общий класс ArrayList?

«Реализовать данный интерфейс List в Java как список массивов».

Учитывая этот пример кода:

public interface List<K extends Comparable<K>,V> { 

    public abstract boolean add(K key,V value); 

    public abstract V remove(K key); 

    public abstract V remove(int n); 

    public abstract V remove(); 

    public abstract V lookup(K key); 

    public abstract int size(); 

    public abstract V get(int n); 
} 

Направления являются своего рода расплывчатым, как я подхожу к этому?

+0

У меня возникли проблемы следующие , V>, что именно это делает ? –

+0

Вы заставляете тип вашего K также распространяться по сравнению с самим собой. вы затем используете метод compareTo для сравнения вашей записи с другой записью на основе ключей – iMBMT

+0

Вы правы, направления немного расплывчаты. Мы могли бы предположить, но это все, что было бы. Почему бы не спросить, кто дал вам задание? – yshavit

ответ

0

Что вам нужно сделать, это написать новый класс, реализующий вышеуказанный интерфейс. Этот новый класс должен вести себя как класс Java ArrayList. В этом классе вы должны реализовать весь метод, используя некоторую структуру данных. Очевидно, что вы не должны использовать Java ArrayList в качестве структуры данных по умолчанию. (Подсказка: может быть массивом).

public class MyArrayList implements List{ 
    Object[] objectArray; 

    public boolean add(){ 
    } 
} 

Это задание как упражнение по программированию, позволяющее улучшить ваши навыки java.

1

В основном Сопоставимые интерфейс позволяет классы реализации это может быть отсортированы и другие механизмы, такие как сравнение сравнения строк, проверяя, содержат ли два объекта одни и те же данные, и т.д. В этом случае его универсальный класс в одиночку К Сопоставимые (от строки кода

K extends Comparable <K> 

Если я прав, вас попросят реализовать интерфейс «Список», который может содержать несколько пар «ключ-значение». И вас попросят написать класс, реализующий эти методы, а именно: удалить ключ, удалить по значению, удалить все, размер и т. д. Таким образом, вы можете начать с массива, который может содержать такие пары.

Надеюсь, это может быть полезно для вас.

0

Тот, кто написал это задание, должен добавить Javadoc к методам, чтобы вы знали, что они должны делать.

Во-первых, интерфейс плохо назван, поскольку он ведет себя скорее как Map, чем List. Поскольку существует только один метод add(), и у вас есть два (три?) Метода, которые принимают индексный параметр, а присваивание называется «как список массивов», я бы предложил вам реализовать add() так, как это делает LinkedHashMap, потому что этот класс является Map, который сохраняет порядок вставки так, как ArrayList будет.

Ваша реализация должна, вероятно, хранить пары ключ/значение внутри внутри массива внутреннего класса KeyValuePair. Поскольку требования к производительности не требуются, методы с ключевым значением должны просто выполнять последовательный поиск.

Update Альтернативная теория: Причина тип ключа K определяется как extends Comparable<K>, поэтому вы можете позвонить key1.compareTo(key2), точнее, так что массив может быть отсортирован, и вы можете сделать бинарный поиск, чтобы найти ключ. Это означает, что он ведет себя как TreeMap, чем LinkedHashMap. В противном случае я действительно не вижу причины, по которой ключ должен быть Comparable.

Итак, вот интерфейс с пониженным Javadoc из LinkedHashMap и ArrayList, что предполагает порядок вставки, не отсортирован:

/** 
    * This list defines the iteration ordering, which is normally the 
    * order in which keys were inserted into the list (insertion-order). 
    * Note that insertion order is not affected if a key is re-inserted into the list. 
    */ 
public interface List<K extends Comparable<K>,V> { 

    /** 
     * Associates the specified value with the specified key in this map. 
     * If the map previously contained a mapping for the key, the old value is replaced. 
     * 
     * @return the previous value associated with key, or null if there was no mapping for key. 
     */ 
    public abstract boolean add(K key,V value); 

    /** 
     * Removes the mapping for the specified key from this map if present. 
     * 
     * @return the previous value associated with key, 
     *   or null if there was no mapping for key. 
     */ 
    public abstract V remove(K key); 

    /** 
     * Removes the element at the specified position in this list. 
     * Shifts any subsequent elements to the left (subtracts one from their indices). 
     * 
     * @return the element that was removed from the list 
     * @throws IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size()) 
     */ 
    public abstract V remove(int n); 

    /** 
     * Removes the first element in this list. 
     * Same as remove(0). 
     */ 
    public abstract V remove(); 

    /** 
     * Returns the value to which the specified key is mapped, 
     * or null if this map contains no mapping for the key. 
     */ 
    public abstract V lookup(K key); 

    /** 
     * Returns the number of key-value mappings in this list. 
     */ 
    public abstract int size(); 

    /** 
     * Returns the element at the specified position in this list. 
     * 
     * @throws IndexOutOfBoundsException - if the index is out of range (index < 0 || index >= size()) 
     */ 
    public abstract V get(int n); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^