본문 바로가기
Web (~2022.06)/Java

[JAVA] Arrays.asList 넌 누구냐 / 마침표를 기준으로 split 하기

by wanggoNya 2022. 4. 4.

오늘의 상황...

사용자에게 입력받고, 마침표를 기준으로 split 하여 ArrayList에 넣으려고 하는데...

Arrays.asList를 사용하면 된다고?

System.out.print("version1 = ");
	String v1 = sc.next();
	System.out.print("version2 = ");
	String v2 = sc.next();
	
	String[] v1_array = v1.split(".");
	String[] v2_array = v2.split(".");
	
	ArrayList<String> v1_list = new ArrayList<String>(Arrays.asList(v1_array));
	ArrayList<String> v2_list = new ArrayList<String>(Arrays.asList(v2_array));

Arrays.asList 가 뭐지? 

아하! Array를 List로 변환해주는 친구였다.

Array에서 ArrayList로 갈 때 하나씩 옮기는 방법 외에,

Arrays.asList()가 가장 많이 사용하는 방법이다.

 

주의할 점

- 원래 만들어진 배열의 인스턴스를 가리킴!

- 원본 배열도 함께 바뀌게 됨!

- 만든 List에 새로운 원소를 추가/삭제 불가!

- 이 때문에 초기화된 리스트는 ArrayList처럼 자유롭게 변경할 수 있는 특성을 갖지 못한다.!!!!

- 변경하고 싶으면 ArrayList 클래스의 생성자에, 만들어진 List 자료구조를 넣어서, 새롭게 만들어진 ArrayList 인스턴스를 참조하도록 해줘야 함!!

 

어.. List 랑 ArrayList 다른 거 아니야?

ArrayList<Object> list = new ArrayList <>();
List<Object> list = new ArrayList<>();

위의 두 줄은 같은 결과를 도출하지만

List를 사용해서 ArrayList를 생성하는 것은 유연성에서의 효과를 볼 수 있다.

 

즉, String과 Integer 등등 여러 데이터의 삽입과 삭제를 유연하게 하기 위해서 List를 사용한다는 것.

 

비유하자면, List는 도형이고 ArrayList는 정사각형.

ArrayList에는 정사각형만 들어가는데, List에는 정사각형, 정삼각형, 삼각형 등등 들어갈 수 있다는 말씀

 


자.. 다시 돌아와서 ..

array에 넣는 과정 없이 바로 split한 배열을 List 생성과 동시에 넣어버리면 되겠네.

 

 

System.out.print("version1 = ");
	String v1 = sc.next();
	System.out.print("version2 = ");
	String v2 = sc.next();
	
	List<String> v1_list = new ArrayList<String>(Arrays.asList(v1.split(".")));
	List<String> v2_list = new ArrayList<String>(Arrays.asList(v1.split(".")));

자.. 근데 왜 List의 크기가 자꾸 0이지? 

감히 부려본 땡깡...

메타 문자 구분자로 사용하려면 이스케이프 문자인 "\\"를 붙여줘야 한다....

그래서 그동안 안 된 거구나?

List<String> v1_list = new ArrayList<String>(Arrays.asList(v1.split("\\.")));
List<String> v2_list = new ArrayList<String>(Arrays.asList(v1.split("\\.")));

편-안


이렇게 오늘의 과제에서도 배울 점 가득

 

Reference :

[Java] Arrays.asList (tistory.com)

자바의 Arrays.asList (velog.io)

[JAVA] Arrays.asList() : 네이버 블로그 (naver.com)

[JAVA 자바] String클래스의 split 메서드로 문자열 분리하는 법. 문자열 파싱. StringTokenizer, substring와 차이? (tistory.com)