TreeSet 자료형은 이진트리 (Binary Tree) 구조의 자료형태이다. 최상위층을 중심으로 값이 적고 많은 노드로 나눠진다. 구조의 몇가지 규칙이 있으나 사용자가 알아야 할 것은 데이터의 추가나 삭제에 시간이 걸리고, 상대적으로 검색 능력이 좋다는 것이다.
이 포스트에서는 예제를 빠르게 보고 지나간다.
더 자세하게 알고 싶고 직접 자료구조를 구현하려는 사람은 C알고리즘의 이진트리를 공부하는 것을 추천한다. 자바 콜렉션 프레임워크는 직접 자료형을 구현하는게 아니라 객체지향에 맞춰 사용하는 것에 초점이 맞춰져 있다.
en.wikipedia.org/wiki/Binary_tree
Binary tree – Wikipedia
Not to be confused with B-tree. A labeled binary tree of size 9 and height 3, with a root node whose value is 2. The above tree is unbalanced and not sorted. In computer science, a binary tree is a tree data structure in which each node has at most two chi
en.wikipedia.org
* 이쯤되면 콜렉션 프레임 워크의 사용법이 비슷비슷하다는 생각이 들것이다.
트리 셋이라는 것은 Set 인터페이스를 받았기 때문에 중복을 허용하지 않는다. 로또 번호의 경우 이 조건에 들어 맞는다.
set.size() < 6 으로 루프를 돌면 중복이 나오면 버리고 순수한 6개 숫자가 찰때까지 루프한다. 아래 코드로 돌리면 간혹 한두번 정도 더 루프를 돈다. 범위가 줄어들면 같은 번호 중복일 가능성이 높아진다. 그러면 루프 횟수가 증가한다.
Set set = new TreeSet();
for (int i = 0; set.size() < 6; i ) {
int num = (int)(Math.random()*45) 1;
set.add(num);
}
System.out.println(set);
사실 소프트웨어의 난수는 알고리즘에 의해 만들어지는 것이라서 완전하지가 않다. 로또가 순수한 자연의 정규분포에서 선택되는 것이라면 컴퓨터로 난수를 생성하는 것은 그다지 좋은 선택이 아닐지도 모른다. 그냥 머리속에 갑자기 떠오르는 숫자가 더 좋을지도 모른다… 만 요새는 자동으로도 당첨이 된다니까 로또는 그냥 도박의 일종이라 생각한다;;;
그런 상상이라도 해야 살만한 세상이다
-> 완전한 랜덤이 아니지만 그럴듯하게 보이는 랜덤함수를 수도 랜덤(의사 난수) 라고 한다.
* 다음 예제는 범위의 문자열을 찾는 메소드다.
start 지점부터 end 지점까지 해당하는 subSet 하위집합을 찾는다.
우선 랜덤 함수로 무작위 문자열을 생성한다. random.nextInt(5) 5 는 5에서부터 9까지 범위의 정수를 무작위로 만든다. 문자열의 길이이다.
a 부터 f 까지 문자로 시작하는 문자열을 찾는다. (subSet 메소드)
기본적으로 트리셋은 중복이 되지 않고 데이터의 입력시점에 정렬이 되는 모습을 볼 수 있다.
TreeSet set1 = new TreeSet();
String start = \"a\";
String end = \"f\";
Random random = new Random();
for (int i = 0; i < 10; i ) {
int length = random.nextInt(5) 5;
set1.add(randomWord(\"lower\", length));
}
System.out.println(set1);
System.out.println(\"set1.subSet(start,end) = \" set1.subSet(start, end));
* 마지막 예제는 배열을 트리셋에 넣고 기준점을 잡아서 그보다 작은 숫자와 큰 숫자로 나누는 방법이다.
TreeSet에 배열을 무작위로 입력하면 바로 정렬이 된다. 정렬하지 않아도 오른쪽(큰수) 왼쪽(작은수)이 나눠진다.
TreeSet set2 = new TreeSet();
int[] array = {25, 35, 15, 90, 70, 65, 80, 50, 100};
for(int i=0; i < array.length; i )
set2.add(array[i]);
System.out.println(\"set2.headSet(70) = \" set2.headSet(70));
System.out.println(\"set2.headSet(70) = \" set2.tailSet(70));
TreeSet 은 이진 트리의 Tree 속성과 집합의 Set 속성을 함께 가지고 있는 콜렉션이다.
相关推荐
자바 튜토리얼 12 - 1 컬렉션 프레임워크 개념에 대한 글
자바 튜토리얼 12 - 2 | ArrayList 리스트 자료형
자바 튜토리얼 (9-3) 인터페이스 다중 구현, 상속
자바 튜토리얼 (10-1) Java Swing JFrame 윈도우창 만들기
자바 튜토리얼 (10-2) Java Swing JButton, JLabel
Calendar 클래스 예제 1 | 자바 JDK | 날짜와 시간 사용하기
Calendar 클래스 예제 2 | 자바 JDK | 두 날짜간 연산 한글요일
자바 튜토리얼 (10-3) Java Swing JTextField, JTextArea 예제
最新评论
嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自Gravatar。