-
[Java] Java의 동적 배열Language/Java 2024. 10. 16. 19:20
우테코 1주차 문제를 해결하면서 필요해보이는 개념을 이곳에 정리해보려 한다.
기존의 Java 내 배열은 정적 배열로, 선언할 때부터 크기를 설정해주어야 했다.
그러나, 해당 문제의 입력 길이가 정해지지 않았기 때문에 동적 배열을 사용할 필요성을 느꼈다.
Java에서는 대표적인 동적 배열로 ArrayList를 지원한다.
Java oracle document - ArrayList
오라클이 제공하는 자바의 공식 도큐먼트에서는 ArrayList가 무엇으로 구현되었는지 등의 정보를 볼 수 있다.
[https://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html]
공식 도큐먼트를 보면, ArrayList가 Object > AbstractCollection > AbstractList 를 상속했음을 알 수 있다.
List, RandomAccess, Cloneable, Serializable 를 구현했다는 것 또한 명시되었다.각각이 무엇인지 간단하게 알아보자.
Object
자바가 객체 없이는 못 사는 언어라는 것은 모두가 알고 있다.
자바에 존재하는 대부분의 것들은 객체를 상속받고 있다. 즉, 객체다.
원시타입과 static, null, void를 제외하고 자바 속 거의 대부분의 것들이 객체일 정도로 자바에게 객체는 빼놓을 수 없는 개념이다.AbstractionCollection
- 모든 Collection 클래스가 상속받을 수 있는 추상 클래스
- 직접 인스턴스화 할 수 없다.
=> 하위 클래스로 상세한 메서드를 구현한다. - Collection 인터페이스를 구현
Collection이 무엇인지는 아래를 참고~~
https://i-m-okay.tistory.com/8
[Java] Collection framework
collection framework?데이터 군을 저장하는 클래스들을 표준화한 설계.데이터 군을 다루고 표현하기 위한 단일화된 구조.컬렉션 : 다수의 데이터. 데이터 그룹프레임웍 : 표준화된 프로그래밍 방식JDK
i-m-okay.tistory.com
AbstractList
- List 컬렉션의 동작을 미리 정의해둔 클래스
- List 인터페이스를 구현
- 순차적인 접근, 인덱스를 이용한 요소 관리 메서드를 제공
ArrayList
- 동적 크기 조정 가능 (내부적으론 배열을 사용)
- 초기 크기를 초과할 경우 더 큰 배열을 할당하고 복사하는 방식
=> 원시타입 배열보다 속도가 느리다는 단접이있다. - 삽입/삭제 O(n), 접근 O(1)
- 중복 허용, 순서 유지
ArrayList의 주요 메서드
add(E e)
; 리스트 맨 뒤에 요소 추가add(int index, E e)
; 인덱스에 요소를 삽입하고 하나씩 뒤로 밀기get(int index)
; 해당 인덱스 요소 반환set(int index, E e)
; 인덱스 요소를 새로운 값으로 교체remove(int index)
; 인덱스 요소 제거 후 하나씩 당기기size()
; 요소 개수 반환contains(Object o)
; 해당 객체가 있는지 확인
원시타입으로 선언하면?
동적 배열보다 속도면에서는 빠르다.
(동적 배열은 정해진 길이를 초과했을 경우의 복사하는 방식에서 시간이 걸린다.)import java.util.ArrayList; public class Main { public static void main(String[] args) { // ArrayList 생성 ArrayList<String> list = new ArrayList<>(); // 요소 추가 list.add("Apple"); list.add("Banana"); list.add("Cherry"); // 요소 접근 System.out.println(list.get(0)); // Apple 출력 // 요소 삽입 list.add(1, "Blueberry"); // Banana 앞에 Blueberry 삽입 // 요소 제거 list.remove(2); // Cherry 제거 // 리스트 출력 System.out.println(list); // [Apple, Blueberry, Banana] 출력 } }
ArrayList va LinkedList
ArrayList
는 빠른 요소 접근에 유리LinkedList
는 삽입과 삭제에 유리
본격 비교는 예전에 올렸던 아래 게시글에서 했다.
https://i-m-okay.tistory.com/10
[Java] ArrayList vs LinkedList
ArrayList vs LinkedListArrayList기존의 Vector를 개선한 것Object 배열을 이용해 데이터를 순차적으로 저장더이상 저장할 공간이 없으면 큰 새로운 배열을 생성하여 내용을 복사해서 확장중간 요소 삭제
i-m-okay.tistory.com
'Language > Java' 카테고리의 다른 글
[우테코 프리코스] Console.class가 무엇 (0) 2024.10.18 [우테코 프리코스] NsTest가 무엇 (1) 2024.10.17 [IntelliJ]IDEA에서 java 버전 변경 (0) 2024.10.15 [우테코 프리코스] 임하는 자세 (0) 2024.10.15 [Java] Stack vs Queue (1) 2024.07.24