Как создать / пройти многомерный массив, имеющий сложную структуру в Java? - PullRequest
1 голос
/ 11 марта 2012

Я хотел бы знать, как создать структуру для хранения трех списков в следующем формате:

[[[x], [y]], [z]]

сx, y, z - три списка строк.

Обратите внимание, что я хочу, чтобы списки x и y на 3-м уровне были ниже, а список z на 2-м уровне - вниз.

Iпопытался создать 3 отдельных массива для x, y и z, затем другой массив, содержащий x и y.Проблема возникла, когда я попытался создать самый внешний массив для хранения всех трех, потому что что-то вроде

ArrayList<ArrayList<ArrayList<String>>> outerList = new ArrayList<ArrayList<ArrayList<String>>>();

будет работать для x и y, но не будет работать для z, потому что z только на 2 уровня ниже.

Я понимаю, что я пытаюсь сделать, это больше похоже на дерево, но я не знаю, как реализовать недвоичное дерево в Java (x, y, z, имеющее более двух ветвей).

То, что я пытаюсь извлечь из этого, это способ присвоения весов, например.пользователь вводит термин, я сначала перебираю все дочерние узлы (x, y, z) и пытаюсь найти его.Если я нахожу его, я назначаю большой вес, в противном случае я пытаюсь найти его в родительских узлах (список содержит x, y) и назначаю ему умеренный вес, в противном случае я ищу в корневом узле и назначаю минимальный вес.Описанная структура - это просто связь между терминами, которые я классифицировал.

Есть идеи, как это сделать?

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Это то, где приходит сила объектов. Вы можете создать класс, который содержит список xs и ys, а затем создать другой класс, который содержит список этого класса вместе с вашим списком xs.Наконец, у вас есть список этих классов.

Если вы хотите разобраться с этим, попробуйте наследовать от ArrayList и переопределить или перегрузить его методы, чтобы сделать то, что вам нужно.http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

Вы также упоминали, что делали это в виде дерева.Для этого есть несколько хороших предложений: Структура данных дерева Java?

1 голос
/ 11 марта 2012

Структура достаточно проста для создания, но работать с ней будет очень уродливо, потому что вы не знаете, насколько глубокой она будет. Если это заданная структура, где у вас есть только x, y и z, вы должны создать пользовательский объект для обработки этой известной структуры. Если вы не будете знать структуру до времени выполнения, тогда вам нужно что-то вроде этого.

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

public void useArrayList()
{
    ArrayList<ArrayList<?>> weirdStructure = new ArrayList<ArrayList<?>>();
    ArrayList<String> x = new ArrayList<String>();
    ArrayList<String> y = new ArrayList<String>();
    ArrayList<String> z = new ArrayList<String>();          
    ArrayList<ArrayList<String>> xy = new ArrayList<ArrayList<String>>(); 
    xy.add(x);
    xy.add(y);
    weirdStructure.add(xy);     
    weirdStructure.add(z);

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