Проблема при добавлении объекта в ArrayList - PullRequest
0 голосов
/ 16 декабря 2009

Мой вопрос о том, как добавить объект в массив, в моем случае у меня есть класс массива с 4 столбцами, и я не могу заставить свою программу добавить объект в массив.

public class DatabaseTable extends AbstractTableModel { 

    public ArrayList<Object> objects = new ArrayList<Object>(); 

    public void add(Object o, String sort, String getDesc) { 
        objects.add(o); 
    } 
    // ... 
}

Я пробовал с:

DatabaseTable dt = new DatabaseTable();
dt.add("something", "something", "something", "something");

но моя программа не запустится .. Кто-нибудь знает, как это сделать?

Ответы [ 8 ]

3 голосов
/ 16 декабря 2009

Похоже, вы передаете 4 аргумента в функцию с 3 аргументами.

0 голосов
/ 16 декабря 2009

Вы можете создать массив объектов, создав массив определенной длины, и вы можете поместить объекты в массив по позиции.

public static Object [] addToArray(){
    List list1 = new ArrayList();
    list1.add("11111");

    List list2 = new ArrayList();
    list2.add("2222222222");

    List list3 = new ArrayList();
    list3.add("3333333333");

    List list4 = new ArrayList();
    list4.add("444444444");
    Object []arr = new Object[4];

    arr[0] = list1;
    arr[1] = list2;
    arr[2] = list3;
    arr[3] = list4;
    return arr;

}
0 голосов
/ 16 декабря 2009

В вашем коде для вставки данных у DatabaseTable.add () есть три аргумента, а у вашего кода выше - четыре.

0 голосов
/ 16 декабря 2009

Вы можете использовать что-то вроде этого:

public Object[] addObjectToArray(Object[] array, Object o)
{
    Object[] ret = new Object[array.length + 1];
    System.arraycopyt(array, 0, ret, 0, array.length);
    ret[array.length] = o;
    return ret;
}
0 голосов
/ 16 декабря 2009

Зависит от того, чем оно подкреплено. Если это, например, java.util.ArrayList, то вы можете просто использовать метод add():

List<String> list = new ArrayList<String>();
list.add("something");
list.add("something");
list.add("something");
list.add("something");

Если вы хотите использовать varargs в вашем методе DatabaseTable#add(), он должен выглядеть следующим образом:

public void add(String... strings) {
    list.addAll(Arrays.asList(strings));
}

или немного эффективнее:

public void add(String... strings) {
    for (String string : strings) {
        list.add(strings);
    }
}

таким образом, вы можете использовать его, как вы хотели:

dt.add("something", "something", "something", "something");

Но если вместо этого он поддерживается простым массивом String[], вам придется проделать еще немного работы:

private String[] array = new String[0];

public void add(String... strings) {
    int length = array.length;
    String[] newArray = new String[length + strings.length];
    System.arraycopy(array, 0, newArray, 0, length);
    array = newArray;
    for (int i = 0; i < strings.length; i++) {
        array[length + i] = strings[i];
    }
}

Для получения дополнительной информации о коллекциях (куда входит ArrayList) и массивах вы можете найти полезные руководства Sun: Пробная версия: Коллекции и Основы языка: Массивы .

0 голосов
/ 16 декабря 2009

DatabaseTable - это какой-то класс, который вы разработали для реализации поведения массива? Если это так, вам нужно отладить реализацию add (). Без контекста мы не можем помочь больше.

Если вы реализуете массив самостоятельно из-за задания домашней работы, сначала вы должны знать о существовании и поведении структуры массива, предоставляемой языком. Почему ваша программа не запускается? Выдает исключение?

Проверьте, как массивы покрываются Учебное пособие по Java . Необходимо также проверить структуру Коллекции .

0 голосов
/ 16 декабря 2009

Я не знаю класс DatabaseTable. Вы пробовали с ArrayList? Что-то вроде:

ArrayList<ArrayList<String>> list = new ArrayList<ArrayList<String>>();
ArrayList<String> tmp = new ArrayList<String>();
tmp.add("something");
tmp.add("foo");
tmp.add("bar");
tmp.add("wtf");
list.add(tmp);
0 голосов
/ 16 декабря 2009

Под добавлением вы подразумеваете присвоение значения элементу массива?

yourArray[0] = yourObject1;
yourArray[1] = yourObject2;
//...
...