2016-12-01 2 views
-2

Я работаю над куском работы и ударил кирпичную стену. Я действительно пытаюсь понять, как решать вопросы.Array HashMap - Basic Manipulation

Базовый код, который мне предоставлен, является конструктором для HashMap. Он использует строковые типы данных для ключа и значения и сохраняет их в массиве. Код выглядит так:

Примечание: я не могу использовать какие-либо пакеты.

public class HashMap 
    { 
     private long noofitems; 
     private HashPair[] data; 

     public HashMap(int initlen) 
     { 
     noofitems=0; 
     data=new HashPair[initlen]; 
     } 

     public void AddItem(String key, String value) 
     { 

     } 

     public String GetValue(String key) 
     { 
     return null; 
     } 
    } 

Существует также второй файл, который предназначен для HashPair, который используется для хранения значений.

 public class HashPair 
    { 
     public String key, value; 

     public HashPair(String key, String value) 
     { 
     this.key=key; 
     this.value=value; 
     } 

     public String GetKey() 
     { 
     return key; 
     } 

     public String GetValue() 
     { 
     return value; 
     } 

Возможно, кто-нибудь даст мне указания относительно того, с чего начать с функции AddItem? Я искренне не понимаю.

Спасибо!

+1

Добро пожаловать в переполнение стека! Похоже, вы просите о помощи на дому. Хотя у нас нет проблем с самим собой, обратите внимание на эти [dos and don'ts] (http://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions/338845 # 338845), и соответственно отредактируйте свой вопрос. –

ответ

-2

Прежде всего ваш код отсутствует завершающий кронштейн HashPair класс. вам нужно создать экземпляр HashPair и поместить его в data массиве

т.е.
private long noofitems; 
    public HashPair[] data; 
    int counter = 0; 

    public HashMap(int initlen) 
    { 
    noofitems = initlen; 
    data=new HashPair[initlen]; 
    } 

    public void AddItem(String key, String value) 
    { 
     HashPair item = new HashPair(key, value); 
     if(counter< noofitems) 
     { 
      data[counter] = item; 
      counter++; 
     } 

    } 

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

+0

Не нужно, для этого есть System.arraycopy. – Vadim

+0

Кроме того, вам нужно использовать параметр конструктора для инициализации длины массива 'data', установив' noofitems = initlen'. Вы можете использовать счетчик, чтобы продолжать проверять отсутствие элементов в вашем массиве данных, увеличивая счетчик каждый раз, когда вы добавляете элемент, и прекратите добавлять элементы, когда счетчик равен количеству элементов. – hhafeez

+0

В какой части этого кода есть * что-либо * для хэширования? – Andreas

-2

Вот он:

public void AddItem(String key, String value) 
    { 
     HashPair[] tmpData = new HashPair[this.data.length + 1]; 
     System.arraycopy(this.data, 0, tmpData, 0, this.data.length); 
     // set new last elements data 
     tmpData[tmpData.length - 1] = new HashPair(key, value);   
     // replace data with newly created tmpData array 
     this.data = tmpData; 
    } 

P.S. ИМХО: идея поддержки HashMap с помощью массива может прийти только в голову академика/профессора. :-)

+0

Вы полностью упустили тот факт, что массив является хэш-таблицей. Ваш код просто добавляется в конец массива, поэтому 1) что вы думаете, что делает новый HashPair [initlen] ', и 2) какая часть вашего кода имеет * что-либо * для хэширования? – Andreas

+0

Вы прочитали вопрос? Это «теоретическая» попытка сделать «вид карты», поддерживаемый массивом как хранилище. Нет ничего о хеше. Также, что вы имели в виду «массив - это хеш-таблица»? – Vadim

+0

BTW: это не полное решение ... это намек на то, как массив можно использовать в качестве таблицы ... – Vadim