기초를 배울때 대부분 Arrays 배열을 배운다. Arrays 는 고정된 개수의 단일 타입 값(정적 할당) 들을 담고 있는 객체이다.
Arrays는 정적 할당이기 때문에 메모리 낭비 또는 공간이 부족한 문제가 생기곤 한다.
이 문제를 해결하기 위해 ArrayLists 를 사용할수 있어 한번 알아 볼려고한다.
우선, 위에 설명한 Arrays 와ArrayLists 에 대한 장단점 부터 알아볼려고 한다.
✅ Arrays vs ArrayLists
Arrays
장점
- 데이터 크기가 정해져 있기 때문에 메모리 관리가 편하다.
- 메모리에 연속적으로 나열되어 할당되기 때문에 index를 통해 색인(접근)속도가 빠르다.
단점
- 처음 선언한 배열의 크기를 변경할 수 없다.
- index에 위치한 하나의 데이터를 삭제하더라도 해당 index에는 빈공간으로 계속 남는다.
- 배열의 크기를 변경할 수 없기 때문에, 처음에 어떻게 지정하냐에따라 메모리 낭비나 공간이 부족할 수 있다
ArrayLists
장점
- index 의 값이 빠지고 값이 당겨진다.
- 리스트의 길이가 가변적이기 때문에 변경이 수월하다.
단점
- 배열과 달리 메모리에 연속적으로 나열되어 있지 않고, 주소로 연결되어있는 형태이기 때문에 index를 통한 색인(접근)속도가 배열보다는 느리다.
- 객체로 데이터를 다루기 때문에 적은 양의 데이터를 다루는 경우엔 배열에 비해 차지하는 메모리가 커진다.
◆ 장점,단점으로 설명을 하긴 했지만 상황에 맞게 적용시키는 것이 가장 중요하다.
✅ ArrayList란?
- ArrayList는 배열을 기반으로 한 컬렉션의 하나이며, 데이터를 추가, 삭제시 내부에서 동적으로 배열의 길이를 조절해준다.
- 객체 자체를 저장하는 것이 아니라 객체의 번지를 저장한다.
- 동일한 객체를 중복 저장할 수 있는데, 이 경우에는 동일한 번지가 저장되며 null 또한 저장이 가능하다.
ArrayList 컬렉션 생성
import java.util.ArrayList;
// 타입설정 Integer 객체만 적재가능
ArrayList<Integer> members = new ArrayList<>();
// 초기 용량(capacity) 지정
ArrayList<Integer> num1 = new ArrayList<>(10);
// 배열을 넣어 생성
ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3));
// 다른 컬렉션으로부터 그대로 요소를 받아와 생성
// ArrayList를 인자로 받는 API를 사용하기 위해서 Collection 타입 변환이 필요할 때 많이 사용
ArrayList<Integer> list2 = new ArratList<>(list1);
● <> 를 통해 타입을 지정하는데 이 기호는 제네릭(Generics) 라는 기법이다.
✅ ArrayList의 주요 메소드
https://computerreport.tistory.com/33
[Java]Lv3. 단어 맞추기 게임
문제 1.컴퓨터가 랜덤으로 영어단어를 선택합니다. 2.영어단어의 자리수를 알려줍니다. ex ) PICTURE = 7자리 ⇒ _ _ _ _ _ _ _ 3.사용자는 A 부터 Z 까지의 알파벳 중에서 하나를 입력합니다
computerreport.tistory.com
위 링크의 문제를 예제로 사용해 풀어보았다.
1.boolean add(E e)
mainword 단어를 toCharArray()로 문장을 char형태로 분리한 뒤 ArrayList 에 단어를 추가 시킨다.그럼 single 배열에는 ['a','b','c','d','e'] 이런식으로 들어가게 될 것 이다.
String mainword = "abcde";
ArrayList<Character> single = new ArrayList<>();
for (char c : mainword.toCharArray()) {
single.add(c);
}
2. E get(int index), int size()
입력한 char형태의 alphabet 과 singie의 i 번째 인덱스(single.get(i))가 같은지 검사하는 코드이다.
또한,single.size() 를 이용해 배열의 크기를 불러올 수 있다.
//입력한 글자가 포함될 시
boolean checking=false;
for(int i=0;i<single.size();i++)
{
if(single.get(i) == alphabet.charAt(0))
{
wordnum[i]=alphabet.charAt(0);
checking=true;
}
}
3. boolean contains(E e)
check의 arraylists 에 입력한 alphabet 과 동일한 값이 있는지 검사하는 코드이다.
//이미 입력한 알파벳 확인
if(check.contains(alphabet))
{
System.out.println("이미 입력된 글자 입니다 기회가 1 차감됩니다.");
chance -=1;
continue;
}
4. E remove(int index)
인덱스 0의 값이 10 이 삭제되어 20,30,40,50 만 출력된다.
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);
numbers.remove(0);
System.out.println(numbers);
5. int indexOf(E e)
30이라는 값이 어느 index에 들어 있는지 확인하는 코드이다.
ArrayList<Integer> numbers = new ArrayList<>();
numbers.add(10);
numbers.add(20);
numbers.add(30);
numbers.add(40);
numbers.add(50);
System.out.println(numbers.indexOf(30));
'Java' 카테고리의 다른 글
[Java]Enum이란? & 사용법 (0) | 2025.02.28 |
---|---|
[Java]코드 스타일 및 명명 규칙 (0) | 2025.02.24 |
[Java]난수 생성(math,Random) (0) | 2025.02.14 |
[Java]Map 컬렉션 (0) | 2025.02.07 |
[Java]객체 생성(new) (0) | 2025.02.06 |