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 |