로또 추첨기 안에는 1번부터 64번까지의 볼들이 중복 없이, 그리고 순서 없이 들어가 있습니다.
여기서 핵심은 순서가 없다는 것과 중복을 허용하지 않는다는 것입니다.
무슨 뜻인지 하나씩 살펴보겠습니다.
순서가 없다
List의 경우는 각각의 값들이 특정한 인덱스에 속해 있습니다. 그리고 그 인덱스가 순서가 됩니다.
하지만 Set은 인덱스가 없으므로 그냥 로또 추첨기 안의 로또볼처럼 뒤섞여 있는 형태입니다. 그래서 순서가 없다고 말하는 것 이죠.
중복이 허용되지 않는다
List의 경우는 새로운 값을 추가했는데 기존에 있는 값과 동일해도 아무런 문제가 되지 않습니다. 하지만 Set 은 동일한 값이 들어오려 할 경우 아예 받아주지 않습니다.
또한 Set 은 순서가 없기에 어떤 값을 찾기가 어렵습니다. 즉검색이 불가능하다는 뜻인데요,
순서가 없으면 왜 검색이 안되는지 알아보도록 하겠습니다.
List의 경우 순서가 있기에 내가 몇 번 인덱스까지 찾고 있는 중인지 알 수 있습니다. 그렇기에 내가 어디까지 이미 찾아보았다는 것을 알 수 있다는 것입니다.우리도 가끔 무언가를 찾을 때 순서를 정하고 그 순서대로 찾지 않나요? 그러면 한번 찾았던 곳을 두 번 찾을 일이 없으니까요.
하지만 Set은 그럴 수 없습니다. 순서가 없기에 어디까지 찾았는지 알 수가 없습니다.
그럼 이렇게 이야기하시는 분도 있을 것입니다.
한번 본 녀석은 빼 버리면 되지 않나요? 그럼 한번 확인한 녀석을 두 번 확인하는 일이 없을 테니까요.
바로 그 겁니다!
그래서 Set에서는 검색을 할 수 없지만 안에 있는 녀석을 하나씩 뺄 수 있는 기능이 있습니다.
그래서 Set을 하나씩 빼낼 수 있는 형태인 Iterator 형태로 바꿀 수 있으며, 이 형태에서 하나씩 값들을 빼낼 수 있는 메서드도 제공합니다. 만약 Set에서 내가 원하는 값이 있는지 찾고 싶다면 먼저 Iterator 형태로 변경한 다음에 하나씩 빼내면 됩니다.
Set 역시도 Set 인터페이스를 구현받는 클래스들로 이루어져 있습니다.그렇기 때문에 사용법도 동일하고, 기본적인 특징들도 모두 비슷합니다.