import java.util.*;
import java.io.*;
int[] arr = {5,6,3,4,1};
// 1. 오름차순
Arrays.sort(arr);
Arrays.sort(arr, Collections.reverseOrder()); // 사용 x
// -> int는 Wrapper 클래스가 아니므로 Collections함수 x
// -> Integer로 바꿔서 사용
// int[] -> Integer[]
Integer[] arrInteger = Arrays.stream(arr)
.boxed()
.toArray(Integer[]::new);
// int[] -> List<Integer>
List<Integer> list = Arrays.stream(arr)
.boxed()
.collect(Collectors.toList());
// 2. int -> Integer로 바꾸고 내림차순
Arrays.sort(integerArr, Collections.reverseOrder());
// 3. 일부만 정렬(0 ~ 2면 0 ~ 1까지만 정렬)
Arrays.sort(arr, 0, 2);
// 4. 배열 -> ArrayList (마찬가지로 Integer 배열만 가능)
List<Integer> list = Arrays.asList(integerArr);
// 배열의 특정 범위 자르기
int tmp1[] = Arrays.copyOfRange(arr, 0, 3);
Integer tmp2[] = Arrays.copyOfRange(integerArr, 0, 3);
List<String> list = new ArrayList<>();
// 삽입
list.add("aa");
list.add("cc");
list.add(1, "bb"); // {aa, bb , cc}
// 삭제
list.remove(1); // {aa, cc}
// 수정
list.set(1, "bb"); // {aa, bb}
// 값 존재 유무 확인
list.contains("cc"); // false
list.contains("bb"); // true
// 중복없이 값 넣을 때
if(!list.contains("bb")){
list.add("bb");
}
String str1 = "apple";
//길이 반환
str1.length();
//빈 문자열 체크 -> "" 이면 공백
System.out.println(str1.isEmpty());
//문자 찾기("apple")
str1.charAt(0); // 'a'
str1.indexOf('p'); // 1 -> 가장 먼저 나타나는 위치
str1.indexOf("pp"); // 1
str1.lastIndexOf('p'); // 2 ->가장 마지막 위치
//문자열 분리
String[] split = str1.split("");
//공백으로 문자열 분리
String str2 = "aaa bbb ccc";
String[] split1 = str2.split(" ");
//문자 자르기 apple -> pp (1 ~ 2)
String str3 = str1.substring(1, 3);
System.out.println(str3);
//문자열 비교
str1.equals("apple"); // true, false
//문자 사전순 비교
/**
* str1과 같다 -> 0
* str1이 사전순 앞 -> -1
* str1이 사전순 뒤 -> 양수(사전순 차이만큼)
*/
str1.compareTo("apple");
//기존 문자 바꾸기 apple -> bpple
str1 = str1.replace('a', 'b');
//문자열 바꾸기(str2가 바뀌는 것이 아님)
//모든 공백을 제거하고 싶다 " " -> ""
str2 = str2.replaceAll(" ", "");
//앞뒤 공백 제거
str2.trim();
//문자<-> 숫자
Integer.parseInt("100");
Integer.toString(100);
StringBuilder sb = new StringBuilder();
//문자열 추가
sb.append("aaa");
//특정 인덱스에 문자 삽입
sb.insert(2, "bb"); // aabba
//문자열 삭제
sb.delete(2, 3); // 2 ~ 2 삭제 -> aaba
//특정 인덱스 삭제
sb.deleteCharAt(3); // aaba -> aab
//문자열 뒤집기
sb.reverse(); // aab -> baa
//문자열 교체
sb.replace(1, 2,"cc"); //baa -> bcca
//StringBuilder -> String 변환
String str1 = sb.toString();
int[] arr = {1,3,2,6,10};
//Collection 함수 사용하려면 배열을 리스트로 바꿔야 함
List<Integer> list = Arrays.stream(arr)
.boxed()
.collect(Collectors.toList());
// Collection 오름차순 정렬
Collections.sort(list);
// Collection 내림차순 정렬
Collections.sort(list, Collections.reverseOrder());
// 정수형 List 중 최대, 최솟값
Collections.max(list);
Collections.min(list);
//List 내 원소를 이진 탐색으로 찾기
// ->{1,2,3,6,10} 으로 정렬됐다면 3의 위치인 2번째 index 반환
// -> 5는 없는 숫자이므로 3과 6사이인 4번째에 - 붙여서 -4가 반환
Collections.binarySearch(list, 3); // 2
Collections.binarySearch(list, 5); // -4
Collections.binarySearch(list, -4); // -1
Stack<Integer> stack = new Stack<>();
// 원소 추가
stack.push(1);
//요소 제거
stack.pop();
//최상단 원소 보기
stack.peek();
//스택 크기 체크
stack.size();
//스택이 비어있는지 유무 확인
stack.empty();
//스택에 존재하는지 확인
stack.contains(1);
//스택 비우기
stack.clear();
//Queue는 LinkedList
Queue<Integer> queue = new LinkedList<>();
//요소 추가
queue.add(2); // 문제 상황에서 예외
queue.offer(2); // 문제 상황에서 false
//요소 제거
queue.remove(); // 문제 상황에서 예외
queue.poll(); // 문제 상황에서 null 리턴
//큐 비우기
queue.clear();
//큐의 최전방 요소 확인
queue.element();
queue.peek();
// pair 같은 경우는 그냥 구현해서 사용
static class Node{
int y;
int x;
int dist;
Node(int y,int x,int dist){
this.y=y;
this.x=x;
this.dist=dist;
}
}
Queue<Node> queue=new LinkedList<>();
queue.add(new Node(1,2,3));
Node node= queue.poll();
//오름차순
PriorityQueue<Integer> pQ1 = new PriorityQueue<>();
//내림차순
PriorityQueue<Integer> pQ2 = new PriorityQueue<>(Collections.reverseOrder());
//삽입
pQ1.add(1); // 실패 시 예외
pQ1.offer(1); //실패 시 false
//삭제
int top = pQ1.remove(); // 최상단 삭제후 반환, 공백이면 예외
pQ1.remove(2); // 2삭제 true, false 반환
pQ1.poll(); // 삭제된 value, 공백이면 null
//최상단 원소
pQ1.element(); // 공백이면 예외
pQ1.peek(); // 공백이면 null
//사용자 정의
//a는 오름차순 ,a가 같다면 b는 내림차순
PriorityQueue<Pair> pQ3 = new PriorityQueue<>(new Comparator<Pair>(){
@Override
public int compare(Pair p1, Pair p2){
if(p1.a == p2.a){
return p2.b - p1.b;
}
return p1.a - p2.a;
}
});
pQ3.add(new Pair(1,2));
pQ3.add(new Pair(2,5));
pQ3.add(new Pair(2,3));
pQ3.add(new Pair(1,4));
pQ3.add(new Pair(3,2));
pQ3.add(new Pair(1,9));
pQ3.add(new Pair(3,7));
//삭제 후 자료형 반환은 poll
//remove는 참 거짓을 반환하므로 peek, remove 해야함
while (!pQ3.isEmpty()){
Pair pair = pQ3.poll();
System.out.println(pair.a + " " + pair.b);
}
/**
* 1 9
* 1 4
* 1 2
* 2 5
* 2 3
* 3 7
* 3 2
*/
static class Pair{
int a;
int b;
Pair(int a, int b){
this.a = a;
this.b = b;
}
}
HashSet : 중복 허용 x, 순서 x
HashSet<Integer> hashSet = new HashSet<>();
//요소 추가
hashSet.add(1);
//요소 삭제
System.out.println(hashSet.remove(1)); // 삭제 되면 true
System.out.println(hashSet.remove(2)); // 삭제 안되면 false
//특정 포함 요소 확인
hashSet.contains(1); // 있다면 true, 없다면 false
//for-each문을 활용하여 hashSet 탐색
for(Integer integer : hashSet){
System.out.println(integer);
}
TreeSet : 중복 허용 x, 순서 o
//오름차순
TreeSet<Integer> set1 = new TreeSet<>();
//내림차순
TreeSet<Integer> set2 = new TreeSet<>(Collections.reverseOrder());
//pair class 정렬
TreeSet<Pair> set3 = new TreeSet<>(new Comparator<>(){
public int compare(Pair o1, Pair o2){
// a는 오름차순 정렬, a가 같으면 b를 내림차순 정렬
if(o1.a == o2.a){
return o2.b - o1.b;
}
return o1.a - o2.a;
}
});
set3.add(new Pair(3,2));
set3.add(new Pair(1,2));
set3.add(new Pair(1,4));
set3.add(new Pair(2,3));
set3.add(new Pair(2,5));
set3.add(new Pair(2,4));
set3.add(new Pair(3,9));
/*
1 4
1 2
2 5
2 4
2 3
3 9
3 2
*/
}
static class Pair{
int a;
int b;
Pair(int a, int b){
this.a = a;
this.b = b;
}
}
<key, value>쌍, key값은 유일, 순서 x
HashMap<String, Integer> hashMap = new HashMap<>();
//요소 추가
hashMap.put("aa", 1);
hashMap.put("bb", 2);
//기존 값 교체
hashMap.put("aa", 3) // a값 1->3
//요소 삭제
hashMap.remove("aa");
//key에 해당하는 value 가져오기
System.out.println(hashMap.get("aa")); // null
System.out.println(hashMap.get("bb")); // 2
//key 포함 여부 확인
hashMap.containsKey("aa");
//특정 키가 없으면 초기값 설정, 키 존재한다면 기존 값 가져오기
hashMap.put("cc", hashMap.getOrDefault("cc", 1) + 3); // 없으므로 초기값 1 + 3 = 4
hashMap.put("cc", hashMap.getOrDefault("cc", 1) + 3); // 있으므로 기존값 4 + 3 = 7
//key - value 출력
for(String key : hashMap.keySet()){
System.out.println("key = " + key + " value = " + hashMap.get(key));
}