[java] 2D 배열, 행 또는 열에서 먼저 오는 것은 무엇입니까?

2D 배열을 만들 때 행 또는 열이 먼저 지정되었는지 어떻게 기억합니까?



답변

Java는 “행 주”로 간주됩니다. 즉, 행을 먼저 수행합니다. 이는 2D 배열이 “배열의 배열”이기 때문입니다.

예를 들면 :

int[ ][ ] a = new int[2][4];  // Two rows and four columns.

a[0][0] a[0][1] a[0][2] a[0][3]

a[1][0] a[1][1] a[1][2] a[1][3]

다음과 같이 시각화 할 수도 있습니다.

a[0] ->  [0] [1] [2] [3]
a[1] ->  [0] [1] [2] [3]

두 번째 그림은 “어레이 배열”측면을 보여줍니다. 첫 번째 배열은를 포함 {a[0] and a[1]}하고 각 배열은 4 개의 요소를 포함하는 배열 {[0][1][2][3]}입니다.

요약 :

Array[number of arrays][how many elements in each of those arrays]

자세한 설명은 배열-2 차원을 참조하십시오 .


답변

Matt B가 어떤 의미에서는 사실 일 수 있지만 기하학 행렬에 대해 전혀 생각하지 않고 Java 다차원 배열을 생각하는 것이 도움이 될 수 있습니다. Java 다차원 배열은 단순히 배열의 배열이며 첫 번째 “차원”의 각 요소는 다른 요소와 크기가 다를 수 있으며 실제로는 null “하위”배열을 저장할 수 있습니다. 이 질문에 대한 의견보기


답변

본능적으로 기하학적으로 생각합니다 : 수평 (X) 축과 수직 (Y) 축. 그러나 이것은 2D 배열의 경우가 아니며 행이 먼저 온 다음 열 이옵니다.

다음과 같은 비유를 고려하십시오. 기하학에서 사다리까지 걸어 가고 (X 축) 사다리를 올라갑니다 (Y 축). 반대로 자바에서는 사다리를 내려 가고 (행) 멀리 걸어 간다 (열).


답변

모두 배열의 시각화에 따라 다릅니다. 행과 열은 시각화의 속성입니다. 배열 자체가 아니라 배열 (아마도 상상할 수 있음)입니다.

숫자 “5”가 빨간색인가요 아니면 초록색인가요?

빨간색으로 그릴 수도 있고 욕심으로 그릴 수도 있겠죠? 색상은 숫자의 필수 속성이 아닙니다. 같은 방식으로 2D 배열을 행과 열의 그리드로 나타낼 필요는 없습니다.

2D 배열에는 첫 번째 차원두 번째 차원 만 있습니다. 이를 시각화하는 것과 관련된 모든 것이 순전히 당신의 취향입니다.

char array가있을 때 char[80][25]스크롤없이 화면에 맞는 80 자 25 행이되도록 회전 된 콘솔에 인쇄하고 싶을 수 있습니다.

2D 배열을 행과 열이 전혀 의미가없는 것으로 표현할 때 실행 가능한 를 제공하려고합니다 . 1000000 정수의 배열이 필요하다고 가정 해 보겠습니다. 내 컴퓨터에는 8GB의 RAM이 있으므로 메모리가 충분하지만을 실행 var a = new int[1000000000]하면 OutOfMemory 예외가 발생할 가능성이 큽니다. 이는 메모리 조각화 때문입니다.이 크기의 연속적인 메모리 블록이 없습니다. 대신 값으로 2D 배열 10,000 x 100,000을 만들 수 있습니다. 논리적으로는 1D 배열이므로 단일 값 시퀀스로 그려서 상상하고 싶지만 기술적 구현으로 인해 2D입니다.


답변

Java에는 다차원 배열이 없습니다. 배열의 배열이 있습니다. 그래서:

int[][] array = new int[2][3];

실제로 두 개의 배열로 구성되며 각 배열에는 세 개의 요소가 있습니다.


답변

행이나 열이 먼저 오는지 기억하는 가장 좋은 방법은 주석을 작성하고 언급하는 것입니다.

Java는 2D 배열을 지정된 행과 열이있는 테이블로 저장하지 않고 다른 많은 답변이 설명하는 것처럼 배열의 배열로 저장합니다. 따라서 첫 번째 또는 두 번째 차원이 행인지 결정할 수 있습니다. 그것에 따라 배열을 읽어야합니다.

그래서 나는 항상 이것에 대해 혼란스러워하기 때문에 2d Array의 어떤 차원이 내 행이고 어느 것이 내 열인지 알려주는 주석을 항상 작성합니다.


답변

Java에서는 2 차원 배열이 두 개의 개별 배열로 간주되기 때문에 행이 먼저 수행됩니다. 첫 번째 행 1 차원 배열로 시작합니다.