2016-11-24 5 views
1

Я ищу, чтобы создать arraylist arraylist.Java arraylist arraylist - создать многомерный arraylist с объектом класса

import java.util.ArrayList; 
import java.util.List; 

class Neighbors{ 
ArrayList<Integer> inner = new ArrayList(); 
Neighbors(){} 
} 

ArrayList<Neighbors> outer = new ArrayList<Neighbors>(); 

void setup() { 
size(1280, 700, JAVA2D); 
background(0); 

Neighbors test1 = new Neighbors(); 
Neighbors test2 = new Neighbors(); 

test1.inner.add(0); 
test1.inner.add(1); 
test1.inner.add(2); 

test2.inner.add(5); 
test2.inner.add(6); 
test2.inner.add(7); 

println(test1.inner); 
println(test2.inner); 
// outer.add((ArrayList)test.inner); 
outer.add(test1.inner); 
outer.add(test2.inner); 
println(outer); 

} 

Это мой код выше, но я не мог добавить внутренний аррайалист к внешним массивам. Я не уверен, что я делаю правильно. Или, если есть какой-либо другой способ сделать это правильно, пожалуйста, помогите.

Во-первых, я пытаюсь создать arraylist как объекты под классом, и я хочу использовать этот внутренний arraylist в outararraylist. в основном мне нужен 2-й arraylist с помощью класса. Пожалуйста, помогите мне с примером кода, где я могу использовать arraylist внутри arraylist, добавлять элементы к нему и способ доступа к ним.

+1

Как вы можете использовать этих арраистов вместе? Они содержат разные типы ('Integer' vs' Neighbor'), поэтому вы не можете просто их смешивать. Кроме того, это считается плохой инкапсуляцией, если вы просто обращаетесь к некоторым переменным-членам класса извне этого класса. Что вы на самом деле пытаетесь сделать? – Robert

+1

Если вы хотите двумерный 'ArrayList', попробовали ли вы' ArrayList > '? Что вы пытаетесь достичь? – Logan

+0

Я хочу использовать эти arraylists как 2d сетку или матрицу с динамической памятью. Каждый из них будет удерживать целые числа для например: 0 (строка) - 5, 6, 8, 10 1 (строка) - 21, 4, 5 2 (строка) - 1, 4, 5, 5, 11,12,16, ....... – zack

ответ

2

Вместо:

outer.add(test1.inner); 
outer.add(test2.inner); 

Вы хотите использовать следующие вместо этого?

outer.add(test1); 
outer.add(test2); 

EDIT: Для того, чтобы напечатать outer, попробуйте это.

Во-первых, добавить метод toString() к Neighbors класса:

class Neighbors { 
    ArrayList<Integer> inner = new ArrayList(); 

    @Override 
    public String toString() { 
     return inner.toString(); 
    } 
} 

Затем, вы можете просто напечатать outer с помощью:

System.out.println(outer); 

В качестве альтернативы, если вы не хотите использовать класс, вы можете просто использовать ArrayList для ArrayList:

ArrayList<ArrayList<Integer>> outer = new ArrayList<>(); 
outer.add(new ArrayList<>()); 
outer.get(0).add(0); 
outer.get(0).add(1); 
outer.get(0).add(2); 

ArrayList<Integer> inner = new ArrayList<>(); 
inner.add(3); 
inner.add(4); 
outer.add(inner); 

System.out.println(outer); 

Отпечатано [[0, 1, 2], [3, 4]].

+0

Да, вы правы, это работает. Большое вам спасибо. Итак, как мне напечатать внешний архивариус. печатьln (внешний); - не дает arraylist вместо этого он дает места – zack

+0

Проверьте мои изменения и дайте мне знать, если это поможет.Если да, пожалуйста, отметьте мой ответ как правильный. :) –

+0

Почему мы должны использовать tostring. Есть ли другой способ доступа к ним. Пожалуйста, объясните, если вы не возражаете, можете ли вы прочесть комментарии к вышеуказанному вопросу и сообщить мне, реализую ли я его правильным образом. Мне нужно реализовать arraylist arraylist, используя объект класса. – zack

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