Collection Framework - TreeSet

Collection Framework 의 인터페이스 구조는 다음과 같다.

여기서, Set 인터페이스를 구현하는 클래스로는 HashSet, TreeSet 이 있다.
TreeSet 클래스를 정리해보자.

1. Set 인터페이스

Set 인터페이스를 구현하는 클래스는 다음 특징을 가진다.

  1. 데이터 저장 순서를 유지하지 않음
  2. 데이터의 중복 저장을 허용하지 않음

2. TreeSet - 예시 01

TreeSet 은 Set 의 위 두 가지 특성을 모두 만족한다. 그리고, 다음 특성도 만족한다.
3. 데이터를 정렬된 상태로 유지
다음 코드로, 확인해보자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Test
void tree_set() {
TreeSet<Integer> treeSet = new TreeSet<>();
treeSet.add(30);
treeSet.add(20);
treeSet.add(30);
treeSet.add(10);
treeSet.add(40);

Iterator<Integer> iterator = treeSet.iterator();
while (iterator.hasNext()){
Integer currentInteger = iterator.next();
System.out.println(currentInteger);
}
}

출력 결과는 아래와 같이, 30 을 중복으로 저장하지 않고 정렬 상태를 유지한다.

Read more

Collection Framework - HashSet

Collection Framework 의 인터페이스 구조는 다음과 같다.

여기서, Set 인터페이스를 구현하는 클래스로는 HashSet, TreeSet 이 있다.
HashSet 클래스를 정리해보자.

1. Set 인터페이스

Set 인터페이스를 구현하는 클래스는 다음 특징을 가진다.

  1. 데이터 저장 순서를 유지하지 않음
  2. 데이터의 중복 저장을 허용하지 않음

2. HashSet - 예시 01

HashSet 은 다음과 같이 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
@Test
public void test_hash_set() {
HashSet<String> hashSet = new HashSet<>();
hashSet.add("E");
hashSet.add("C");
hashSet.add("B");
hashSet.add("A");
hashSet.add("E");

Iterator<String> iterator = hashSet.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}

출려 결과는 다음과 같다.

Read more

Collection Framework - Iterable

Collection 인터페이스는 아래과 같이 Iterable 인터페이스를 상속하고 있다.

Iterable 인터페이스가 무엇인지 정리해보자.

1. Iterator

Iterable 인터페이스에는 다음 세개의 메서드가 정의되어 있다.

여기서 iterator 메서드가 정의되어 있는데, Iterator 인터페이스를 반환한다.
즉, iterator 메서드를 호출하면 Iterator 인터페이스를 구현한 클래스의 인스턴스 참조 값을 반환한다.
그리고 Iterator 인터페이스에는 다음 네 개의 메서드가 정의되어 있다.

Iterator 의 사용법은 아래와 같다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class IteratorExample {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);

Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
Integer currentInteger = iterator.next();
System.out.println(currentInteger);
}
}
}
Read more

Collection Framework - List

Java Collection Framework 의 List 를 정리한다.

1. Collection Framework

우선, Collection Framework 가 무엇일까.
공식 문서 (https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html)
에 따르면 다음과 같이 정의되어 있다.

컬렉션 프레임 워크는 컬렉션을 표현하고 조작하기위한 통합 아키텍처로, 구현 세부 사항과 독립적으로 컬렉션을 조작 할 수 있습니다.

컬렉션 프레임워크를 사용하면, 내부 구현을 몰라도 컬렉션을 일관된 방식으로 조작할 수 있다는 것을 알 수 있다.
그렇다면, 컬렉션이란 무엇일까 ? 공식 문서에 따르면,

컬렉션은 객체 그룹 (예 : 클래식 Vector 클래스)을 나타내는 객체입니다.

조금 더 구체적으로 정리하면, 컬렉션은 자료구조 (데이터 저장) 와 알고리즘 (데이터 연산) 을 클래스로 구현해 놓은 것이다.

2. Architecture

컬랙션 프레임워크의 인터페이스 구조는 아래와 같다.
List, Set, Queue 인터페이스가 Collection 인터페이스를 상속하고 있다.

Read more

Shallow Copy, Deep Copy

Clone

Object 클래스에는 인스턴스 복사를 위한 clone 메서드가 정의되어 있다.
이 메서드가 호출되면, 호출된 인스턴스의 복사본이 생성되고 이 복사본의 참조값이 반환된다.

다음과 같이 Point 클래스가 있다고 하자. Cloneable 인터페이스를 구현하고 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Point implements Cloneable {
private int x;
private int y;

public Point(int x, int y) {
this.x = x;
this.y = y;
}

public void showPositions() {
System.out.println(x + " " + y);
}

@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

clone 메서드는 다음과 같이 호출해서 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
@Test
public void test_clone() {
Point origin = new Point(1, 2);
try {
Point copy = (Point) origin.clone();

origin.showPositions();
copy.showPositions();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}

결과는 다음과 같다.

지금까지의 상황을 그림으로 그려 보면 다음과 같다.

Read more