Java-왜 배열을 "벡터"라고 부릅니까?


20

Java Programming에 관한 책을 읽고 있는데 "vector"라는 단어의 정의를 이해하고 싶습니다. Wikipedia에 따르면 vector는 "일차원 배열"이며 출처는 http://en.wikipedia.org/wiki/Vector 입니다.

배열을 단순히 배열로 호출하는 것이 더 간단하지 않습니까? "벡터"와 같은 멋진 언어를 사용해야하는 이유가 있습니까? 배열과 벡터 사이에 차이가 있습니까?


여기에 이미지 설명을 입력하십시오

출처 : Gayle McDowell의 코딩 인터뷰 균열, 4 판, 47 페이지.

FAQ
Q-english.stackexchange.com에 이것을 게시하지 않은 이유는 무엇입니까?
A-컴퓨터 공학에 관심이있는 사람들 만 대답 할 수 있다고 생각하기 때문입니다.


1
벡터는 내장 동기화 때문에 ArrayLists와 동일하지 않습니다. 여기에 더 많은 정보 : stackoverflow.com/questions/2986296/...
제론 Vannevel

주제 외 : "벡터"라는 용어는 Java에서만 사용되지 않습니다. 1. C ++ 라이브러리에는 std::vector<…>동적 크기의 "배열"이 있습니다. 2. CLR (.NET 런타임)은 또한 "배열"과 "벡터"를 구별하는데, 후자는 전자의 특별한 경우, 즉 1 차원, 0부터 시작하는 것입니다. 벡터에 대한 특별한 최적화가 있기 때문에 이러한 구별이 중요합니다. 3. 수학에서 실수 의 n- 튜플을 "벡터"라고도합니다.
stakx

1
@JeroenVannevel 나는 당신이 Vector 클래스와 벡터의 개념 사이에 혼란을 일으킨 것으로 생각합니다. 이것은 일차원 배열로 간주 될 수 있습니다.
C.Champagne

OT, 컴퓨터 과학 사람들의 답변을 원한다면 왜 cs.stackexchange에 게시하지 않습니까? 왜 자바 플래그입니까? 프로그래밍 클래스에서 기억하는 것에는 배열이 있고 연결된 목록이 있습니다. 배열을 제외하고 컨테이너 (벡터, 목록, 맵, 힙 등)는 연결 목록으로 구현됩니다.
imel96 23

2
왜 벡터를 배열이라고 부릅니까?
m3th0dman

답변:


35

일반적인 사용법에서 "배열"은 1 차원 배열 또는 다차원 배열을 의미 할 수 있습니다. 또한 수학에서 행렬 은 2 차원 배열 이고 벡터 는 1 차원 배열입니다.


8
주 제외 : 수학에서 "스칼라"는 0 차원 배열입니까?
stakx

6
@ stakx : 네, 맞습니다. 일반적으로 스칼라는 단지 스칼라이므로 아무도 실제로이를 "0 차원 배열"이라고 부르지는 않습니다. 그러나 아이디어는 옳습니다.
Greg Hewgill

2
그들이 모두 텐서라고 말하는 것이 더 정확합니다. Wolfram Mathworld에서 : "텐서는 스칼라 (인덱스가없는), 벡터 (정확히 하나의 인덱스가있는) 및 행렬 (정확히 두 개의 인덱스가있는)를 임의의 수의 인덱스로 일반화 한 것입니다." (Rowland, Todd 및 Weisstein, Eric W. "Tensor."from MathWorld--A Wolfram Web Resource. mathworld.wolfram.com/Tensor.html )
SOFe

가치있는 것은 수학에서 벡터는 1 차원 배열이 아닙니다. 벡터는 벡터 공간의 요소, 즉 요소에 스칼라를 더하고 곱할 수있는 집합입니다.
mlainz

가장 유명한 벡터 공간은 R ^ n이며 요소 별 덧셈과 곱셈이있는 숫자의 "배열"집합입니다. 실제 함수 세트는 벡터 공간이기도하지만 일반적으로 함수를 배열로 생각하지 않습니다. 덧셈과 곱셈의 명백한 선택이 없기 때문에 문자 배열은 벡터 공간이 아닙니다. 수학 용어에서 배열은 튜플 또는 유한 시퀀스입니다. 벡터가 아닌 튜플에 대한 자세한 예는 en.wikipedia.org/wiki/Vector_(mathematics_and_physics) 를 참조하십시오 .
mlainz

10

벡터는 정확히 배열이 아닙니다. 어쨌든 고전적인 것은 아닙니다. 그것들은 동적 배열입니다. 크기가 고정되어 있지 않고 필요에 따라 크기를 조정할 수 있습니다. 따라서 ArrayList와 유사하지만 동일하지는 않습니다.

ArrayLists는 Vectors가 Vector와 다릅니다 .Vectors는 개별 작업을 동기화하며 이는 특히 Jon Skeet에 따라 동시성 목적으로 원하지 않는 것 입니다. 따라서 Vector는 ArrayList를 위해 더 이상 사용되지 않지만 일부는 여전히 Vector라고 부릅니다.

이름 은 원래 1 차원 행렬의 수학 용어에서 파생되었습니다. 이것은 실제로 n- 튜플 인 구조에도 불구하고 있습니다.


2
나는 당신이 Vector 클래스와 vector의 개념 사이에 혼란을 일으켰습니다.이 개념은 단 차원 배열로 간주 될 수 있으며 Java와 관련이 있습니다.
C.Champagne

@ C.Champagne 그는 Java 예제를 사용 했으므로 이것이 내가 준 것입니다. 기술적으로 "벡터"도 아닌 수학적 구성에 대한 정의를 추가했습니다.
세계 엔지니어

2
@ C.Champagne와 함께 있습니다. 이들이 Vector (클래스)를 의미했다면 텍스트는 대문자 V를 사용했을 것입니다. 소문자 v를 사용하여 벡터의 고전적인 (클래스가 아닌) 정의를 나타냅니다.
Rig

음, 벡터는 math에서 벡터라고 합니다. "기술적으로 '벡터'도 아니다"는 무슨 뜻입니까?
Andres F.

@AndresF. 배열 또는 "벡터"와 같은 숫자 집합은 n 튜플이 될 것입니다.이 값은 개별 값 모음이기 때문에 이해합니다.
세계 엔지니어

4

일반적으로 벡터배열 은 동일하며 프로그래밍 할 때 서로 바꿔 사용할 수 있습니다. 그것은 대부분의 장소에 있기 때문에 대부분 걱정하지 않아도됩니다.

즉, 언어는 정확하지 않으며 때때로 같은 의미를 갖는 다른 문맥에서 다른 의미를 갖는 단어 또는 두 개 이상의 다른 의미를 갖는 단어가 있습니다.

C에서 배열 은 연속적으로 메모리에 저장되는 동일한 유형의 일련의 데이터 요소입니다. 자바는 그 의미를 물려 받았습니다. 배열은 그보다 기본이므로 List 또는 Vector와 동일하지 않습니다.

벡터는 동일 유형의 다른 객체에 추가 될 수 있고, 또는 동일한 종류의 다른 벡터에 결과적인 실제 (또는 단지) 곱한 될 물체로 정의 수학 구성체이다. 또한 매우 유용한 몇 가지 다른 속성이 있습니다.

벡터에는 차원이 있습니다. 해당 유형의 가능한 모든 벡터를 얻기 위해 결합해야하는 다른 벡터의 최소 개수입니다. 공간은 3 개의 기본 방향을 가지고 있기 때문에 속도와 가속도는 3 차원 벡터이며이 3 개의 기본 방향의 배수를 추가하면 공간의 어느 위치에서나 얻을 수 있습니다. 평면에서의 위치는 2 차원 벡터이며 개별 숫자는 1 차원 벡터입니다.

차원 n벡터 를 나타내는 한 가지 방법 은 n 개의 요소 배열을 사용 하는 것입니다. 각 요소 는 벡터에 도달하기 위해 추가해야하는 각 기본 벡터의 양을 나타냅니다.

시간이 지남에 따라 다양한 요소를 사용하여 벡터를 표현할 수 있으므로 두 개념이 동일 해졌습니다. 그래서 많은 곳에서 그것들은 단순히 똑같으며 어떤 언어에서는 배열을 벡터라고 부릅니다.

한 단어가 두 가지 다른 의미를 갖는 다른 경우는 예를 들어 dimension 입니다. 1 차원 배열로 벡터의 wikipedia 정의가 예입니다. 여기서 벡터 치수에 대해 이야기하고 있지 않습니다. 데이터 구조의 컴퓨터 표현에 대해 이야기하고 있습니다. 3 차원 벡터는 크기가 3 ~ 3 인 "1 차원"배열로 표시 될 수 있습니다. 3x3 행렬은 "2 차원"배열로 표현 될 수 있는데, 이는 프로그래머가 배열 배열을 호출하는 것입니다. 그러나 3x3 행렬은 벡터의 모든 속성을 가지기 때문에 차원 9의 수학 벡터이며 9 개의 숫자를 갖습니다. 혼란 스럽습니까?

어쨌든 대답은 간단합니다. 걱정하지 마십시오. 그것은 모두 상황에 달려 있습니다. 두 단어는 서로 다른 원점을 갖지만 데이터 구조의 맥락에서 벡터 라고 말하면 정확히 array 를 의미합니다 .


나는 이것이 사실이라고 생각하지 않습니다. 배열을 가로 질러 실행 한 거의 모든 설명서에서 고정 크기를 의미하는 Vector는 구조의 크기를 동적으로 조정할 수 있음을 의미합니다. 용어의 수학적 정의는 프로그래밍의 맥락에서 엄청나게 오도됩니다.
Chuu

-1

위의 답변은이 클래스가 "배열"과 다른 이유를 설명합니다. 다른 이름이 사용되는 이유는 프로그래머가 잘 구성된 네임 스페이스를 사용하여 도움을 받기 때문입니다. 즉, "벡터"에 대해 이야기하면 모든 클래스가 단순히 배열이라면 완전히 명확하지는 않지만 정확히 어떤 클래스를 의미하는지 명확하게하십시오.


-1

"벡터"라는 용어는 C ++의 std :: vector에서 유래 한 것 같습니다. Java와 C # 이전에 나타났습니다.


3
의견을 뒷받침하기 위해 외부 참조를 추가하는 것을 고려하십시오.

-1

딱딱한 편집입니다.

초기 버전의 Java에는 ArrayList가 포함되지 않았습니다. ArrayList 대신 Vector가 사용되었습니다. 나중에 ArrayList가 추가되었으며 현재 대부분의 목적으로 Vector 대신 사용됩니다. 이 책은 ArrayList가 추가되기 전에 작성되었으며 텍스트가 업데이트 될 때 벡터에 대한이 참조는 그렇지 않았을 것으로 예상됩니다.

이런 종류의 "10 분 만에 배우십시오"책을 피하는 것이 좋습니다. 일반적으로 그것들은 빠르고 간결하게 작성됩니다. 이 수준의 지식은 진지한 상점에서 일자리를 얻지 못할 것입니다.

대신 기술에 대해 잘 알고 이해 한 사용자가 잘 검토 한 책을 찾아보십시오.


1
"초기 버전은 ..."? 그리고 무엇 java.util.Vector입니까?
Reinstate Monica-M. Schröder

1
더 이상 사용되지 않는 것은 java.util.Vector입니다. :-)
Brian Knoblauch

-1

벡터라는 용어는 공학 / 물리에서 나옵니다. 벡터는 방향이있는 2 차원 및 3 차원 선을 나타냅니다. 예를 들어, 발사체의 수평 속도는 20m / s이고 수직 속도는 10m / s입니다. 따라서 이것을 (20,10)으로 표시합니다. 그것은 대각선 오른쪽으로 날아가고 있습니다. 이제 수학적으로 속도 벡터가 일명 벡터 배열이되는 방법을 봅니다.


-2

우리는 배열 벡터를 호출하지 않습니다. 소스를 잘못 이해했거나 소스가 Java를 잘못 이해했거나 둘 다입니다.
배열은 Vector와는 상당히 다른 데이터 구조로, 붙여 넣은 코드에서 사용하는 List와는 다릅니다.

물론 세 가지 메커니즘 중 하나를 사용하여 Java에서 수학적 벡터를 구현할 수 있으며, 기본적으로 Vector 및 List를 배열을 사용하여 구현할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.