상세 컨텐츠

본문 제목

10/17 - JAVA 문법 (배열 복사, 배열 <->리스트 전환, 정렬 + 기타등등)

JAVA문법

by 화2팅 2023. 10. 18. 10:35

본문

Java관련 기본개념은 어느정도 준비를 어느정도 눈에 익혔고 아주 기본적인것도 준비가 됐다는 생각으로 java의 실용적인 문법이나 손에 익힐겸
가벼운 레벨의 코딩테스트를 어제부터 몇문제 풀어보았다.

그 과정에서 헷갈리나 기록해두고자하는 java 문법이나 메커니즘을 몇가지 기록해보았다. (코딩용 알고리즘은 따로 기록하거나 저장해두진 않았지만 한문장정도의 알아두거나 이해하기용으로 몇가지 기록해놓은건 있다.)

1. 배열&리스트 복사

1-1 배열 복사 Arrays.CopyOf

Arrays.CopyOf은 깊은복사 메서드인것을 확인해볼 수 있다.
쉬운 코드임에도 굳이 기록해놓은 이유는 뒤에 나오면 알겠지만 Arrays.
이 들어간 코드들이 많아서 헷갈리다보니 기록해놓았다.

이외에 배열에는 arr1.clone()을 사용할 수도 있다.
(**당연히 String 배열에서도 똑같이 적용된다.**)

1-2 리스트복사

아주 쉬운 기본적인 얕은 복사나 생성자를 활용한 깊은 복사를 제외하면
addAll 메서드를 통해 깊은 복사가 가능하다.

2. 배열 <---> 리스트 전환

이 전환과정은 굉장히 쉬우면서 막상 써먹으려면 헷갈리더라...

검색을 그때그떄해도되고 틀리면 알아서 인텔리제이에서 알아서 고쳐주긴하지만 그거믿고 코딩짜려고했다가 시간이 녹는 경험을 해보았다...

**2-1 배열 --> 리스트 전환

먼저 String 배열기준으로 기준으로 살펴보면

전자는 얕은복사이고 후자는 깊은 복사이다.

전자는 바로 코딩해서 써먹기 편해보이지만 얕은복사라서 후자를 쓰는데 익숙해져야 할것같다.
(좀 간단한 리스트면 for문 돌면서 하고....)

여기서 이제 int형 배열을 가지고 이야기 해보도록 하겠다.

일단 제가 실햄해보고 찾은바로는 똑같은 방법으로는 int형 배열을 리스트로 만들수가 없더라..

일단 결론만 말하자면 Array.asList로는 int배열같은걸 만들수없다이다. Integer 타입으로 바꿔줘야 쉽게 쓸수있다.

굳이 int형배열로 쓰려고한다면

List intlist = Arrays.stream(arr1).boxed().toList();
이런식으로 쓸수가 있긴하더라..
(Arrays.stream이 IntStream 타입이라 Stream처럼 변환시키려면 .boxed()사용)

****주의***

와 근데 이거 주의해야하는게 toList()은 불변객체로 만들어준다 하네..

값을 조회할때만 써야할거같다..

이거때문에 밑에서 sort()하려고 할떄 계속 에러가 뜨는거였다....

3. Sort() 정렬하기

Sort()함수랑 리스트 변환 때문에 오늘 하루를 굉장히 날렸다......
왜냐하면 현재 내 상태로는 Comparator,Collections와 Comparable? 등의 개념이 아직 이해가 안돼서 최대한 그부분을 사용하지 않으려고 여러가지 시도를 해보다보니 그냥 포기하고 수긍하기로 했다. 당장은 이해안되지만 일단은 외워서 써보려고 해야겠다...

3-1 배열기준

Wrapper 타입이나 int형 기본형 배열들은 Arrays.sort(배열) 함수로 배열이 가능하다.

배열 내림차순'

다음과 같이 Arrays.sort(배열,~) 형식으로 내림차순을 쓰려면
배열 위치에 Wrapper형 배열이 와야한다.

3-2 리스트기준

Collections.sort(리스트);
리스트.sort(내림차순시키는 내용~);
일단 이렇게 두가지 방법이 존재한다고 생각하면 될거같다.

5 잡다한 기타 코드 기록용

5-1나누기 연산시 주의할점

double v = (double) 1/8 // 결과값이 0.125가 나오지만
double v = (double)(1/8) // 이건 0이 나온다!

5-2

int tf = '4'; // 이렇게하면 '4'의 아스키코드 두자리숫자값이 나온다
int ff = '4' - '0'; //이렇게 해야 숫자4가 나온다

5-3

코드하다가보니 Integer을 char로 바꾸는건 이상한 코드가 들어가곤한다더라....

(ex) 9를 '9'로 바꾸기

가능하면 Integer.toString()으로 String타입으로 바꿔서 쓰는게 훨씬편하다더라..

5-3

배열을 스트림으로 변환
int[] numbers = {1,2,3,4,5};
IntStream stream = Arrays.stream(numbers) // 배열을 스트림처럼 쓸때

리턴타입은 보통 IntStream 이다.

5-4

String에서 replace는 string을 특정 다른 string으로 치환시켜준다.

ex) String new_str = str.replace("adsD","asd"); 처럼 사용
(반환값을 넘겨줘야한다.)

5-5

Array.asList()와 List.of()

Arrays.asList()와 List.of()의 가장 큰 차이는 불변성입니다. Arrays.asList()를 사용하면 리스트는 가변이지만, List.of()를 사용하면 리스트는 불변입니다.

'JAVA문법' 카테고리의 다른 글

11/9 Builder 패턴  (1) 2023.11.09
10/20  (1) 2023.10.21
10/19  (1) 2023.10.19
10/18  (0) 2023.10.18

관련글 더보기