본문 바로가기
Dev/Java

09-1.Collection(ArrayList)

by YoonYeoJin 2023. 8. 2.

교육을 받으면서 프로젝트 때 가장 많이 사용한 기능이기도 하고

사실 사용하다 보면 기본적인 개념을 까먹게 되는 개념인 것 같다.

그래서 컬렉션 중 ArrayList를 먼저 정리하고 HashSet, Map에 대한 개념을 정리하려고 한다.

 

1. 배열과 ArrayList의 차이

특징 배열 ArrayList
크기 지정 크기 지정 필요 필요 없음(기본 크기 10)
중간에 새로운 데이터 추가 가능은 하나 매번 땡겨주는
복잡한 알고리즘 기술 필요
필요 없음
데이터 종류 한 타입의 데이터만 저장 가능 여러 타입의 데이터 저장 가능
사용 시기 데이터를 단지 보관 및 조회 시 사용 보관 및 조회 + 추가 / 삭제 과정이
빈번한 경우 

 

2. ArrayList 사용

- 선언

  ArrayList를 선언하는 방법은 두가지가 있다.

그 중 첫번째는 Generic, 즉, 어떤 유형의 데이터를 넣을 지 지정을 하지 않은 경우이다.

Generic의 유무에 따라 있으면 사진과 같이 String 유형의 데이터만 저장 가능하며, 지정하지 않으면 어떤 유형이든 사용할 수 있게 된다.

그러나 보통 Generic을 많이 사용하게 되는 데 그 이유는 다음과 같다

1. 명시 된 타입의 데이터만 저장해서 사용하도록 제한할 수 있음

2. 컬렉션에 저장 된 데이터를 꺼낼 때 매번 형변환하는 절차를 없애기 위해

정도로 확인 할 수 있다.

 

2. ArrayList의 메소드

ArrayList에는 사용할 수 있는 메소드가 있는데 사진에서 선언한 Generic이 없는 list를 사용해서 메소드를 알아보려고 한다.

간단하게 list에 삽입할 데이터를 만들기 위해 Student 객체를 먼저 만들었다.

 

(1) add() / add(index, E)

add()는 리스트의 공간 끝에 데이터를 추가해주는 메소드이다.

사진과 같이 김김김이라는 사람과 이이이 라는 사람을 추가 시켜보았다

출력결과를 살펴보면

다음과 같이 객체 형태로 list에 담긴 것을 확인할 수 있다.

그렇다면 저 상태의 배열에서 Student 객체 형이 아닌 다른 유형의 데이터를 넣으면 어떻게 될까?

바로 이어서 String 형의 "이것도 됨?"을 넣고 출력해본 결과

add() 설명에서처럼 list 맨 끝에 Student 유형이 아닌 String형으로도 추가가 되는 것을 확인 할 수 있다.

이처럼 위에서 언급한 바와 같이 ArrayList에 Generic을 사용하지 않으면 어떤 유형의 데이터를 넣어도 문제 없이 저장되는 것을 확인 할 수 있다.

 

그리고 add()는 매개변수를 하나 더 받아 인덱스를 지정하여 사용할 수 있는데

원하는 인덱스를 추가해서 저장하면 원하는 위치에 내가 원하는 값을 집어넣을 수도 있다.

사진과 같이 1번 인덱스에 100이라는 값을 추가해보았다.

출력결과 기존 1번 인덱스였던 Student 객체가 뒤로 밀리면서 1번 인덱스에 100이라는 값이 추가된 것을 확인할 수 있다.

 

(2) remove(int index)

remove는 뜻에서도 알 수 있듯이 매개변수로 지정한 인덱스 값을 넣으면 해당 인덱스의 데이터를 지워주는 역할을 한다.

2번 인덱스의 이이이 Student 객체를 지워주기 위해 remove()를 사용한 결과이다

이이이 객체는 사라지고 3번 인덱스였던 이것도 됨이 앞으로 땡겨진 것을 확인 할 수 있다.

 

(3) set(int index, E e)

set()은 인덱스로 지정한 위치의 값을 내가 입력한 값으로 수정시켜주는 역할을 한다.

0번 인덱스의 김김김 Student를 최최최로 나이는 22살로 바꾼 결과 기존 0번의 김김김이 최최최로 수정된 것을 확인 할 수 있다.

 

이처럼 오늘은 ArrayList의 역할과 메소드를 다시 복습했는데

배열에서의 length()처럼 ArrayList에도 size()라는 메소드가 있는데 이는 굳이 코드로 살펴보지 않아도 생략했다.

 

다음에는 HashSet에 대해서 다시 복습해보려고 한다.

'Dev > Java' 카테고리의 다른 글

10.Network  (0) 2023.08.10
09-2.Collection(HashSet, HashMap)  (0) 2023.08.07
08.IO(2) - 문자 기반 스트림, 버퍼(보조스트림)  (0) 2023.07.31
07.IO(1) - file, 바이트기반스트림  (0) 2023.07.30
06.StringTokenizer  (1) 2023.07.27