매일 조금씩

[Java] Collection 본문

알고리즘/** 코딩 유의사항 **

[Java] Collection

mezo 2023. 1. 18. 14:30
728x90
반응형

 

[ String ]

Java 에서는 split(“.”)을 쓰면 에러남
Why?   

. 은 앞에 \\을 붙여줘야하기때문..

따라서, split("\\.") 가 되어야함

 

1) String -> char[]

String str = "abc";
char [] array = str.toCharArray();

 

 

 

[ Integer ]

1) Integer.parseInt() 와 Integer.intValue()

Integer.parseInt() Integer.intValue()
‘내용(문자열)’ 을 ‘내용(int)’로 바꿔주는것뿐. 
Wrapper 인 Integer를 생성하지않음. 
문자열 -> int 변환일때 사용.
Wrapper타입인 Integer타입의 변수를 래퍼를 까면서 int로 변환할때 사용함.
Integer -> int 변환일때 사용

(ex)
List<Integer> -> int[] 변환시엔,
1) ArrayList -> array
2) Integer -> int 
두가지 변환이 필요하기때문에
Stream을 사용하면 다음과 같다.

객체명.stream().mapToInt(i -> i).toArray();


혹은,

객체명.stream().mapToInt(Integer::intValue).toArray();

 

int[] -> List<Integer> 변환시엔,

import java.util.stream.*;

Arrays.stream(배열명).boxed().collect(Colletors.toList());

 

[ Array ]

 

...

 

[ ArrayList ]

1) Array -> List

List<String> list1 = Arrays.asList("a","b","c");

List<String> list2 = Arrays.asList(new String[] {"a","b","c"});

int[] intArray = {1,2,3,4,5};

List intList = Arrays.asList(list);       // List<Integer> list로 받을수 없음

list.add(6);

Arrays.asList의 return 값이  java.util.Arrays.ArrayList ( != java.util.ArrayList ) 로 immutable 이다.

java.util.Arrays.ArrayList는 Array클래스 안의 정적 클래스이다. set, get, contains메서드는 가지지만 사이즈는 바꿀수 없다.

 

그래서 Array.asList(_array_) 쓰지말고 아래와 같이 쓰자.

ArrayList<String> arrayList = new ArrayList<String>(Arrays.asList(arr));

 

2) List -> Array

List<String> arrayList = Arrays.asList("a","b","c");
String[] array = arrayList.toArray(new String[arrayList.size()]);

 

3) ArrayList 정렬

// ArrayList 준비
ArrayList<String> list = new ArrayList<>(Arrays.asList("C", "A", "B", "a"));
System.out.println("원본 : " + list); // [C, A, B, a]

// 오름차순으로 정렬
Collections.sort(list);
System.out.println("오름차순 : " + list); // [A, B, C, a]

// 내림차순으로 정렬
Collections.sort(list, Collections.reverseOrder());
System.out.println("내림차순 : " + list); // [a, C, B, A]

// 대소문자 구분없이 오름차순
Collections.sort(list, String.CASE_INSENSITIVE_ORDER);
System.out.println("대소문자 구분없이 오름차순 : " + list); // [a, A, B, C]

// 대소문자 구분없이 내림차순
Collections.sort(list, Collections.reverseOrder(String.CASE_INSENSITIVE_ORDER));
System.out.println("대소문자 구분없이 내림차순 : " + list); // [C, B, a, A]

 

[ HashMap ]

1) 특징

  • 요소의 저장 순서를 유지하지 않음
  • key : 중복 허용 X
  • value : 중복 허용
Map<String,Integer> map = new HashMap<>();
map.put("key", 1);

 

2) 메서드 종류

(1) get()

Map에서 key로 value 가져오기

map.get("key");

(2) containsKey()

Map에 해당 키가 있는지 조사하여 결과값 리턴

map.containsKey("key");

(3) remove()

Map에서 key 값에 해당되는 아이템을 삭제한 후 그 value를 리턴

map.remove("key");

(4) size()

Map의 갯수를 리턴

map.size();

(5) getOrDefault( , )

Map에 해당 key 값이 있으면 그 value를, 없으면 지정한 값을 리턴

map.getOrDefault("key", 0);  // 값이 없으면 0을 리턴

(6) putIfAbsent( , )

key 값이 없다면 입력 된 key와 value 를 입력, 해당 key가 존재하면 입력 되어 있는 값 반환

 

 

3) 반복문에 사용하기 

java.util.*;
java.util.Map.Entry;


...

    HashMap<String, Integer> map= new HashMap<>();

    map.put("민지", 1);
    map.put("인화", 2);
    map.put("호용", 3);

 

(1) Entry

for(Entry<String, Integer> entry: map.entrySet()){
    String key = entry.getkey();
    Integer value= entry.getValue();
    ...
}

(2) Iterator

Iterator<HashMap<String, Integer>> iter = map.keySet().iterator();

while(iter.hasNext()){
    String key= iter.next();
    ...
}

 

4) LinkedHashMap 과 TreeMap

LinkedHashMap : 입력(put)된 순서대로 데이터가 출력됨.

TreeMap : 입력(put)된 key의 소트순으로 데이터가 출력됨.

 

(1) HashMap<K, V>

- key value를 묶어 하나의 entry로 저장함.

- value에 null 값도 사용 가능

- HashMap <k,v> 주요 메소드

void clear() 해당 맵(map)의 모든 매핑(mapping)을 제거함.
boolean containsKey(Object key) 해당 맵이 전달된 키를 포함하고 있는지를 확인함.
boolean containsValue(Object value) 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함.
V get(Object key) 해당 맵에서 전달된 키에 대응하는 값을 반환함.
만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함.
boolean isEmpty() 해당 맵이 비어있는지를 확인함.
Set<K> keySet() 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함.
V put(K key, V value) 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함.
V remove(Object key) 해당 맵에서 전달된 키에 대응하는 매핑을 제거함.
boolean remove(Object key, Object value) 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함.
V replace(K key, V value) 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함.
boolean replace(K key, V oldValue, V newValue) 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함.
int size() 해당 맵의 매핑의 총 개수를 반환함.

 

(2) TreeMap<K, V>

- key value를 한 쌍으로 하는 데이터를 이진 검색 트리의 형태로 저장.

- TreeMap<K, V> 주요 메소드

Map.Entry<K, V> ceilingEntry(K key) 해당 맵에서 전달된 키와 같거나, 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함.
K ceilingKey(K key) 해당 맵에서 전달된 키와 같거나, 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함.
만약 해당하는 키가 없으면 null을 반환함.
void clear() 해당 맵(map)의 모든 매핑(mapping)을 제거함.
boolean containsKey(Object key) 해당 맵이 전달된 키를 포함하고 있는지를 확인함.
boolean containsValue(Object value) 해당 맵이 전달된 값에 해당하는 하나 이상의 키를 포함하고 있는지를 확인함.
NavigableMap<K, V> descendingMap() 해당 맵에 포함된 모든 매핑을 역순으로 반환함.
Set<Map.Entry<K, V>> entrySet() 해당 맵에 포함된 모든 매핑을 Set 객체로 반환함.
Map.Entry<K, V> firstEntry() 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환함.
K firstKey() 해당 맵에서 현재 가장 작은(첫 번째) 키를 반환함.
Map.Entry<K, V> floorEntry(K key) 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함.
K floorKey(K key) 해당 맵에서 전달된 키와 같거나, 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함.
만약 해당하는 키가 없으면 null을 반환함.
V get(Object key) 해당 맵에서 전달된 키에 대응하는 값을 반환함.
만약 해당 맵이 전달된 키를 포함한 매핑을 포함하고 있지 않으면 null을 반환함.
SortedMap<K, V> headMap(K toKey) 해당 맵에서 전달된 키보다 작은 키로 구성된 부분만을 반환함.
Map.Entry<K, V> higherEntry(K key) 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함.
K higherKey(K key) 해당 맵에서 전달된 키보다 작은 키 중에서 가장 큰 키를 반환함.
만약 해당하는 키가 없으면 null을 반환함.
Set<K> keySet() 해당 맵에 포함되어 있는 모든 키로 만들어진 Set 객체를 반환함.
Map.Entry<K, V> lastEntry() 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환함.
K lastKey() 해당 맵에서 현재 가장 큰(마지막) 키를 반환함.
Map.Entry<K, V> lowerEntry(K key) 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키와 그에 대응하는 값의 엔트리를 반환함. 만약 해당하는 키가 없으면 null을 반환함.
K lowerKey(K key) 해당 맵에서 전달된 키보다 큰 키 중에서 가장 작은 키를 반환함.
만약 해당하는 키가 없으면 null을 반환함.
Map.Entry<K, V> pollFirstEntry() 해당 맵에서 현재 가장 작은(첫 번째) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함.
Map.Entry<K, V> pollLastEntry() 해당 맵에서 현재 가장 큰(마지막) 키와 그에 대응하는 값의 엔트리를 반환하고, 해당 엔트리를 맵에서 제거함.
V put(K key, V value) 해당 맵에 전달된 키에 대응하는 값으로 특정 값을 매핑함.
V remove(Object key) 해당 맵에서 전달된 키에 대응하는 매핑을 제거함.
boolean remove(K key, V value) 해당 맵에서 특정 값에 대응하는 특정 키의 매핑을 제거함.
V replace(K key, V value) 해당 맵에서 전달된 키에 대응하는 값을 특정 값으로 대체함.
boolean replace(K key, V oldValue, V newValue) 해당 맵에서 특정 값에 대응하는 전달된 키의 값을 새로운 값으로 대체함.
int size() 해당 맵의 매핑의 총 개수를 반환함.
SortedMap<K, V> subMap(K fromKey, K toKey) 해당 맵에서 fromKey부터 toKey까지로 구성된 부분만을 반환함.
이때 fromKey는 포함되나, toKey는 포함되지 않음.
SortedMap<K, V> tailMap(K fromKey) 해당 맵에서 fromKey와 같거나, fromKey보다 큰 키로 구성된 부분만을 반환함.

 

[ HashSet ]

1) 특징

  • Set 인터페이스에서 지원하는 구현클래스.
  • 순서대로 입력되지않고, 일정하게 유지되지 않음.
  • null 요소도 허용.
  • 중복을 허용하지 않음.

 

2) 메서드 종류

boolean contains(V value) : 해당 value가 hashSet에 있는지를 확인.

 

 

 

3) 반복문에 사용하기

java.util.*;

...

    HashSet<Integer> set = new HashSet<>();

    set.add(1);
    set.add(2);
    set.add(3);

 

(1) Iterator

Iterator<Integer> iter = set.iterator();

while(iter.hasNext()){
    Integer value = iter.next();
    ...
}

 

 

 

[ PriorityQueue ]

1) 특징

  • 높은 우선순위의 요소를 먼저 꺼내서 처리하는 구조.
    우선순위 큐에 들어가는 원소는 비교가 가능한 기준이 있어야함.
  • 내부 요소는 힙으로 구성되어 이진트리 구조.
  • 내부구조가 힙으로 구성되어 있기에 시간 복잡도는 O(NLogN).
  • 우선순위를 중요시해야 하는 상황에서 주로 쓰인다.

 

2) 메서드 종류

add

poll

peek

remove

element

clear

// 첫번째 값을 반환하고 제거 비어있다면 null
priorityQueueLowest.poll();

// 첫번째 값 제거 비어있다면 예외 발생
priorityQueueLowest.remove(); 

// 첫번째 값을 반환만 하고 제거 하지는 않는다.
// 큐가 비어있다면 null을 반환
priorityQueueLowest.peek();

// 첫번째 값을 반환만 하고 제거 하지는 않는다.
// 큐가 비어있다면 예외 발생
priorityQueueLowest.element();

// 초기화
priorityQueueLowest.clear();

 

3) 선언

import java.util.PriorityQueue;
import java.util.Collections;

//낮은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueLowest = new PriorityQueue<>();

//높은 숫자가 우선 순위인 int 형 우선순위 큐 선언
PriorityQueue<Integer> priorityQueueHighest = new PriorityQueue<>(Collections.reverseOrder());

 

728x90
반응형