Вопрос о структуре данных Java - PullRequest
5 голосов
/ 30 июля 2010

Мне было интересно, какую структуру данных лучше всего использовать для следующего сценария:

У меня есть 2 типа объектов A и B

A может содержать много экземпляров B

A.name уникален.B.name уникальна в своем экземпляре A (хотя не глобально уникальна)

Я хотел бы иметь возможность предоставлять методы доступа, такие как getA (String aName), возвращает a;getB (String aName, bName) возвращает b;

Вся помощь очень ценится,

Крис

Ответы [ 4 ]

6 голосов
/ 30 июля 2010

Похоже, вам нужно что-то вроде этого (за исключением лучших имен, инициализации, обработки ошибок и т. Д. - это всего лишь скелет):

public class AContainer
{
    private Map<String, A> map;

    public A getA(String name)
    {
        return map.get(name);
    }

    public B getB(String nameA, String nameB)
    {
        return getA(nameA).getB(nameB);
    }
}

public class A
{
    private Map<String, B> map;

    public B getB(String name)
    {
        return map.get(name);
    }
}
1 голос
/ 30 июля 2010
public class DataStructure{
      private Map<String, A> aMap = new HashMap<String, A>();
      public getA(String name){
          return aMap.get(name);
      }
      public getB(String aName, String bName){
          A anA = getA(aName);
          if(null != anA){
              return anA.getB(bName);
          }else{ 
              return null;
          }
    }
}
public class A{
    String name;
    Map<String, B> myBs = new HashMap<String, B>();
    public A(String name){
        this.name = name;
    }
    public void putB(B foo){
        myBs.put(foo.getName(), foo);
    }
    public B getB(String bName){
        return myBs.get(bName);
    }

 }


public class B{
    String name;
    public B(String name){
        this.name=name;
    }
}
0 голосов
/ 30 июля 2010
class a {
    String name
    List<B> bList

    public getName() {....}
    public getBByName(String name) {
    ....
    }


}
0 голосов
/ 30 июля 2010

Если A поддерживает внутреннюю карту примерно так:

Map<String, B> bMap = new LinkedHashMap<String, B>();

И у вас были функции-члены для вставки экземпляров B и получения экземпляров B, и вот так:

public void addB(B b) {
    bMap.put(b.getName(), b);
}

public B getB(String name) {
    return bMap.get(name);
}

Тогда вы можете быть уверены, что карта будет содержать ключи с уникальными именами B.

Вы можете расширить эту же логику, чтобы поддерживать карту с уникальными именами A:

A a = new A("someAName");
a.addB(new B("someName"));
a.addB(new B("someOtherName"));

Map<String, A> aMap = new LinkedHashMap<String, A>();
aMap.put(a.getName(), a);

Вы можете поместить aMap в другой класс и реализовать метод getB:

public B getB(String aName, String bName) {
   return aMap.get(aName).getB(bName);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...