2016-08-06 2 views
1

Я хочу добавить treemaps в arraylist в java. Вот что я делаю:Добавление TreeMaps в ArrayList в цикле

ArrayList al=new ArrayList(); 
    for(int i=0;i<n;i++) 
    { 
     al.add(new TreeMap()); 
    } 

в когда я пытаюсь добавить пары ключ-значение в TreeMap:

for(int i=0;i<n;i++) 
    { 
     for(int j=i+1;j<n;j++) 
     { 
      al.get(i).put(j,(arr[j]-arr[i])); 
     } 
    } 

Компилятор дает ошибку в этом: error description

может кто-то пожалуйста, помогите me out .... Спасибо.

этот вопрос отличается от What is a raw type and why shouldn't we use it?, потому что здесь я не прошу объяснения типов или дженериков raw, но я прошу об устранении ошибки.

ответ

1

Вам необходимо использовать Generics.

ArrayList<TreeMap> al=new ArrayList<TreeMap>(); 
for(int i=0;i<n;i++) 
{ 
    al.add(new TreeMap()); 
} 

Или вам нужно сделать литье. Дженерики - лучший вариант.

Пояснение: Если вы используете ArrayList al=new ArrayList();, что означает список объектов массива. Но когда вы пытаетесь добавить пару значений ключа к карте, вы сначала получаете объект в своем случае, и это тип объекта. Чтобы использовать его в качестве древовидной карты, вам нужно отправить его в TreeMap.

Если вы используете ArrayList<TreeMap> al=new ArrayList<TreeMap>();, то при получении записи массива вы напрямую получаете TreeMap.

+0

это исправление проблем. Спасибо :) теперь нет ошибки – KCK

+0

@James_D в чем проблема. Тип Raw map означает, что он может взять любой объект в качестве ключа и значение –

+0

А, да, ОК. Я думал, что это не будет autobox для ints, переданных в метод 'put (...)' без указания 'Map '. Тем не менее, по-прежнему существует плохая практика использовать необработанные типы (а также использовать типы реализации для типа времени компиляции). –