[JAVA의 정석]ArrayList

2024. 1. 16. 13:42· 🎥Back/자바의 정석
목차
  1. 📂content
  2. 1. ArrayList
  3. 2.  ArrayList의 메서드
  4. 3.  ArrayList에 저장된 객체의 삭제 과정
  5. 4.  Java API 소스 보기 - /jdk설치경로/src.zip

이 글은 유튜브 '자바의 정석 - 기초편'을 보고 정리한 글입니다. 

 

 

📂content

1. ArrayList

- ArrayList는 기존의 Vector를 개선한 것으로 구현원리와 기능적을 동일

  ArrayList와 달리 Vector는 자체적으로 동기화처리가 되어 있다.

- List인터페이스를 구현하므로, 저장순서가 유지되고 중복을 허용한다. 

- 데이터의 저장공간으로 배열을 사용한다. (배열 기반)

더보기

Vector를 자세히 살펴보면 객체 배열이 있다. Object(객체) 배열에는 모든 종류의 객체를 저장할 수 있음

 

 

 

 

 

2.  ArrayList의 메서드

⚝ 생성자

- ArrayList() : 기본 생성자

- ArrayList(Collection c) : 매개변수로 컬렉션을 주면, 컬렉션에 저장된 것을 ArrayList로 만들어줌. 

- ArrayList(int initialCapacity) : 배열의 길이를 넣어줌. (한 번 만들면 길이를 못 바꾼다) 

 

⚝ 추가 메서드

- boolean add(Object o)

- void add(int index, Object element) : 특정 위치 

- boolean addAll(Collection c)

- boolean addAll(int index, Collection c) : 특정 위치 

 

⚝ 삭제 메서드

- boolean remove(Object o)

- void remove(int index, Object element) : 특정 위치 

- boolean removeAll(Collection c) : 특정 c 

- void clear() : 모두 

 

⚝ 그 외

- int indexOf(Object o) : 못 찾으면 -1 

- int lastIndexOf(Object o)

- boolean contains(Object o) : 객체 존재? 

- Object get(int index) : 객체 읽기 
- Object set(int index, Object element) 

 

- List subList(int fromIndex, int toIndex)

- Object[] toArray() : ArrayList의 객체배열을 반환 

- Object[] toArray(Object[] a)

- boolean isEmpty()

- void trimToSize()

- int size() 

 

 

⍟ 실습

더보기
package etc;
import java.util.ArrayList;
import java.util.Collections;
public class Ex11_1 {
public static void main(String[] args) {
//기본 길이(용량, capacity)가 10인 ArrayList를 생성
ArrayList list1 = new ArrayList(10);
list1.add(5); //가능하긴 함
//기본 사용 방식
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
//생성자 ArrayList(Collection c)를 이용한 것
ArrayList list2 = new ArrayList(list1.subList(1,4)); //ArrayList의 일부를 뽑아서 만들어줌
// 1 <= x < 4이기 때문에 index가 1,2,3인 것을 가지고 subList를 만든다.
//subList는 읽기 전용이라 사용할려면 새로운 리스트를 만들어주어야 한다.
print(list1, list2);
//Collection은 인터페이스, Collections는 유틸 클래스
Collections.sort(list1); //list1과 list2를 정렬한다.
Collections.sort(list2); //Collections.sort(List l)
print(list1, list2);
//list1이 list2의 모든 요소를 포함하고 있는가?
System.out.println("list1.containsAll(list2):"+list1.containsAll(list2));//true
list2.add("B");
list2.add("C"); //list2:[0, 2, 4, B, C]
list2.add(3, "A"); //list2:[0, 2, 4, A, B, C]
print(list1,list2);
list2.set(3, "AA");
print(list1, list2); //list1:[0, 1, 2, 3, 4, 5] list2:[0, 2, 4, AA, B, C]
list1.add(0,"1");
//indexOf()는 지정된 객체의 위치(인덱스)를 알려준다.
//출력은 같지만 Integer 1과 String 1이 있다.
System.out.println("index="+list1.indexOf("1")); //index=0
System.out.println("index="+list1.indexOf(1)); //index=2
// list1.remove(new Integer(1)); //숫자 1을 지움
// list1.remove(0); //인덱스 0번 지움
// list1.remove(1); //인덱스가 1인 객체를 삭제. boolean remove(Object obj)를 호출하는 것이 아닌, Object remove(int index)를 호출한다.
//list1에서 list2와 겹치는 부분만 남기고 나머지는 삭제한다
System.out.println("list1.retainAll(list2):"+list1.retainAll(list2)); //true
print(list1, list2); //list1:[0, 2, 4] list2:[0, 2, 4, AA, B, C]
//list2에서 list에 포함된 객체들을 삭제한다.
for(int i = list2.size()-1; i >= 0; i--){
if(list1.contains(list2.get(i)))
list2.remove(i);
}
/*
1. get(i)으로 list2에서 하나씩 꺼낸다
2. contains()로 꺼낸 객체가 list1에 있는지 확인
3. remove(i)로 해당 객체를 list2에서 삭제
*/
print(list1, list2); //list1:[0, 2, 4] list2:[AA, B, C]
} //main의 끝
private static void print(ArrayList list1, ArrayList list2) {
System.out.println("list1:"+list1);
System.out.println("list2:"+list2);
System.out.println();
}
} //class

 

- list.add(5);도 가능하긴 하지만, 기본적으로 ArrayList에는 객체만 저장이 가능하다.

따라서 list.add(new Integer(5));와 같은 형식으로 값을 추가해야 한다. 그렇다면 list.add(5);는 어떻게 가능한 것인가? 그것은 컴파일러가 autoboxing해주면서 기본형을 참조형으로 자동 변환을 해주기 때문이다. 

 

 

 

 

 

3.  ArrayList에 저장된 객체의 삭제 과정

- ArrayList에 저장된 세 번째 데이터(data[2])를 삭제하는 과정. list.remove(2);를 호출

 

 

① 삭제할 데이터 아래의 데이터를 한 칸씩 위로 복사해서 삭제할 데이터를 덮어쓴다. 

② 데이터가 모두 한 칸씩 이동했으므로 마지막 데이터는 null로 변경한다. 

 

③ 데이터가 삭제되어 데이터의 개수가 줄었으므로 size의 값을 감소시킨다. 

 

※ 마지막 데이터를 삭제하는 경우, ①의 과정(배열의 복사)은 필요없다. 

 

 

 

ArrayList를 전부 삭제해보자!! 

⚝ ArrayList에 저장된 첫 번째 객체부터 삭제하는 경우 (배열 복사 발생) 

for문 다 돌았는데도 다 안 지워지고 남아있다. 
왜? 남아있는 얘들이 위로 올라가기 때문이다. 
그래서 아래와 같은 방식으로 해결이 가능하다. 

 

 

⚝ ArrayList에 저장된 마지막 개체부터 삭제하는 경우 (배열 복사 발생 안 함)

 

 

 

 

 

4.  Java API 소스 보기 - /jdk설치경로/src.zip

 

⚝ Eclipse에서 보는 방법

- 소스를 보고 싶은 클래스나 메서드에서 우클릭 -> Open Declaration 클릭! 

- 만약 Source not found라는 글을 보면 그 아래의 Attach Source...를 클릭 -> External Location 클릭 -> External File...을 클릭하고 jdk가 설치된 경로(/jdk/src.zip)를 지정 

 

 

 

 

 

출처

더보기

https://www.youtube.com/watch?v=oJlCC1DutbA&list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp

저작자표시 비영리 변경금지 (새창열림)

'🎥Back > 자바의 정석' 카테고리의 다른 글

[JAVA의 정석]Iterator, Enumeration, Map과 Iterator  (0) 2024.01.16
[JAVA의 정석]Stack과 Queue의 활용  (0) 2024.01.16
[JAVA의 정석]Stack과 Queue  (0) 2024.01.16
[JAVA의 정석]LinkedList  (0) 2024.01.16
[JAVA의 정석]컬렉션프레임웍과 핵심 인터페이스  (0) 2024.01.13
  1. 📂content
  2. 1. ArrayList
  3. 2.  ArrayList의 메서드
  4. 3.  ArrayList에 저장된 객체의 삭제 과정
  5. 4.  Java API 소스 보기 - /jdk설치경로/src.zip
'🎥Back/자바의 정석' 카테고리의 다른 글
  • [JAVA의 정석]Stack과 Queue의 활용
  • [JAVA의 정석]Stack과 Queue
  • [JAVA의 정석]LinkedList
  • [JAVA의 정석]컬렉션프레임웍과 핵심 인터페이스
i_zzy
i_zzy
기록 겸 공부 블로그입니다. 문제를 해결해 나아가는 과정을 기록하고 있어요. 잘못된 부분이 있으면 자유롭게 댓글 달아 주세요👍
Izzy's blog기록 겸 공부 블로그입니다. 문제를 해결해 나아가는 과정을 기록하고 있어요. 잘못된 부분이 있으면 자유롭게 댓글 달아 주세요👍
i_zzy
Izzy's blog
i_zzy
전체
오늘
어제
  • 분류 전체보기 (94)
    • 💻개발 (29)
      • 개발지식 (0)
      • 프로그램 설치 (3)
      • Git (3)
      • 오류 (4)
      • JAVA (5)
      • SQL (2)
      • React,Vue (5)
      • AWS (6)
    • ⚙️알고리즘 (30)
      • SQL (3)
      • Java (15)
    • 🎥Back (29)
      • 자바의 정석 (29)
    • 🌤️일상 (5)
      • 초록 스터디 (5)

블로그 메뉴

  • 홈
  • 글쓰기
  • 관리

인기 글

태그

  • Java
  • 자바
  • 스레드
  • AWS
  • 자바의정석
  • sql
  • 백준
  • 알고리즘
  • 프로그래머스
  • 자바의 정석

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
i_zzy
[JAVA의 정석]ArrayList
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.