일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 27 | 28 |
29 | 30 | 31 |
- JPA
- dfs
- alter
- Properties
- CSS
- union_find
- deque
- set
- Java
- html
- date
- BFS
- 힙덤프
- 큐
- spring boot
- sql
- GC로그수집
- 스프링부트
- NIO
- javascript
- string
- math
- 스택
- priority_queue
- List
- Calendar
- map
- 리소스모니터링
- scanner
- Union-find
- Today
- Total
매일 조금씩
[Java] Collection 본문
[ 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());
'알고리즘 > ** 코딩 유의사항 **' 카테고리의 다른 글
[Java] Stream (0) | 2023.04.10 |
---|---|
[C++] 타입 변환, 확인 방법 (0) | 2021.02.09 |
C++과 Java 에서 정수다음에 getline으로 문자열을 입력받을 때 유의 사항! (0) | 2021.02.08 |