가자공부하러!

Java_8_Collection Methods 본문

공부/Java

Java_8_Collection Methods

오피스엑소더스 2019. 5. 21. 19:33

Oracle - doc - Collections

1. L i s t

2. M a p

3. S e t


1. List        -        Oracle - doc - List

1. 주요 활용 방법

  > 선언 및 초기화

1
2
3
4
5
6
7
8
9
10
11
12
ListExam() {
    //List 초기화 방법 1. Arrays.asList == 배열을 List로 바꿔주는 메소드
    List<Integer> lst = new ArrayList<>(
            Arrays.asList(1,2,3,4));
    
    //List 초기화 방법 2. add 메소드 활용
    List<Integer> lst2 = new ArrayList<>();
    lst2.add(3);
    lst2.add(2);
    lst2.add(1);
    lst2.add(255);
}
cs

  > 저장된 데이터 꺼내기

1
2
3
4
5
6
7
8
9
10
11
//List 데이터 꺼내기 방법 1. forEach 활용
for(int i : lst)
    System.out.print(i + " ");
System.out.println();
 
//List 데이터 꺼내기 방법 2. Iterator 활용
Iterator itr = lst2.iterator();
while(itr.hasNext()) {
    System.out.print(itr.next()+ " ");
}        
System.out.println();
cs

- 수행 결과 : 1 2 3 4

3 2 55 3

  > List에 저장된 요소 정렬

1
2
3
4
5
6
7
8
9
10
11
12
13
void sortList() {
    //오름차순 정렬 Collections의 static 메소드 sort 활용
    Collections.sort(lst2);
    for(int i : lst2)
        System.out.print(i + " ");
    
    System.out.println();
 
    //내림차순 정렬 Collections의 static 메소드 reverse 활용
    Collections.reverse(lst2);
    for(int i : lst2)
        System.out.print(i + " ");
}
cs

- 수행결과 : 1 2 3 55

     55 3 2 1



2. 메소드

  > boolean    add(E e)

- e를 list에 추가


  > void    add(int index, E element)

- list의 index번 째 위치에 element를 삽입한다.

- ex_ { 1, 2, 3 }에 add(1, 10) 하면? > { 1, 10, 2, 3 }


  > boolean    remove(Object o)

     E             remove(int index)

- List의 왼쪽에서 가장 가까운 o를 찾아내서 삭제

- index에 있는 밸류 삭제


  > boolean        removeAll(Collection<?> c)

- List에 저장된 모든 값 중 컬렉션 c에 저장된 모든 value와 일치하는 value 삭제


  > void         clear()

- List에 저장된 모든 값 삭제


  > <T> T[]    toArray(T[] a)

     Object[]    toArray()

- list의 모든 값을 <T> 타입의 array로 리턴

- T에 int, double 요런거 쓰면 안되고 Integer, Double 요렇게 쓰셔야 해요

- 아니면 Object로 받으실 수도 있는데 안쓰시는게 좋을 듯


  > int    indexOf(Object o)

     int    lastIndexOf(Object o)

- o와 일치하는 value가 저장된 index를 반환함

- indexOf는 왼쪽부터 서치, lastIndexOf는 오른쪽부터 서치

- o가 없는 경우 -1을 반환


  > int    size()

- List에 저장된 value의 개수를 int타입으로 반환


  > E    set(int index, E element)

- List에 저장된 index번 째 value를 element로 변경


  > E    get(int index)

- List에 저장 된 index번 째 value를 반환


  > default void    sort(Comparator<? super E> c)

- Collections.sort()로 정렬하기 어려울 때 사용

- Comparator를 구현해서 정렬 기준을 결정하고 정렬

ㄴ implements Comparable<T>

ㄴ @Override Comparator() 작성

ㄴ Collections.sort()


  > boolean    addAll(int index, Collection<? extends E> c)

     boolean    addAll(Collection<? extends E> c)

- 컬렉션 c의 값들을 List의 index에 삽입하거나 맨 뒤에 추가


  > boolean        equals(Object o)

     boolean        contains(Object o)

     boolean        containsAll(Collection<?> c)

- List가 o와 같은지, o를 포함하고 있는지 true/false 리턴


  > default void   replaceAll(UnaryOperator<E> operator)

- UnaryOperator를 implement한 class를 작성해서 operator 사용 사용 예 ( w3resource.com )

- 사용 예 2 : ListExam.java 중 removeAllWithOperator 메소드


  > Iterator<E>    iterator()

- 타입E를 갖는 List의 iterator를 반환한다.

- Iterator 객체를 생성해서 사용해야 한다.


  > ListIterator<E>    listIterator(int index)

- List에서 제공하는 인터페이스로, 타입E를 갖는 ListIterator를 반환한다. 

- List에 포함 된 모든 객체를 양방향으로 탐색하면서 객체를 꺼낼 수 있다.

ㄴ hasNext()와 next() 뿐 만 아니라 hasPrevious()와 previous()도 있다.

ㄴ 일반적으로 next를 사용하기 전에는 previous가 작동하지 않는다.

ㄴ ListIterator를 생성할 때 index값을 인수로 전달하면 previous 부터 작동 가능.

- 이 메소드를 활용해 만들어진 반복자(Iterator)는 index번 째 자료부터 사용한다.


  > List<E>    subList(int fromIndex, int toIndex)

- fromIndex 부터 toIndex 까지 값을 List 형태로 반환


  > int            hashCode()

- hashCode()메소드는 Object class에 포함되어 있는 메소드.

- 각 객체의 값에 따른 주소와 관련있는 고유번호를 리턴한다.


  > boolean    isempty()

- 메소드를 호출한 List 변수가 어떠한 요소도 가지고 있지 않다면 true 반환


  > boolean retainAll(Collection<?> c)   

- Collection c가 갖고있는 값과 같은 값이 있으면 유지하고, 다른 값이 있으면 삭제한다.


  > default SpIterator<E>    spIterator()

- SpIterator는 분할할 수 있는 반복자이다. 뭐래 뭐야 이건...무서워...

ㄴ Iterator 보다 병렬 작업에 특화된 인터페이스

- 병렬로 처리하고자 할 때의 세부사항을 설정하기 쉽다.


3. 메소드( docs.oracle.com )

Modifier and Type

Method Name

Description

boolean

add(E e)

Appends the specified element to the end of this list (optional operation).

e를 list에 추가한다

void

add(int index, E element)

Inserts the specified element at the specified position in this list (optional operation).

element를 list의 index에 추가한다

<T> T[]

toArray(T[] a)

Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array.

해당 list의 모든 값을 <T> 타입의 array로 리턴

Object[]

toArray()

Returns an array containing all of the elements in this list in proper sequence (from first to last element).

list의 모든 값을 array로 리턴

int

indexOf(Object o)

Returns the index of the first occurrence of the specified element in this list, or -1 if this list does not contain the element.

왼쪽에서 가장 가까운 o의 index를 int 타입으로 리턴

int

lastIndexOf(Object o)

Returns the index of the last occurrence of the specified element in this list, or -1 if this list does not contain the element.

오른쪽에서 가장 가까운 o의 index를 int 타입으로 리턴

int

size()

Returns the number of elements in this list.

list의 값 개수를 int 타입으로 리턴

E

set(int index, E element)

Replaces the element at the specified position in this list with the specified element (optional operation).

index번 째 값을 element로 변경

E

get(int index)

Returns the element at the specified position in this list.

index번 째 값을 리턴

default void

sort(Comparator<? super E> c)

Sorts this list according to the order induced by the specified Comparator.

기본 정렬 기준 외에 다른 정렬 기준을 적용하고자 할 때 Comparator 구현해서 정렬(ex_사용자 지정 객체)

boolean

addAll(int index, 

Collection<? extends E> c)

Inserts all of the elements in the specified collection into this list at the specified position (optional operation).

c의 모든  값을 List의 index 위치에 삽입

boolean

addAll(Collection

<? extends E> c)

Appends all of the elements in the specified collection to the end of this list, in the order that they are returned by the specified collection's iterator (optional operation).

c의 모든 값을 List의 마지막에 추가

boolean

equals(Object o)

Compares the specified object with this list for equality.

o와 현재 list가 같은지 비교

boolean

contains(Object o)

Returns true if this list contains the specified element.

현재 list가 o를 포함하고 있는지 비교

default void

replaceAll(UnaryOperator<E> 

operator)

Replaces each element of this list with the result of applying the operator to that element.

UnaryOperator를 implement한 class를 작성해서
operator 사용 사용 예 ( w3resource.com )

boolean

removeAll(Collection<?> c)

Removes from this list all of its elements that are contained in the specified collection (optional operation).

List에 저장된 모든 값 중 컬렉션 c에 저장된 모든 value와 일치하는 value 삭제

boolean

remove(Object o)

Removes the first occurrence of the specified element from this list, if it is present (optional operation).

List의 왼쪽에서 가장 가까운 o를 찾아내서 삭제

E

remove(int index)

Removes the element at the specified position in this list (optional operation).

List에 저장된 값 중 index번 째 값 삭제

void

clear()

Removes all of the elements from this list (optional operation).

List에 저장된 모든 값 삭제

Iterator<E>

iterator()

Returns an iterator over the elements in this list in proper sequence.

타입E를 갖는 List의 iterator를 반환

Iterator 객체를 생성해서 사용해야 한다.

ListIterator<E>

listIterator(int index)

Returns a list iterator over the elements in this list (in proper sequence), starting at the specified position in the list.

ListIterator의 시작 번호를 index로 설정해서 생성

ListIterator<E>

listIterator()

Returns a list iterator over the elements in this list (in proper sequence).

List에서 제공하는 인터페이스로, 타입E를 갖는 ListIterator를 반환한다. next 뿐 만 아니라 previous 가능

List<E>

subList(int fromIndex,

 int toIndex)

Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive.

fromIndex 부터 toIndex  까지 값을 List 형태로 반환

int

hashCode()

Returns the hash code value for this list.

각 객체의 값에 따른 주소와 관련있는 고유번호를 리턴

default Spliterator<E>

spliterator()

Creates a Spliterator over the elements in this list.

분할할 수 있는 반복자 생성.

Iterator 보다 병렬 작업에 특화된 인터페이스

boolean

retainAll(Collection<?> c)

Retains only the elements in this list that are contained in the specified collection (optional operation).

Collection c가 갖고 있는 값과 

같은 값이 있으면 유지하고, 다른 값이 있으면 삭제한다.

boolean

containsAll(Collection<?> c)

Returns true if this list contains all of the elements of the specified collection.

List가 o와 같은지, o를 포함하고 있는지 true/false 리턴

boolean

isEmpty()

Returns true if this list contains no elements.

메소드를 호출한 List가 어떠한 요소도 가지고 있지 않다면 true 반환







2. Map        -        Oraclee - doc - Map


2-1. 주요 활용 방법

2-2. Methods in List       -       실습코드 링크

2-3. Methods ( docs.oracle.com )


* Mapping?

  > key와 value 쌍을 짝지어 저장하는 데이터 구조


** Map?

  > 키(key)와 값(value)이 한 쌍을 이룬다.

  > Map은 쌍으로 이루어진 데이터의 집합이다.

  > 순서는 유지되지 않는다.

  > 키(key)는 중복을 허용하지 않는다.

- 현재 저장된 키값과 중복되는 키-값 쌍을 입력(put)한 경우?

ㄴ 기존의 존재하는 해당 키의 값이 새로운 값으로 변경된다.

  > 값(value)은 중복을 허용한다.


  > HashMap

- key와 value에 null값 허용

  > HashTable

- HashMap보다 느리지만 동기화를 지원

- key와 value에 null값 허용되지 않음

  > TreeMap

- 이진검색트리의 형태

- 정렬된 순서로 쌍을 저장하므로 빠른 검색 가능

- 저장 시 정렬(오름차순)을 하기 때문에 저장시간이 다소 오래 소요

  > LinkedHashMap

- HashMap을 상속받았기 때문에 HashMap과 유사

- 순서가 저장됨


1. 주요 활용 방법

  > Map 선언 및 초기화 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MapExam {
        //    Map 선언 및 초기화 방법 1 : class에서 선언과 동시에 초기화 
        public static final Map<Integer, String> lnkMap;
        static {
            lnkMap = new LinkedHashMap<Integer, String>();
            lnkMap.put(3"ㄹㄹ");
            lnkMap.put(4"ㄹㄹ");
            lnkMap.put(5"ㄹㄹ");
        }        
    
    public MapExam() {
        //    Map 선언 및 초기화 방법 2 : put 메서드 사용
        Map<StringString> hshMap = new HashMap<StringString>();
        hshMap.put("001","ㅎㅎ");
        hshMap.put("002","ㅎㅎ");
        hshMap.put("001","gg");
    }    
}
cs


  > entrySet 메소드 활용

- Map에 저장된 Mapping을 Set의 형태( key=valuse )로 반환

1
2
3
4
5
6
7
8
void useEntrySetMethod() {
    //toString 메소드를 통한 해쉬맵 요소 출력
    System.out.println("hshMap.toString() :\t" + hshMap.toString());
    //entrySet 메소드 활용
    Set<Entry<StringString>> st1 = hshMap.entrySet();
    System.out.println("Set<Entry<String, String>> st1 = hshMap.entrySet();");
    System.out.println("st1.toString() :\t" + st1.toString());
}
cs

hshMap.toString() : {001=gg, 002=ㅎㅎ}

Set<Entry<String, String>> st1 = hshMap.entrySet();

st1.toString() :         [001=gg, 002=ㅎㅎ]


  >  key, value 활용 방법

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void howToUseKeyAndValue() {
    System.out.println("hshMap.toString() :\t" + hshMap.toString());
    
    //    get(K) : K(key)에 해당하는 value를 얻기 위한 메소드
    System.out.println("hshMap.get(\"001\") :\t" + hshMap.get("001"));
    
    //    containsKey(K) : 현재 맵에 해당 key가 있는지 조사
    System.out.println("hshMap.containsKey(\"001\") :\t" + hshMap.containsKey("001"));
    
    //    remove(K) : 현재 맵에서 K에 해당하는 쌍을 제거
    hshMap.remove("001");
    System.out.println("hshMap.remove(\"001\");");
    System.out.println("hshMap.toString() :\t" + hshMap.toString());
}
cs

hshMap.toString() :         {001=gg, 002=ㅎㅎ}

hshMap.get("001") :         gg

hshMap.containsKey("001") : true

hshMap.remove("001");

hshMap.toString() :         {002=ㅎㅎ}


2. 메소드

  > void    clear()

- Map에 저장된 모든 Mapping을 삭제


  > default V    compute           (K key, BiFunction<? super K, ? super V, ? extends V > remappingFunction)

- 현재 Map의 key 중에 매개변수 key가 있으면?

ㄴ key에 해당하는 value에 BiFunction에 따라 연산한 결과값을 value에 저장하고 해당 값을 반환

- key가 없으면?

ㄴ 매개변수 key를 새로 만들고 key에 해당하는 value에 BiFunction 연산 결과값을 저장하고 해당 값을 반환

ㄴ put(K key, V value)와 유사


  > default V    computeIfPresent(K key, BiFunction<? super K., ? super V, ? extends V> remappingFunction)

- compute와 동일한 기능

- 차이점 : key가 없으면 동작하지 않고 null을 반환


  > default V    computeIfAbsent(K key, Fucntion<? super K,                 ? extends V> mappingFucntion)

- compute와 동일한 기능

ㄴ key가 없으면 put

- 차이점 : 

ㄴ key와 쌍을 이루는 value가 이미 있다면?

ㄴ 해당 value를 반환하고 아무런 기능도 하지 않음.

ㄴ key와 쌍을 이루는 value가 null이라면?

ㄴ value에 BiFunction에 따라 값을 저장하고, 저장한 값을 반환


  > boolean    containsKey(Object key)

- 저장된 Mapping의 key들 중 매개변수로 받은 key가 존재하는지 판단하여 true/false 리턴


  > boolean    containsValue(Object value)

- 저장된 Mapping의 value들 중 매개변수로 받은 value와 짝인 key값이 한개 이상이면 true 리턴


  > boolean equals(Object o)

- 현재 Map과 o가 동일한지 판단


  > default void    forEach(BiConsumer<? super K, ? super V> action)

- BiConsumer란?

ㄴ 서로 다른 타입의 2개의 인자를 받아 소모한다.

ㄴ Map 에서는 보통 <key, value> 활용

- key, value를 BiConsumer 인자로 주고, action을 처리한다.

- ex) hshMap.forEach( (k, v) -> str += k.toString() );


  > V    get(Object key)

- key값에 따른 value를 리턴.

- 현재 Map에 key가 없다면 null 리턴


  > default V    getOrDefault(Object key, V defaultValue)

- key값에 따른 value를 리턴

- 현재 Map에 해당 key가 없다면, defaultValue 리턴


  > int    hashCode()

- 각 객체의 값에 따른 주소와 관련있는 고유번호(HashCode)를 리턴


  > boolean    isEmpty()

- 현재 Map에 어떠한 key-value 쌍도 저장되어있지 않으면 true 반환


  > Set<K>    keySet()

- 현재 Map이 가지고 있는 key들을 Set 형태로 리턴


  > default V    merge(K key, V value, BiFunction<? super V, ? super V, ? extends V> remappingFunction)

- value 값 설정 또는 교체

- key에 해당하는 value가 null인 경우

ㄴ 매개변수로 받은 value값이 해당 key의 value로 저장됨

- key에 해당하는 value가 이미 저장되어 있는 경우

ㄴ BiFunction에 따름

ㄴ BiFunction부분이 ( existV, initV ) -> existV + initV  라면?

ㄴ 해당 key의 value는 ( 이미 저장되어있던 value + 매개변수로 받은 value ) 연산 결과값이 저장됨.

ㄴ ( existV, initV ) -> initV + existV 요렇게 existV와 initV 순서를 바꾸면? 연산 순서 바뀜

- K, V의 타입은 Map을 생성했을 때 정해진 타입을 따른다.

- merge 메소드를 뜯어봐야...

ㄴ java.util.function.BiFunction<T, U, R>

ㄴ Represents a function that accepts two arguments and produces a result.

    This is the two-arity specialization of Function. 

ㄴ 2개의 인수만 입력하면 된다는 이야기

ㄴ This is a functional interfacewhose functional method is apply(Object, Object).

ㄴ 함수 메소드가 apply (Object, Object) 인 함수 인터페이스이다.

ㄴ Type Parameters

<T> the type of the first argument to the function

<U> the type of the second argument to the function

<R> the type of the result of the function


> V    put( K key, V value )

- 매개변수로 받은 key-value 쌍을 현재 Map에 저장(추가)


> void    putAll( Map<? extends K, ? extends V> m)

- 매개변수로 받은 Map m의 모든 Mapping을 현재 Map에 저장

- 현재 Map에 Map m의 key와 중복되는 key가 있다면 Map m의 value로 교체됨


> default V    putIfAbsent( K key, V value )

- 현재 Map이 갖고있는 key의 value가 null이거나 없다면, 매개면수 value를 저장한다.

- 현재 Map의 key가 value를 갖고있다면, 해당 밸류를 반환한다.


> V            remove( Object o )

- 매개변수로 받은 key를 현재 Map이 갖고있다면 해당 Mapping을 제거(key-value 쌍) 

- 제거에 성공하면 제거된 Mapping의 value를 리턴


> default boolean    remove( Onject Key, Object Value )

- 매개변수로 받은 key-value와 동일한 Mapping을 제거.

- key, value 둘 중 하나라도 다르면 false 반환

- 제거가 완료되면 true, 실패하면 false 반환


> default V    replace( K key, V value )

- 매개변수 key와 일치하는 key를 가진 Mapping이 있는 경우

해당 Mapping의 value를 매개변수로 받은 value로 변경

ㄴ 기존 value값을 리턴

- 매개변수 key와 일치하는 key를 가진 Mapping이 없는 경우

ㄴ null 리턴


> default boolean    replace( K key, V oldValue, V newValue )

- 매개변수 key와 현재 Map의 key가 같으면서, value값까지 같은 경우

해당 Mapping의 value를 매개변수로 받은 newValue로 변경

ㄴ true 리턴

- 둘 중 하나라도 다른 경우

ㄴ false 리턴


  > default void    replaceAll( Bifunction<? super K, ? super V, ? extends V> function )

- 주어진 function에 맞게 현재 Map의 value값을 변경

- 모든 entries를 처리했거나, function에서 예외가 발생할 때 까지 반복


> Collection<V>    values()

- 현재 Map이 가지고 있는 모든 value를 Collection 인터페이스로 반환


3. 메소드( docs.oracle.com )


Modifier and Type Method Description
void clear() Removes all of the mappings from this map (optional operation).
Map에 저장된 모든 Mapping을 삭제
default V compute(K key, BiFunction<? super K,? super V,
? extends V> remappingFunction)
Attempts to compute a mapping for the specified key and its current mapped value (or null if there is no current mapping).
default V computeIfAbsent(K key, Function<? super K,? extendsV> mappingFunction) If the specified key is not already associated with a value (or is mapped to null), attempts to compute its value using the given mapping function and enters it into this map unless null.
default V computeIfPresent(K key, BiFunction<? super K,? super V,? extendsV> remappingFunction) If the value for the specified key is present and non-null, attempts to compute a new mapping given the key and its current mapped value.
boolean containsKey(Object key) Returns true if this map contains a mapping for the specified key.
저장된 Mapping의 key들 중 매개변수로 받은 key가 존재하는지 판단하여 true/false 리턴
boolean containsValue(Object value) Returns true if this map maps one or more keys to the specified value.
저장된 Mapping의 value들 중 매개변수로 받은 value와 짝인 key값이 한개 이상이면 true 리턴
Set<Map.Entry<K,V>> entrySet() Returns a Set view of the mappings contained in this map.
Map에 저장된 Mapping을 Set의 형태( key=valuse )로 반환
boolean equals(Object o) Compares the specified object with this map for equality.

현재 Map과 o가 동일한지 판단

default void forEach(BiConsumer<? super K,? super V> action) Performs the given action for each entry in this map until all entries have been processed or the action throws an exception.
현재 Map의 모든 쌍(entry)이 처리될 때 까지 반복하며 action을 수행
V get(Object key) Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key.
key값에 따른 value를 리턴. 현재 Map에 key가 없다면 null 리턴
default V getOrDefault(Object key, V defaultValue) Returns the value to which the specified key is mapped, or defaultValue if this map contains no mapping for the key.

key값에 따른 value를 리턴

현재 Map에 해당 key가 없다면, defaultValue 리턴

int hashCode() Returns the hash code value for this map.
각 객체의 값에 따른 주소와 관련있는 고유번호를 리턴
boolean isEmpty() Returns true if this map contains no key-value mappings.
현재 Map에 어떠한 key-value 쌍도 저장되어있지 않으면 true 반환
Set<K> keySet() Returns a Set view of the keys contained in this map.
현재 Map이 가지고 있는 key들을 Set 형태로 리턴
default V merge(K key, V value, BiFunction<? super V,? super V,? extendsV> remappingFunction) If the specified key is not already associated with a value or is associated with null, associates it with the given non-null value.

만약 매개변수로 받은 key값에 해당하는 현재 Map에 저장되어 있는 key의 value가 없거나 null이라면 매개변수로 받은 null값이 아닌 value를 해당 key에 매핑

V put(K key, V value) Associates the specified value with the specified key in this map (optional operation).
매개변수로 받은 key-value 쌍을
현재 Map에 저장(추가)
void putAll(Map<? extends K,? extends V> m) Copies all of the mappings from the specified map to this map (optional operation).

매개변수로 받은 Map m의 모든 Mapping을 현재 Map에 저장

현재 Map에 Map m의 key와 중복되는 key가 있다면 Map m의 value로 교체됨

default V putIfAbsent(K key, V value) If the specified key is not already associated with a value (or is mapped to null) associates it with the given value and returns null, else returns the current value.

현재 Map이 갖고있는 key의 value가 null이거나 없다면, 매개면수 value를 저장하고, 현재 Map의 key가 value를 갖고있다면 해당 밸류를 반환한다.

V remove(Object key) Removes the mapping for a key from this map if it is present (optional operation).

매개변수로 받은 key를 현재 Map이 갖고있다면 해당 Mapping을 제거(key-value 쌍)하고 

제거된 Mapping의 value를 리턴

default boolean remove(Object key, Object value) Removes the entry for the specified key only if it is currently mapped to the specified value.

매개변수로 받은 key-value와 동일한 Mapping을 제거.

key, value 둘 중 하나라도 다르면 false

제거가 완료되면 true, 실패하면 false 반환

default V replace(K key, V value) Replaces the entry for the specified key only if it is currently mapped to some value.

매개변수 key와 일치하는 key를 가진 Mapping이 있는 경우 해당 Mapping의 value를 매개변수로 받은 value로 변경하고 기존 value값을 리턴

매개변수 key와 일치하는 key를 가진 Mapping이 없는 경우 null 리턴

default boolean replace(K key, V oldValue, V newValue) Replaces the entry for the specified key only if currently mapped to the specified value.

 매개변수 key, oldValue 쌍과 완전히 같은 Mapping이 있는 경우 oldValue를 newValue로 교체하고 true 반환, key-oldValue 하나라도 같은게 없으면 false 반환

default void replaceAll(BiFunction<? super K,? super V,? extends V> function) Replaces each entry's value with the result of invoking the given function on that entry until all entries have been processed or the function throws an exception.

BiFunction 조건에 따라 현재 Map의 모든 Mapping을 수정

예)  hshMap.replaceAll((k,v)->v+v);

      모든 value의 값이 value+value로 바뀜

예외가 발생하면 중단

int size() Returns the number of key-value mappings in this map.

현재 Map의 Mapping 갯수를 반환

Collection<V> values() Returns a Collection view of the values contained in this map.

현재 맵이 가진 모든 value를 Collection 인터페이스 타입으로 반환




3. Set         -        Oracle - doc - Set


3-1. 주요 활용 방법

3-2. Methods in List       -       실습코드 링크

3-3. Methods ( docs.oracle.com )


* Set이 뭐에요?

  > Collection을 상속받은 인터페이스

  > 요소의 저장 순서 없음( LinkedHashSet 제외 )

  > 요소의 중복 허용 안함


** Set의 종류는요?

  > HashSet<E>

- 데이터를 순서 없이 hash table에 저장. Set 중 가장 성능이 좋다.


  > TreeSet<E>

- 데이터가 값에 따라 정렬되어 저장


  > LinkedHashSet<E>

- 연결된 목록 타입으로 구현된 hash table에 데이터를 저장

- 순서가 있다



1. 주요 활용 방법

  > 선언과 초기화

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class SetExam {
    //Set 선언과 초기화
    Set<Integer> intSet;
    Set<Integer> intSet2;
    Set<String> strSet;
    public SetExam(){
        this.intSet = new HashSet<Integer>();
        this.intSet2 = new HashSet<Integer>();        
        
        //add 메소드를 사용해서 Set에 값 저장
        intSet.add(1);
        intSet.add(2);
        intSet.add(3);
        
        //for문을 사용해서 배열의 값을 Set에 저장
        int[] intArr1 = {4,5,6,7};
        
        for(int i : intArr1) {
            intSet2.add(i);
        }
        
        //배열을 Set으로 변환
        String[] strArr1 = {"A","B","C","D"};
        this.strSet = new HashSet<String>(Arrays.asList(strArr1)); 
    }
}
cs


  > Set - Array 변환

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void setToArray() {
    //toString 메소드 사용
    System.out.println("intSet.toString\t" + intSet.toString());
    
    //toArray 메소드 사용
    Integer[] intArr2 = intSet.toArray(new Integer[intSet.size()]);
    System.out.println("intSet.toArray\t" + Arrays.toString(intArr2));
    String[] strArr2 = strSet.toArray(new String[strSet.size()]);
    System.out.println("strSet.toArray\t" + Arrays.toString(strArr2));
    
    //stream 사용
    Integer[] intArr3 = intSet.stream().toArray(Integer[] :: new);
    System.out.println(".stream().toArray\t"+Arrays.toString(intArr3));
    
    //Array to Set
    intSet = new HashSet<Integer>(Arrays.asList(intArr3));
}
cs


  > Set에 저장된 데이터 활용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void handleElementsInSet() {
    System.out.println("intSet.toString() : \t" + intSet.toString());
    //Iterator 활용
    Iterator<Integer> iter = intSet.iterator();
    while(iter.hasNext()) {
        System.out.print(iter.next() + " ");
    }
    
    //contains, remove 활용
    if( intSet.contains(1) ) {
        System.out.println("\nintSet.remove(1) : \t"+intSet.remove(1));
    }
    
    System.out.println("intSet.toString() : \t" + intSet.toString());
}
cs






2. 메소드

  > boolean    add( E e )

- e를 현재 Set에 추가하고 true를 반환한다. 저장하려는 e 값이 이미 Set에 존재하는 경우 false를 반환하고 동작하지 않는다.


  > boolean    addAll( Collection<? extends E> c )

- 현재 Set에 c의 요소들을 Set에 추가한다

- 저장된 요소들과 다른 요소가 하나라도 있다면 해당 값만 저장되고 true 반환

- c의 모든 요소가 이미 Set에 존재한다면 false를 반환


  > void    clear()

- Set에 저장된 모든 요소 삭제


  > boolean    contains( Object o )

- 현재 Set에 o가 저장되어 있다면 true 반환


  > boolean    containsAll( Collection<?> c )

- 현재 Set에 c의 모든 요소가 저장되어 있다면 true 반환


  > boolean    equals( Object o )

- 현재 Set과 o가 같다면 true 반환


  > int    hashCode()

- hashCode()메소드는 Object class에 포함되어 있는 메소드.

- 각 객체의 값에 따른 주소와 관련있는 고유번호를 리턴한다.


  > boolean    isEmpty()

- 현재 Set에 저장되어 있는 요소가 없다면 true 반환


  > Iterator<E>    iterator()

- 현재 Set의 iterator 반환


  > boolean    remove( Object o )

- 현재 Set에 o가 저장되어있다면 삭제하고 true 반환. o가 저장되어있지 않다면 false 반환


  > boolean    removeAll( Collection<?> c )

- 현재 Set에 c의 모든 요소 중 하나라도 저장되어 있다면 Set에서 해당 값을 삭제하고 true 반환


  > boolean    retainAll( Collection<?> c )

- 현재 Set에 c의 모든 요소 중 하나라도 저장되어 있다면 Set에서 해당 값을 제외한 모든 값을 삭제하고 true 반환

- 교집합이 없다면 현재 Set의 모든 요소를 삭제하고 true 반환


  > int    size()

- 현재 Set에 저장된 요소의 개수를 반환


  > default Spliterator<E>    spliterator()

- 현재 Set의 spliterator 반환


  > Object[]    toArray()

- 현재 Set을 배열로 변환해서 반환


  > <T> T[]    toArray( T[] a )

- 현재 Set의 모든 요소를 지정된 타입의 배열로 변환해서 반환


3. 메소드( docs.oracle.com )

Modifier and Type

Method

Description

boolean

add(E e)

Adds the specified element to this set if it is not already present (optional operation).

e를 현재 Set에 추가하고 true를 반환한다. 저장하려는 e 값이 이미 Set에 존재하는 경우 false를 반환하고 동작하지 않는다.

boolean

addAll(Collection
<? extends E> c)

Adds all of the elements in the specified collection to this set if they're not already present (optional operation).

 현재 Set에 c의 요소들을 Set에 추가한다

 저장된 요소들과 다른 요소가 하나라도 있다면 해당 값만 저장되고 true 반환

 c의 모든 요소가 이미 Set에 존재한다면 false를 반환

void

clear()

Removes all of the elements from this set (optional operation).

Set에 저장된 모든 요소 삭제

boolean

contains(Object o)

Returns true if this set contains the specified element.

현재 Set에 o가 저장되어 있다면 true 반환

boolean

containsAll(Collection<?> c)

Returns true if this set contains all of the elements of the specified collection.

현재 Set에 c의 모든 요소가 저장되어 있다면 true 반환

boolean

equals(Object o)

Compares the specified object with this set for equality.

현재 Set과 o가 같다면 true 반환

int

hashCode()

Returns the hash code value for this set.

각 객체의 값에 따른 주소와 관련있는 고유번호를 반환

boolean

isEmpty()

Returns true if this set contains no elements.

현재 Set에 저장되어 있는 요소가 없다면 true 반환

Iterator<E>

iterator()

Returns an iterator over the elements in this set.

현재 Set의 iterator 반환

boolean

remove(Object o)

Removes the specified element from this set if it is present (optional operation).

현재 Set에 o가 저장되어있다면 삭제하고 true 반환. o가 저장되어있지 않다면 false 반환

boolean

removeAll(Collection<?> c)

Removes from this set all of its elements that are contained in the specified collection (optional operation).

현재 Set에 c의 모든 요소 중 하나라도 저장되어 있다면 Set에서 해당 값을 삭제하고 true 반환

boolean

retainAll(Collection<?> c)

Retains only the elements in this set that are contained in the specified collection (optional operation).

현재 Set에 c의 모든 요소 중 하나라도 저장되어 있다면 Set에서 해당 값을 제외한 모든 값을 삭제하고 true 반환

교집합이 없다면 현재 Set의 모든 요소를 삭제하고 true 반환

int

size()

Returns the number of elements in this set (its cardinality).

현재 Set에 저장된 요소의 개수를 반환

default Spliterator<E>

spliterator()

Creates a Spliterator over the elements in this set.

분할할 수 있는 반복자 생성.

Iterator 보다 병렬 작업에 특화된 인터페이스

Object[]

toArray()

Returns an array containing all of the elements in this set.

현재 Set의 모든 요소를 배열로 변환해서 반환

<T> T[]

toArray(T[] a)

Returns an array containing all of the elements in this set; the runtime type of the returned array is that of the specified array

현재 Set의 모든 요소를 지정된 타입의 배열로 변환해서 반환





참고 문서 : 프로그래머스, 프로그래밍 강의, 자바 중급 ( https://programmers.co.kr/learn/courses/9 )

공부 흐름 : 메소드 확인 -> 임의 실습코드 작성 -> 결과값을 토대로 메소드 재확인