본문 바로가기

JAVA

자바 (Collection Framework)

컬렉션 프레임워크(Collection Framework)란?

: 배열을 사용하다 보면 여러가지 비효율적인 문제가 생긴다. 가장 큰 문제점은 크기가 고정적이라는 것이다. 배열의 크기는 생성할 때 결정되며 그 크기를 넘어가게 되면 더이상 데이터를 저장할 수 없다. 또한 데이터를 삭제하면 해당 인덱스의 데이터는 비어있어 메모리가 낭비되는 등 여러 문제점들이 발생한다.

 

 그렇기에 자바는 배열의 이러한 문제점을 해결하기 위해, 널리 알려져 있는 자료구조를 바탕으로 객체나 데이터들을 효율적으로 관리(추가, 삭제, 검색, 저장)할 수 있는 자료구조들을 만들어 놓았다. 이러한 자료구조들이 있는 라이브러리를 컬렉션 프레임워크라고 한다. 대표적으로는 List, Set, Map, Stack, Queue 등이 있는데, 오늘은 List(ArrayList)와 관련된 내용을 다뤄보고자 한다.

 

 

 List 컬렉션 

컬렉션 프레임워크를 상속받고 있는 List컬렉션은 List 컬렉션은 객체를 일렬로 늘어놓은 구조를 가지고 있다. List 컬렉션은 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다. (인덱스에는 데이터가 저장되어 있는 참조 값을 가지고 있다.)

List컬렉션은 객체 자체를 저장하는 것이 아니라 위와 같이 객체의 번지를 참조합니다. 동일한 객체를 중복 저장할 수 있는데 이 경우 동일한 번지가 참조된다. null도 저장이 가능한데 이 경우 해당 인덱스는 객체를 참조하지 않는다. List 컬렉션을 구현하는 대표적인 클래스들은 ArrayList, LinkedList, Vector가 있으며 이 3가지 클래스는 List 인터페이스를 같이 상속하고 있으므로 공통적으로 사용할 수 있는 메서드들이 많다. 기본적인 List의 메서드는 아래와 같다.

 

 List 클래스 주요 메서드 

메서드 설명
boolean add(E e) 주어진 객체를 맨 끝에 추가합니다.
void add(int index, E element) 주어진 인덱스에 객체를 추가합니다.
set(int index, E element) 주어진 인덱스에 저장된 객체를 주어진 객체로 바꿉니다.
boolean contains(Object o) 주어진 객체가 있는지에 대한 여부를 검색합니다.
E get(int index) 주어진 인덱스에 저장된 객체를 리턴합니다.
isEmpty() 컬렉션이 비어있는지 여부를 확인합니다.
int size() 저장되어 있는 전체 객체 수를 리턴합니다.
E remove(int index) 주어진 인덱스에 저장된 객체를 삭제합니다.
void clear() 주어진 인덱스에 저장된 객체를 삭제합니다.
boolean remove(Object o) 주어진 객체를 삭제합니다.

 

 ArrayList란? 

: ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트이다. 일반적인 배열과 유사하지만 한 번 생성되면 크기가 고정되는 일반 배열과는 달리 ArrayList는 배열 크기가 부족하거나 줄어들면 동적으로 변한다는 장점이 있습니다. 하지만 그 대신 기존 배열보다 느리다는 단점 역시 존재합니다.

 

 

 ArrayList 사용법 

ArrayList list = new ArrayList();//타입 미설정 Object로 선언된다.
ArrayList<Student> members = new ArrayList<Student>();//타입설정 Student객체만 사용가능
ArrayList<Integer> num = new ArrayList<Integer>();//타입설정 int타입만 사용가능
ArrayList<Integer> num2 = new ArrayList<>();//new에서 타입 파라미터 생략가능
ArrayList<Integer> num3 = new ArrayList<Integer>(10);//초기 용량(capacity)지정
ArrayList<Integer> list2 = new ArrayList<Integer>(Arrays.asList(1,2,3));//생성시 값추가

ArrayList 선언 시 ArrayList list = new ArrayList()로 선언 후 내부에 임의의 값을 넣고 사용할수도 있지만 이렇게 사용할 경우 값을 뽑아내기 위해서는 캐스팅(Casting) 연산이 필요하고, 잘못된 타입으로 캐스팅을 한 경우에는 에러가 발생하기에 위와 같은 방식은 추천하지 않는다. ArrayList를 사용할 시에는 ArrayList에 타입을 명시해주는것이 좋다. JDK 5.0이후부터 자료형의 안정성을 위해 제네릭스(Generics)라는 개념이 도입되었는데,  ArrayLIst<String> list = new ArrayList<String>(); 이라고 되어 있다면 String객체들만 add 되어질 수 있고 다른 타입의 객체는 사용이 불가능하다.

 

제네닉과 관련된 내용은 추후에 포스팅할 예정이다.

 

 

 ArrayList 값 추가 

ArrayList<Integer> list = new ArrayList<Integer>();
list.add(3); //값 추가
list.add(null); //null값도 add가능
list.add(1,10); //index 1에 10 삽입
ArrayList<Student> members = new ArrayList<Student>();
Student student = new Student(name,age);
members.add(student);
members.add(new Member("홍길동",15));

ArrayList에 값을 추가하려면 ArrayList의 add(index, value) 메소드를 사용하면 된다. index를 생략하면 ArrayList 맨 뒤에 데이터가 추가되며 index중간에 값을 추가하면 해당 인덱스부터 마지막 인덱스까지 모두 1씩 뒤로 밀려난다. 

 

 

 ArrayList 값 삭제 

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
list.remove(1);  //index 1 제거
list.clear();  //모든 값 제거

ArrayList에 값을 제거하려면 ArrayList의 remove(index) 메소드를 사용하면 된다. remove()함수를 사용하여 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨지는데, 모든 값을 제거하려면 clear() 메소드를 사용하면 된다.

 

 ArrayList 크기 구하기 

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.size()); //list 크기 : 3

ArrayList의 크기를 구하려면 ArrayList의 size() 메소드를 사용하면 된다.

 

 ArrayList 값 출력 

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));

System.out.println(list.get(0));//0번째 index 출력
		
for(Integer i : list) { //for문을 통한 전체출력
    System.out.println(i);
}

Iterator iter = list.iterator(); //Iterator 선언 
while(iter.hasNext()){//다음값이 있는지 체크
    System.out.println(iter.next()); //값 출력
}

ArrayList의 get(index) 메소드를 사용하면 ArrayList의 원하는 index의 값이 리턴된다. 전체출력은 대부분 for문을 통해서 출력을하고 Iterator를 사용해서 출력을 할 수도 있다.

 

 ArrayList 값 검색 

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(1,2,3));
System.out.println(list.contains(1)); //list에 1이 있는지 검색 : true
System.out.println(list.indexOf(1)); //1이 있는 index반환 없으면 -1

ArrayList에서 찾고자 하는 값을 검색하려면 ArrayList의 contains(value) 메소드를 사용하면 된다. 만약 값이 있다면 true가 리턴되고 값이 없다면 false가 리턴된다. 값을 있는 index를 찾으려면 indexOf(value) 메소드를 사용하면 되고, 만약 값이 없다면 -1을 리턴한다.

 

 

[출처] https://coding-factory.tistory.com/551

 

[Java] 자바 ArrayList 사용법 & 예제 총정리

ArrayList란? ArrayList는 List 인터페이스를 상속받은 클래스로 크기가 가변적으로 변하는 선형리스트입니다. 일반적인 배열과 같은 순차리스트이며 인덱스로 내부의 객체를 관리한다는점등이 유

coding-factory.tistory.com

 

'JAVA' 카테고리의 다른 글

자바_Linked List  (0) 2022.02.24
자바_제네릭(Generic)  (0) 2022.02.23
자바_커피 머신 구현  (0) 2022.02.22
자바 기초(상속_다형성)  (0) 2022.02.21
자바 기초(상속)  (0) 2022.02.21