Java

[JAVA] 11. 자바 컬렉션(Set과 Queue편)

히비스 2021. 4. 30. 18:13

Set은 순서에 상관 없이, 어떤 데이터가 존재하는지를 확인하기 위해 사용됨.

 

예를 들어, 어떤 서버에 1분간 사용자가 요청한 로그가 있음.

이 서버에 붙어서 요청한 IP를 기준으로 사용자의 수가 얼마나 되는지 확인한다고 가정.

중복된 사용자는 모두 1로 봐야 하므로 set으로 추출이 필요함.

 

 

Set 인터페이스를 구현한 주요 클래스 HashSet, TreeSet, LinkedHashSet

  • HashSet : 순서가 전혀 필요 없는 데이터를 해시 테이블에 저장. Set 중에 가장 성능이 좋다
  • TreeSet : 저장된 데이터의 값에 따라 정렬됨. HashSet 보다 성능이 약간 느림.
  • LinkedHashSet : 저장된 순서에 따라 값이 정렬. 성능 가장 나쁨.

 

HashSet 클래스의 상속 관계

java.lang.Object

   ㄴ java.util.AbtractCollection<E>

        ㄴ java.util.AbstractSet<E>

              ㄴ java.util.HashSet<E>

 

Set은 순서가 없다.

따라서, list 클래스와 같이 순서가 매개 변수로 넘어가는 메소드나 수행 결과가 데이터의 위치와

관련된 메소드는 Set 인터페이스엔 필요하지 않다.

주요 메소드는 생략한다.

 

 

Queue는 왜 필요할까? (FIFO - First In First Out)

Queue에 앞서 LinkedList를 설명하고 넘어가자.

말 그대로 연결된 배열인데, 일반 배열과 다른 점은

배열의 중간에 있는 데이터가 지속적으로 삭제되고, 추가될 경우에는

LinkedList가 배열보다 메모리 공간 측면에서 훨씬 유리하다.

 

ArraList와 Vector는 각 위치가 정해져 있고, 그 위치로 데이터를 찾는다.

맨 앞의 값을 삭제하면, 그 뒤에 있는 값들은 하나씩 앞으로 위치 이동을 해야 한다.

 

그에 반해,

LinkedList는 중간에 있는 데이터를 삭제하면, 지운 데이터의 앞 뒤 데이터를 연결하면 그만이다.

그리고, LinkedList는 Queue와 Deque 인터페이스를 구현하고 있다.결국, LinkedList는 List도 되고 Queue도 된다.게다가, Deque 인터페이스도 구현하므로, 맨 앞과 끝의 데이터를 쉽게 처리 가능함.

 

 

LinkedList의 상속 관계

java.lang.Object

   ㄴ java.util.AbtractCollection<E>

        ㄴ java.util.AbstractList<E>

              ㄴ java.util.AbstractSequentialList<E>

                    ㄴ java.util.LinkedList<E>

 

LinkedList<String> link = new LinkedList<String>();

LinkedList는 각 데이터들을 앞 뒤로 연결하는 구조이기 때문에, 미리 공간을 만들어 놓을 필요가 없어 크기 지정을 하지 않음.

 

 

Queue의 유용성

가장 앞에 온 요청뿐만 아니라, 가장 마지막에 온 요청들도 빨리 찾을 수 있음.

웹 서버나 WAS 등과 같이 사용자의 요청을 처리하는 서버에서 Queue로 처리함.

 

 

 

 

 

 

*** 자바의 신(이상민 저)을 공부한 내용 중에 기억해야 할 개념들을 정리해 놓은 글 입니다.***

'Java' 카테고리의 다른 글

[JAVA] 13. 쓰레드(Thread)  (0) 2021.05.04
[JAVA] 12. 자바 컬렉션(Map편)  (0) 2021.04.30
[JAVA] 10. 자바 컬렉션(List편)  (0) 2021.04.30
[JAVA] 9. 특별한 java.lang 패키지  (0) 2021.04.30
[JAVA] 8. JVM의 개념과 역할  (0) 2021.04.30