[탈출! IDE] Java API

sundays·2023년 2월 25일
0

IDE 없으면 알고리즘을 못하는 바보가 어딘가에 있습니다. (참고 짤 : 백지영 그게나에요)
당장 내일 라이브코딩을 해야하는데 말입니다...... toList() 인지 asList() 인지 오류 몇번 나보면서 코딩하고 오타도 너무 많고, 이런실수를 줄이기 위해서 연습하면서 작성해보겠습니다..

Collection Initialize

import java.util.*;
...

ArrayList<String> arr = new ArrayList<>();
arr.add("A");
arr.add("B");
arr.add("C");

또는 

ArrayList<String> arr = new ArrayList<>(Arrays.asList("A","B","C"));

숏코딩을 할때 보통 저는 Arrays.asList()를 주로 사용하려고 하는 것 같습니다. 만약 ArrayList의 인터페이스인 List를 사용하면 더 짧습니다

List<String> arr = Arrays.asList("A","B","C");

Arrays To Collections

배열을 컬렉션으로 변경할때는 다음과 같습니다.

String[] arr = {"A","B","C"};
// 1. 배열을 컬렉션으로 변경하는 방법
List<String> list = Arrays.asList(arr);

// 2. 배열을 컬렉션으로 변경하는 방법(Stream)
List<String> list = Stream.of(arr).collect(Collectors.toList());

그런데 제가 예전에 정말 헷갈렸던 부분이 있어서 포스팅 합니다. (나 처럼 살지 마시오.)

String[] arr = {"A","B","C"};
List<String> list = Arrays.asList(arr);
arr[0] = "AA"; // 원본데이터가 변경!

이 경우에는 그 유명한 주소 참조 가 일어나서 원본 데이터가 변경되었다면,
list가 원본데이터를 참조하게 되어 list.get(0) 을 출력했을때도 AA가 출력될 것입니다.

list.set(0, "BB"); // 원본데이터가 변경! 2

만약 이렇게 list의 0번째 값이 변경되어도 arr[0] 을 출력하게 되면 BB 로 출력됩니다. clone() 함수를 사용하면 이런 현상이 없어지겠죠...

Collections To Arrays

컬렉션을 배열로 변경할때는 다음과 같습니다.

// 1. 컬렉션에서 배열로 변경하는 방법
String[] convert = arr.toArray(new String[arr.size()]);
String[] convert = arr.toArray(new String[0]);

// 2. 컬렉션에서 배열로변경하는 방법 (Stream)
String[] convert = arr.stream().map(String::valueOf).toArray(String[]::new);

주의해야 할것은 컬렉션에서 배열로 변경하게 될때는 Wrapper Class 만 사용가능합니다. 그래서 int 형이 아닌 Integer 같은 자료형을 사용해야 합니다.

Collection To Collection

컬렉션 끼리도 타입을 변경해서 사용하게 되면 다른 컬렉션의 성질을 사용하게 될 수 있습니다

// 1. list에서 set으로 컬렉션 변경
Set<String> set = new HashSet<String>(arr);

// 2. set에서 list 로 컬렉션 변경
List<String> list = new ArrayList<String>(set);

결론

개인적으로는 stream 함수를 꼭 써야할경우에는 IDE가 없으면 그냥 광탈 해버릴것 같아서 꼭 언젠가는 정리할생각입니다

Reference

profile
develop life

0개의 댓글