2010-10-28 1 views
-1
ArrayList userItem = new ArrayList(); 

userItem.add(item.getUserId()+"|"+item.getEmail()+"|"+item.getImgInstance()); 

ArrayList userItem = onlineUsers.get(item.getImgInstance()); 

Я хочу знать, что будет делать последняя строка с этим списком, добавит ли она значение thisUget.get (item.getImgInstance()) в предыдущей строке или что-то еще? как он отслеживает добавление элемента?Что произойдет с arraylist в этом коде?

P.s, если вы можете с удовольствием объяснить структуру ArrayList.

Спасибо отредактирован:

К сожалению, ребята, вы не поняли, что я пытался спросить, потому что я не поставил полный код его на самом деле это

HashMap> onlineUsers = новый HashMap (100);

   for(DBPresence item : listPresence){ 

        if(onlineUsers.containsKey(item.getImgInstance())){ 
          ArrayList userItem = onlineUsers.get(item.getImgInstance()); 
          userItem.add(item.getUserId()+"|"+item.getEmail()+"|"+item.getImgInstance()); 
        }else{ 
          ArrayList userItem = new ArrayList(); 
          userItem.add(item.getUserId()+"|"+item.getEmail()+"|"+item.getImgInstance()); 
          onlineUsers.put(new Integer(item.getImgInstance()),userItem); 
        } 
       } 
       return new DBPresenceResponse(onlineUsers, _encapusulationText); 
+0

он не скомпилирует, кто-то быстро отредактирует его код! :) – willcodejavaforfood

+0

используя наш шестой смысл, я думаю;) – Bozho

+0

ArrayList - просто оболочка для массива. Когда вы используете метод add, это происходит как smt как значение [a.size + 1] = (с расширением), и когда вы вызываете get, вы запрашиваете элементы, которые идут в некоторой позиции a.get (v) = a [v]. –

ответ

1

ArrayList userItem = новый ArrayList();

Должно быть

List userItem = new ArrayList(); 

Вы добавляете объект String, здесь

userItem.add (item.getUserId() + "|" + item.getEmail() + "| «+ item.getImgInstance());

YOu пытаются извлечь объект из списка здесь

onlineUsers.get (item.getImgInstance())

Здесь item.GetImgInstance() должен возвращать тип данных, который может быть конвертер в межд неявно

Проверить Docs

+0

* "Здесь item.GetImgInstance() должен возвращать int" * - не обязательно. Мы не знаем, что такое «онлайн-пользователи». –

+0

Вы не всегда хотите квалифицировать ссылку с помощью интерфейса ... –

+0

item.GetImgInstance() возвращает int. то, что я хотел, чтобы knwo было то, как аррайалист отреагирует на это утверждение –

1

ArrayList имеет опорный массив, в котором хранятся данные. Когда вы добавляете элементы, массив копируется в новый массив большего размера.

Что делает вышеприведенный код вне меня - он даже не компилируется, потому что вы дважды определяете список с именем userItem.

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

0

здесь Как вы выделяете userItem новому списку onlineUsers.get (item.getImgInstance());

это не добавит onlineUsers.get (item.getImgInstance()); список элементов в список userItem

1
// A new ArrayList is created. An ArrayList is a dynamic array that can hold 
// any type of object. If you just need String object, use ArrayList<String>. 
ArrayList userItem = new ArrayList(); 

// A String is added to the ArrayList. 
userItem.add(item.getUserId()+"|"+item.getEmail()+"|"+item.getImgInstance()); 

// *Error*, you are defining a new ArrayList reference with the same name 
// than the previous one. 
ArrayList userItem = onlineUsers.get(item.getImgInstance()); 

Чтобы исправить эту ошибку, у вас есть 4 варианта:

Choice 1

// if onlineUsers.get() returns an ArrayList, this choice will throw the 
// previous ArrayList to the trash can (also named the garbadge collector) 
// and you won't be able to retrieve its information. 
userItem = onlineUsers.get(item.getImgInstance()); 

Выбор 2

// if onlineUsers.get() returns an ArrayList, this choice will append 
// its elements to the previous arraylist. 
userItem.addRange(onlineUsers.get(item.getImgInstance())); 

Choice 3

// if onlineUsers.get() *does not* return an array, this choice let you 
// append it to the arraylist. 
userItem.add(onlineUsers.get(item.getImgInstance())); 

Choice 4

// Here, you are creating a NEW arraylist with a different reference name. 
// It has no links at all with the previous one. 
ArrayList userItem2 = onlineUsers.get(item.getImgInstance()); 

На самом деле есть много других вариантов, но вот основные из них.