Изучение HashMap - PullRequest
       4

Изучение HashMap

0 голосов
/ 10 июня 2011

Я просто изучаю, как использовать hashMaps, может кто-нибудь проверить этот фрагмент кода, который я написал, и сказать мне, если это правильно? Идея состоит в том, чтобы иметь список сотрудников, работающих в компании, я хочу добавить и удалить сотрудников из хэш-карты.

public class Staff
{
    private HashMap<String, String>id;

    public Staff(String name, String number)
    {
        id = new HashMap<>(name,number);
    }

    public addStaff()
    {
       id.add("Joe","1234A2);   
    }

    public removeStaff()
    {
       id.remove("Joe","1234A2);
    }
}

Ответы [ 3 ]

4 голосов
/ 10 июня 2011

В вашем классе вам нужно изменить / добавить вещи, чтобы они выглядели так:

private HashMap<String, String> id;

public Staff(String name, String number)
{
    id = new HashMap<String, String>();
}

public addStaff()
{
   id.put("Joe","1234A2");   
}

public removeStaff()
{
   id.remove("Joe");
}

, чтобы правильно использовать HashMap.

Обратите внимание, что addStaff() и removeStaff() вряд ли будут очень полезны для большинства целей, потому что они только добавляют и удаляют одного сотрудника "Джо".Более полезный способ сделать это:

public void addStaff(StaffMember member) {
   id.put(member.getName(), member);
}

public StaffMember get(String name) {
   // this will return null if the member's name isn't a key in the map.
   return id.get(name);
}

Что отличает Map от других структур данных, так это то, что он имеет "ключ", который позволяет вам получить один элемент.Вы не можете использовать Map таким образом, чтобы повысить производительность, если у вас заранее нет ключа элемента.

Обратите внимание, что HashMap s требует, чтобы ключи правильно следовали правилам равенства вдополнение к равным элементам, возвращающим тот же hashCode.В основном, если объект a и другой объект b считаются равными, то

// Reflexive property
a.equals(a) must return true

// Symmetric property
if (a.equals(b)) then b.equals(a) must return true

// Transitive property
if (a.equals(b) and b.equals(c)) then a.equals(c) must return true

// Additional requirements to make hash related algorithms work properly
a.hashCode() == b.hashCode() // must be true

Часть hashCode() выходит за рамки простого равенства и необходима для правильной работы HashMap.

1 голос
/ 10 июня 2011

Прежде всего, пожалуйста, прочитайте это http://download.oracle.com/javase/6/docs/api/java/util/Map.html и многое будет для вас более понятным. Тогда посмотрите здесь для некоторых образцов:

1 голос
/ 10 июня 2011

Выглядит хорошо для меня, однако я бы создал класс Employee и использовал бы уникальный идентификатор для каждого сотрудника.

class Employee {
  Integer id;
  String name;
}

Map<Integer, Employee> staff = new HashMap<Integer, Employee>();

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...