2014-04-10 2 views
0

필드 변수로 정의 된 arraylist가 있습니다.정의 된 2 차원 배열로 푸시

String[][] data = {{"Neil-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}}; 

나는 그때 문자열 배열로 변환, 목록을 사용하여 시도했다

{"Bob-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"} 

추가 할 수 있지만 '2D'옵션이 없기 때문에 그 실패했습니다.

+6

eeeeeeeeeee 저는 전문가는 아니지만 2D 배열입니다. 내가 잘못? – ruhungry

+0

자세히 설명 할 수 있습니까? 배열 [] []을 사용하는 동안 arraylist를 요구하고 있습니까? –

+0

'data'는 여러분이 선언 한대로 다른 것을 담을만큼 크지 않습니다. 당신은 아마'String [3]'의'ArrayList'를 원할 것입니다. – MikeTheLiar

답변

3

당신이 당신의 배열을 정의 할 때 :

String[][] data = {{"Neil-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}}; 

당신은 문자열의 2 차원 배열을 생성합니다. 그러나 배열은 정적으로 크기가 지정되며 두 번째 차원에는 아무 것도 없으므로 사용할 수있는 메모리가 없습니다. 당신은 단지이 두 가지 특정 기록을 원하는 경우에, 당신이 뭔가를 할 수 있습니다 :

String[][] arr = new String[2][3]; 

String[] input1 = {"Neil-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}; 
String[] input2 = {"Bob-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}; 

arr[0] = input1; 
arr[1] = input2; 

을하지만, 당신이 기록의 임의의 금액을 추가 할 것있는 것처럼 보이기 때문에, 당신은 아마 같은 것을 사용하려면 이 :

import java.util.*; 

public class HelloWorld 
{  
    public static void main(String []args) 
    {   
     ArrayList<String[]> list = new ArrayList<String[]>(); 

     String[] input1 = {"Neil-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}; 
     String[] input2 = {"Bob-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}; 

     list.add(input1); 
     list.add(input2);      
    } 
} 

배열 목록을 사용하면 런타임에 요소를 계속 추가 할 수 있습니다. 목록 및 ArrayLists에 대한 오라클 자습서 here을 읽을 수 있습니다.

+0

JTable은 ArrayList를 취하지 않고 2D 문자열 만 취할 수 없습니다. – user3519539

+0

이 데이터에서 TableModel을 만들어야하는 경우 처음에는 그 사실을 알면 좋았을 것입니다. IIRC를 사용하면 ArrayLists 대신 Vector를 사용하여 테이블을 모델링 할 수 있습니다. 원칙은 동일합니다. – MikeTheLiar

1

2 차원 배열을 사용하기를 원하지만 Java가 객체 지향 언어이므로 객체를 사용하지 않는 이유는 무엇입니까?

public class MyClass{ 
    private String namePc; 

    private String ipAddress; 

    pricate String hardwareDescription; 

    //getter and setter method 
} 

하고 당신이 사용할 수 있습니다 :

List<MyClass> computers = new ArrayList<MyClass>(); 

MyClass pc = new MyClass(); 
pc.setNamePc("Name"); 
pc.setIpAddress("192.168.168.2"); 

물론 다음 computers.add(pc);

0

, 당신이 List<String[]>, 심지어 사용할 수

그래서 나는이 같은 생각 List<List<String>>이지만 2D 문자열 배열을 고수하고 싶다면 다음과 같이 할 수 있습니다 :

public static String[][] addNewArray(final String[][] baseArray, final String[] toAdd) { 
    //Define a new 2D array with size 1 bigger to accommodate the extra array. 
    final String[][] newArray = new String[ (baseArray.length + 1) ][]; 

    //Copy across the data from the basearray 
    for(int i = 0; i < baseArray.length; i++) { 
     newArray[i] = baseArray[i]; 
    } 
    //Add on the extra array 
    newArray[baseArray.length] = toAdd; 

    return newArray; 
} 

물론 이것은 개별 어레이의 길이를 고려하지는 않지만 문제가되는 것이 아닌지를 나타내는 것은 아닙니다.

다음은 간단한 데모입니다. 다음과 같은 주요있어서,

[닐-PC, 127.0.0.1, 제온 1230v3 + 2기가바이트 DDR2]

[밥-PC, 127.0.0.1 :

public static void main(final String[] args) { 
    final String[][] data = {{"Neil-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}}; 
    final String[] extraData = {"Bob-PC","127.0.0.1","Xeon 1230v3 + 2gb DDR2"}; 

    final String[][] newArray = addNewArray(data, extraData); 
    for (final String[] strings : newArray) { 
     System.out.println(Arrays.toString(strings)); 
    } 
} 

는 출력을 생성 제온 1230v3 + 2gb DDR2]

관련 문제