Language/Summary

Data Structure#1 - ArrayList

2022. 5. 25. 18:06
728x90
반응형

ㆍ자바의 자료구조

- 자바에서의 데이터를 담는 자료 구조를 크게 나누어보면 이렇다.

  • 순서가 있는 목록(List) 형
  • 순서가 중요하지 않은 셋(Set) 형
  • 먼저 들어온 것이 먼저 나가는 큐(Queue) 형
  • 키-값(key-value)로 저장되는 맵(Map) 형

- List, Set, Queue는 'Collection' 인터페이스를 확장하고 있다.

 

- Collection 인터페이스는 Iterable<E>라는 인터페이스를 확장했다. (Iterable 인터페이스를 사용하여 데이터를 순차적으로 가져올 수 있다)

- Collection 인터페이스에 선언된 주요 메소드 목록은 다음 오라클 공식문서에서 확인하자.

https://docs.oracle.com/javase/8/docs/api/

 

Java Platform SE 8

 

docs.oracle.com

 

 

ㆍList 인터페이스

- List 인터페이스는 배열처럼 '순서'가 있는 자료형이다. (ArrayList, Vector, Stack, LinkedList 등이 이를 구현한다.)
- ArrayList와 Vector 클래스의 사용법은 거의 동일하다. (ArrayList는 Not Tread safe / Vector은 Tread safe)

 

ㆍArrayList 

- Object -> AbstractCollection<E> -> AbstractList<E> -> ArrayList<E>  // ArrayList의 상속관계
- Serializable, Cloneable, Iterable<E>, Collection<E>, List<E>, RandomAccess // ArrayList가 구현한 인터페이스

 

- ArrayList의 생성자에 아무것도 넣지 않을 경우 공간이 10인 ArrayList를 만듬 (new ArrayList();)
- 제네릭을 이용하여 타입을 정해주는 것이 좋음. (타입을 지정하지 않으면 모든 요소를 Object로 처리)
- ArrayLIst의 생성자에 정수값을 파라미터로 넣어주면 해당 크기만큼의 ArrayList를 만듬 (new ArrayList(100);) //크기가 100인 ArrayList 생성
- ArrayList의 초기 크기 이상으로 데이터가 삽입되면, 크기를 늘이는 작업이 자동으로 수행 (성능에 영향을 주게됨)

 

 

요소 추가

  • add(E e) - 매개 변수로 넘어온 데이터를 추가 (가장 끝에)
  • add(int index, E e) - 인덱스 위치에 데이터를 추가 
  • addAll(Collection<? extends E> c) - 컬렉션 데이터를 추가 (가장 끝에)
  • addAll(int index, Collection<? extends E> c) - 컬렉션 데이터를 인덱스 위치에 추가

- for(타입이름 임시변수명 : 반복대상객체) 사용가능

- Shallow copy - 다른 객체에 원본 객체의 '주소 값'만 할당.(복제된 객체와 원본 객체가 값을 공유)
  다른 컬렉션 객체를 '=' 연산자를 통해 대입할경우 Shallow copy가 발생.

ArrayList<String> listA = new ArrayList<String>();
listA.add("A");
listA.add("B");

ArrayList<String> listB = listA;
listB.add("C");

System.out.println(listA);
// [A, B, C] 출력

다음과 같이 다른 객체에 원본 객체를 그대로 대입했을 때, 주소값이 할당되어 다른 객체에서 객체의 데이터를 바꾸면 원본 객체에도 영향이 감. 따라서, 객체를 조회할때만 사용하는 것이 좋아보임.

 

- Deep copy - 다른 객체에 모든 '값'을 복사하여 할당. (복제된 객체는 원본에 영향이 없음)

ArrayList<String> listA = new ArrayList<String>();
listA.add("A");
listA.add("B");

ArrayList<String> listB = new ArrayList<String>(listA);
// listB.addAll(listA) 메소드를 사용하는 것과 동일
listB.add("C");

System.out.println(listA);
// [A, B] 출력
System.out.println(listB);
// [A, B, C] 출력

생성자를 이용하여 새로운 객체를 생성한 것이므로 완전히 다른 객체(주소 값도 다름)

 

 

요소 가져오기

- size()메소드로 컬렉션 객체의 몇개의 데이터가 저장되어있는지 리턴값(int)으로 알 수 있다.

  • size() - ArrayList에 저장되어있는 데이터의 개수를 리턴 (int)
  • get(int index) - 매개변수로 받은 정수값의 위치에 있는 데이터를 리턴
  • indexOf(Object o) - 매개변수로 넘어온 객체와 동일한 데이터의 위치를 리턴 (앞에서부터 검색)
  • lastIndexOf(Object o) - indexOf 메소드의 기능인데 뒤에서부터 검색한다.

 

배열로 반환

  • toArray() - Object타입의 배열로 리턴
  • toArray(T[] a) - 매개변수 타입의 배열로 리턴 // Ex)) String[] stringList = list.toArray(new String[0]); 
    (매개변수로 들어가는 배열의 크기를 맞춰주는것이 좋음.)  

 

 

요소 삭제

  •  clear() - 모든 요소 삭제
  • remove(int index) - index위치의 요소를 삭제
  • remove(Object o) - 매개변수로 들어온 객체와 동일한 첫 번째 데이터만 삭제 (삭제 성공여부를 return boolean)
  • removeAll(Object o) - 매개변수로 들어온 객체와 동일한 모든 데이터 삭제 (삭제 성공여부를 return boolean)

- 기억해두어야 할 것은 인덱스를 이용하여 요소를 삭제할 때, get()메소드처럼 지워지는 데이터가 반환된다는 점이다. (지우면서 확인할 수 있음)

 

 

요소 값 변경

  • set(int index, E element) - 인덱스위치의 요소를 두번째 매개변수 값으로 변경한다.
  • trimToSize() - 컬렉션 객체의 비어있는 공간(데이터가 들어있지 않은 공간)을 없앤다. (데이터의 크기를 줄임)

 

 

ㆍStack (LIFO - Last In First Out)

- ArraryList와 동일하게 제네릭으로 타입을 지정해주는것이 권장됨.

  • Stack() - 아무것도 없는 Stack 객체 생성 (Stack 객체의 유일한 생성자)

 

  • empty() - 객체가 비어있는지 확인
  • peek() - 가장 위에있는 데이터 리턴
  • pop() - 가장 위의 데이터 삭제후, 리턴
  • push(E item) - 매개변수로 들어온 데이터를 가장 위에 저장
  • search(Object o) - 매개변수로 들어온 데이터의 인덱스값을 리턴

 

 

참고
ㆍ"자바의 신 vol.2", 이상민 저자
728x90
반응형
저작자표시 (새창열림)
  1. ㆍ자바의 자료구조
  2. ㆍList 인터페이스
  3. ㆍArrayList 
  4. ㆍStack (LIFO - Last In First Out)
'Language/Summary' 카테고리의 다른 글
  • Data Structure#3 - Map, Properties
  • Data Structure#2 - Set, Linked List
  • Generic
  • java.lang
KAispread
KAispread
개발에 관련된 학습 내용들을 기록하는 공간입니다.
반응형
KAispread
기억의 정류장
KAispread
전체
오늘
어제
  • All (120)
    • Language (27)
      • Java (14)
      • JavaScript (4)
      • Principle (2)
      • Summary (7)
    • Web (10)
      • Template (4)
      • Base (6)
    • Spring (7)
    • Test (7)
    • JPA (23)
      • Spring Data JPA (9)
      • Base (14)
    • AWS (10)
    • DevOps (8)
      • Monitoring (2)
    • Database (10)
    • Algorithm (9)
    • Project (1)
    • Git (1)
    • 생각 정리 (4)
    • IDE (3)
      • eclipse (1)
      • Intellij (2)

블로그 메뉴

  • 🌈 GIthub
  • 🌎 LinkedIn
  • 📝 Notion
  • 🧑🏻‍💻 Resume

인기 글

최근 댓글

최근 글

hELLO · Designed By 정상우.
글쓰기 관리자
KAispread
Data Structure#1 - ArrayList
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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