728x90
  • 중복 허용 안함, 순서 없음
  • 중복을 허용하지 않기 위해 객체 저장 전에 기존에 같은 객체가 있는지 확인
  • Set 인터페이스를 구현한 대표적인 컬렉션 클래스
  • 순서를 유지하려면 LinkedHashSet을 사용해야 함
  • Set을 정렬하려면 List로 바꾼 뒤에 가능

생성자

HashSet();
HashSet(Collection c);
HashSet(int initialCapacity);
HashSet(int initialCapacity, float loadFactor);

메소드

add(), addAll()

객체 추가 및 합집합

remove(), removeAll()

객체 삭제 및 교집합

retainAll()

조건부 삭제(차집합)

contains(), containsAll()

포함되는 것만 남김

clear()

전체 삭제

isEmpty()

비어있는지 여부

size()

저장된 객체수

toArray()

객체 배열로 반환

주의

  • HashSet의 add 메소드는 값을 저장하기 전에 자동으로 Object 클래스의 equals와 hashCode 메소드를 사용하여 중복된 데이터를 방지하는 작업을 하는데 저장하려는 객체가 여러 값을 가지고 있다면 중복을 제대로 검사하지 못하기 때문에 equals와 hashCode 메소드를 오버라이딩 해서 사용해야 함
  • 하지만 이런 귀찮은 점을 편리하게 만들기 위해 자바에서 기본적으로 제공하는 Objects 클래스의 hash와 equals 메소드를 Object 클래스의 equals와 hashCode 메소드의 리턴 값으로 오버라이딩 해주기만 하면 문제 없음
@Override
public int hashCode() {
	return Objects.hash(name, age);
}

@Override
public boolean equals(Object obj) {
	// Object가 비교하려는 객체의 인스턴스인지 확인 후
	if(!(obj instanceof Person)) return false;
    
    Person p = (Person)obj; // 맞다면 비교하려는 객체로 형변환
	return this.name.equals(p.name) && this.age == p.age; // 비교
}

'Java > Notion' 카테고리의 다른 글

Map - HashMap / Hashtable  (0) 2023.05.01
Set - TreeSet  (0) 2023.04.30
Comparator / Comparable  (0) 2023.04.30
Arrays  (0) 2023.04.30
Iterator / ListIterator / Enumeration  (0) 2023.04.30
728x90

객체 정렬에 필요한 메서드(정렬기준 제공)를 정의한 인터페이스

오버라이딩하여 자신에 맞게 정렬 기준을 정의할 수 있음

Comparator

기본 정렬기준을 구현할 때 사용 ( 두 객체를 비교 )  =  compare()

Comparable

기본 정렬기준 외에 다른 기준으로 정렬할 때 사용 ( 자기 자신과 객체를 비교 )  =  compareTo()

 

'Java > Notion' 카테고리의 다른 글

Set - TreeSet  (0) 2023.04.30
Set - HashSet  (0) 2023.04.30
Arrays  (0) 2023.04.30
Iterator / ListIterator / Enumeration  (0) 2023.04.30
Stack / Queue  (0) 2023.04.30
728x90

자바에서 배열을 다루기 편리한 메서드를 제공해주는 클래스

메소드

toString()

배열을 문자열로 출력해줌

copyOf(원본배열, 복사할 개수), copyOfRange(원본배열, 시작 인덱스, 끝 인덱스)

배열의 복사하여 새로운 배열을 생성해서 반환

넘치는 범위는 타입의 기본값으로 채움

fill()

배열을 지정한 요소로 채움

setAll()

배열을 지정한 람다식으로 채움

sort()

배열을 오름차순(0,1,2,...99)으로 정렬

binarySearch()

정렬이 되어있지 않으면 잘못된 결과가 나오기 때문에 정렬이 되어있는 경우에만 사용

deepToString()

다차원 배열을 문자열로 출력해줌

deepEquals()

다차원 배열을 비교하는 경우

asList(배열)

배열을 List(읽기전용)로 변환

 

'Java > Notion' 카테고리의 다른 글

Set - HashSet  (0) 2023.04.30
Comparator / Comparable  (0) 2023.04.30
Iterator / ListIterator / Enumeration  (0) 2023.04.30
Stack / Queue  (0) 2023.04.30
List - LinkedList  (0) 2023.04.30
728x90
  • 컬렉션에 저장된 데이터를 접근할 때 사용되는 인터페이스
  • Enumeration은 Iterator의 구버전
  • ListIterator는 Iterator의 단반향적인 접근성을 양방향으로 향상시킨 인터페이스
  • 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화한 것
  • Iterator를 가장 많이 사용함

메소드

hasNext()

읽어 올 요소가 남아있는지 확인

next()

다음 요소를 읽어 옴

remove()

next()로 읽어 온 요소를 삭제

forEachRemaining

컬렉션에 남아있는 요소들에 대해 지정된 작업을 수행하며 람다식을 사용하는 디폴트 메서드

Iterator

List list = new ArrayList();
Iterator it = list.iterator();


// 리스트를 모두 출력하는 경우
while(it.hasNext()) { // 리스트에 다음 요소가 없을 때까지 반복하여
	Object obj = it.next(); // 0번째 인덱스부터 시작하여 다음 인덱스를 계속 obj 객체에 담고
    System.out.println(obj); // 출력
}

// 만약 같은 코드를 계속 반복하면 이터레이터는 일회용이기 때문에
// 새로 만들어주지 않는 한 값을 다 읽었기 때문에 hasNext()의 값이 false임
while(it.hasNext()) { // 이 반복문은 실행되지만
	Object obj = it.next(); 
    System.out.println(obj); 
}
while(it.hasNext()) { // 이 반복문은 실행되지 않음
	Object obj = it.next(); 
    System.out.println(obj); 
}

Iterator의 장점

List와 Set은 같은 Collection 클래스를 조상으로 가지기 때문에 컬렉션을 바꿀 일이 생겨도

Iterator를 공유하기 때문에 작성해둔 코드를 바꿀 필요가 없음

Map과 Iterator

Map에는 Collection 클래스를 조상으로 가지지 않아서 Iterator가 없기 때문에

keySet, entrySet, values 메소드를 호출해서 Set이나 Collection 타입을 가져서 사용할 수 있음

Map map = new HashMap();
Iterator it = map.entrySet().iterator();

'Java > Notion' 카테고리의 다른 글

Comparator / Comparable  (0) 2023.04.30
Arrays  (0) 2023.04.30
Stack / Queue  (0) 2023.04.30
List - LinkedList  (0) 2023.04.30
List - ArrayList  (0) 2023.04.30
728x90

Stack

  • LIFO(Last In First Out, 후입선출) 구조로 마지막에 저장(push)된 것을 가장 먼저 추출(pop)
  • 순차적으로 추가하고 삭제하기 때문에 ArrayList로 구현하는 것이 좋음
  • 단방향 입출력
  • 데이터는 하나씩만 넣고 빼는 것이 가능
Stack 참조변수명 = new Stack();

장점

  • 스택에 저장된 데이터를 가져오는 속도가 매우 빠름
  • 자바에서 기본적으로 스택 클래스를 제공

단점

  • 크기의 제한이 없으므로 불필요한 메모리 사용량 증가가 발생할 수 있음
  • Vector 클래스를 상속 받아 구현되어 크기를 동적으로 조정하지 않음
  • 자바에서의 스택 클래스는 다른 언어의 스택과는 다르게 Vector 클래스를 상속 받아 중간에서 데이터를 삽입 및 삭제가능

Stack의 메소드

empty()

Stack이 비어있는지 알려줌

peek()

Stack의 맨 위에 저장된 객체를 꺼내지 않고 반환

Stack이 비었을 경우에는 예외 발생

pop()

Stack의 맨 위에 저장된 객체를 꺼냄

Stack이 비었을 경우에는 예외 발생

push()

Stack에 객체를 저장

search()

Stack에서 주어진 객체를 찾아 그 위치를 반환하고, 못찾으면 -1을 반환

배열과는 다르게 위치는 0이 아닌 1부터 시작

get()

특정 인덱스의 요소를 찾음

set()

특정 인덱스에 요소를 넣음

remove()

특정 인덱스의 요소를 제거

Stack의 활용

수식계산, 수식괄호검사, 워드프로세서의 되돌리기/다시실행, 웹브라우저의 전후 페이지 이동

Queue

FIFO(First In First Out) 구조로 가장 먼저 저장(offer)한 것을 가장 먼저 추출(poll)

요소를 바로바로 삭제할 수 있는 Linked List를 통해 구현하는 것이 유리함

// Queue는 클래스가 아니라 인터페이스로 정의되어 있기 때문에
// 생성자를 사용할 수 없음

// 1. 큐를 직접 구현
// 2. 혹은 큐를 구현한 클래스를 사용 (LinkedList)
Queue q = new LinkedList();
q.offer("0");

Queue의 메소드

add()

지정된 객체를 Queue에 추가하고, 성공하면 true를 반환

저장공간 부족시 예외 발생

remove()

Queue에서 객체를 꺼내 반환하고 비어 있으면 예외 발생

element()

삭제없이 요소를 읽어 오지만, peek과 다르게 Queue가 비었을 때 예외 발생

offer()

객체를 저장하고, 성공하면 true, 실패하면 false 반환

poll()

Queue에서 객체를 꺼내서 반환하고, 비어있으면 null을 반환하고 예외는 발생하지 않음

peek()

삭제없이 요소를 읽어 오지만, element와는 다르게 Queue가 비어있어도 예외가 발생하지 않고 null을 반환

Queue의 활용

최근에 사용한 문서, 인쇄작업 대기목록, 버퍼

'Java > Notion' 카테고리의 다른 글

Arrays  (0) 2023.04.30
Iterator / ListIterator / Enumeration  (0) 2023.04.30
List - LinkedList  (0) 2023.04.30
List - ArrayList  (0) 2023.04.30
컬렉션 프레임워크 - Map  (0) 2023.04.30
728x90
  • 배열은 구조가 간단하고 연속적인 데이터를 읽는데 걸리는 시간이 짧음
  • 하지만 크기를 변경할 수 없음
  • 또한 비순차적인 데이터의 추가나 삭제에 시간이 많이 걸림

LinkedList

  • 배열의 단점을 보완하기 위해 생김
  • 불연속적으로 존재하는 데이터를 연결
  • 다음 요소를 가리키는 노드를 가지고 있는 구조
  • 변경에 유리함
  • 데이터를 삭제하는 경우 삭제하는 요소의 연결을 끊고 다음 요소랑 연결만 하면 가능
  • 즉, 단 한 번의 참조변경만으로 삭제가 가능
  • 리스트 중간의 요소(비순차적)를 추가하거나 삭제 하는 경우에만 ArrayList보다 좋음
  • 메모리 사용은 ArrayList보다 효율적이지만 데이터가 많을수록 접근성이 떨어짐

Linked List (연결 리스트)

데이터의 수정은 빠르지만 불연속적이라 데이터 접근성이 나쁨

Doubly Linked List (이중 연결 리스트)

  • 자바에서 구현되어 있는 리스트

연결 리스트에서 접근성을 향상 시킨 리스트로 전과 후의 요소의 노드(참조)를 갖고 있음

하지만 노드끼리 연결이 두개씩 되어 있기 때문에 연결 리스트보다 수정에 있어서 느리고

여전히 배열보다는 접근성이 좋지 않음

Doubly Circular Linked List (이중 원형 연결 리스트)

이중 연결 리스트에서 추가적으로 처음과 끝의 요소끼리 노드를 연결한 리스트

'Java > Notion' 카테고리의 다른 글

Iterator / ListIterator / Enumeration  (0) 2023.04.30
Stack / Queue  (0) 2023.04.30
List - ArrayList  (0) 2023.04.30
컬렉션 프레임워크 - Map  (0) 2023.04.30
컬렉션 프레임워크 - Set  (0) 2023.04.30
728x90
  • 기존의 Vector를 개선한 것
  • 자체적으로 동기화 처리가 되지 않음
  • Vector는 자체적으로 동기화 처리가 됨
  • 저장순서가 유지되고 중복을 허용
  • 데이터의 저장공간으로 배열 사용

생성자

ArrayList() // 기본
ArrayList(Collection c) // 컬렉션의 길이와 같음
ArrayList(int initialCapacity) // 배열의 길이 직접 지정

메소드

add(Object), add(index, Object)

맨 뒤 혹은 지정 인덱스에 요소를 추가

기존 요소들은 한 칸씩 밀림

addAll(Collection), addAll(index, Collection)

맨 뒤 혹은 지정 인덱스에 객체들을 추가

remove(Object), remove(index)

지정 객체나 인덱스의 객체를 제거

removeAll(Collection), clear()

지정 컬렉션의 객체들만 삭제하거나 모든 객체를 삭제

indexOf(), lastIndexOf()

지정 객체를 인덱스의 처음 혹은 끝부터 찾아서 인덱스를 반환하고 없다면 -1을 반환

contains()

지정 객체가 존재하는지 여부를 반환

get(), set()

지정 인덱스의 객체를 읽거나 수정

subList()

시작 인덱스부터 끝 인덱스 까지 값을 추출하여 새로운 리스트를 생성

Object[ ] toArray()

ArrayList의 객체 배열을 반환

trimToSize()

빈 공간 제거

size()

ArrayList에 저장된 객체의 개수를 반환

 

'Java > Notion' 카테고리의 다른 글

Stack / Queue  (0) 2023.04.30
List - LinkedList  (0) 2023.04.30
컬렉션 프레임워크 - Map  (0) 2023.04.30
컬렉션 프레임워크 - Set  (0) 2023.04.30
컬렉션 프레임워크 - List  (0) 2023.04.30
728x90
  • HashMap
  • TreeMap
  • LinkedHashMap (순서가 필요한 경우 사용하는 HashMap)
  • SortedMap
  • Hashtable

메소드

clear()

Map의 모든 객체 삭제

containsKey(key), containsValue(value)

지정 객체의 키나 값과 일치하는 Map의 키나 값이 있는지 확인

entrySet()

Map에 저장된 키-값의 쌍을 Map.Entry 타입의 객체로 저장한 Set으로 반환

get(key)

지정 객체의 키에 대응하는 값 객체를 찾아서 반환

put(key, value)

Map에 값 객체를 키 객체에 연결하여 저장

putAll(Map)

지정된 Map의 모든 키-값 쌍을 추가

remove(key)

지정한 키 객체와 일치하는 키-값 객체를 삭제

size()

Map에 저장된 키-값 쌍의 개수를 반환

values()

Map에 저장된 모든 값 객체를 반환

 

용어

key : 중복이 없는 값

value : 중복이 허용되는 값

entry : key - value 한 쌍을 의미

'Java > Notion' 카테고리의 다른 글

List - LinkedList  (0) 2023.04.30
List - ArrayList  (0) 2023.04.30
컬렉션 프레임워크 - Set  (0) 2023.04.30
컬렉션 프레임워크 - List  (0) 2023.04.30
컬렉션 프레임워크  (0) 2023.04.30

+ Recent posts