2013-07-11 2 views
1

Я пытаюсь запустить очень простую программу, и я застрял в основах объявления вложенных списков и карт.Как вы правильно вставляете несколько ArrayLists/Maps в Java?

Я работаю над проектом, который требует от меня хранить полиномы в ArrayList. Каждый полином называется, поэтому я хочу, чтобы карта ключа/значения вытаскивала имя полинома (1, 2, 3 и т. Д.) В качестве ключа, а фактический полином - как значение.

СЕЙЧАС фактический многочлен требует также ключевых значений, так как для природы этой программы требуется, чтобы показатель был связан с коэффициентом.

Так, например, мне нужно ArrayList многочленов, скажем, первый один простой:

полиномом 1: 2x^3

список массив содержит все это как карту, и карта содержит ключ: полином 1 и значением: является Карта ... с ключом/значениями 2 и 3.

Код, который у меня есть, ниже, но я не 100% от того, как форматировать такую ​​вложенную логику.

public static void main(String[] args) throws IOException{ 
     ArrayList<Map> polynomialArray = new ArrayList<Map>(); 
     Map<String, Map<Integer, Integer>> polynomialIndex = new Map<String, Map<Integer, Integer>>(); 
     String filename = "polynomials.txt"; 
     Scanner file = new Scanner(new File(filename)); 

     for(int i = 0; file.hasNextLine(); i++){ 
      //this will eventually scan polynomials out of a file and do stuff 

     } 

EDIT: Обновленный ключ/значение в карте, по-прежнему возникают проблемы.

Код выше дает мне следующую ошибку:

Cannot instantiate the type Map<String,Map<Integer,Integer>> 

Так как же я могу идти об этом или я просто буду об этом все неправильно?

+0

Вы ищете 'Список > '? – NINCOMPOOP

+0

Больше, чем ArrayList >> оригинальный ArrayList не требует ключа/значений – leigero

+0

Затем он будет выглядеть как 'ArrayList >>' , Map имеет пару ключевых значений. – NINCOMPOOP

ответ

2

Вы не можете создать экземпляр new Map<String, Map<Integer, Integer>>(), потому что java.util.Map является интерфейсом (он не имеет конструктора). Вы должны использовать конкретный тип, как java.util.HashMap:

Map<String, Map<Integer, Integer>> polynomialIndex = new HashMap<String, Map<Integer, Integer>>(); 

Кроме того, если вы используете Java 7 или выше, вы можете использовать generic type inference, чтобы сохранить некоторые набрав:

Map<String, Map<Integer, Integer>> polynomialIndex = new HashMap<>(); 
+0

Я благодарю за это, я только что понял это. Я никогда не был полностью уверен, что все это значит, но теперь я начинаю понимать, что сам столкнулся с этой проблемой. – leigero

1

Это неверно:

Map<String, Map<Integer>> polynomialIndex = new Map<String, Map<Integer>>(); 

Карты должны иметь два параметра и ваша вложенная карта Map<Integer> имеет только один. Я думаю, что вы ищете что-то вроде:

Map<String, Map<Integer, Integer>> polynomialIndex = new Map<String, Map<Integer, Integer>>(); 

Или это может быть лучше всего сделано отдельно.

Map<String, Map> polynomialIndex = new Map<String, Map>(); 
Map<Integer, Integer> polynomialNumbers = new Map<Integer, Integer>(); 

При этом вы можете просто положить эти цифры в polynomailNumbers Карта затем использовать это в polynomialIndex.

+0

Я тоже это пробовал, но он дает ошибку: Невозможно создать экземпляр типа Map leigero

+0

Отредактировано, возможно, разделение карт будет работать. –

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