본문 바로가기
프로그래밍/Java

[JAVA 이론] List Collection

by purplebulb 2018. 11. 13.
반응형


1. 구조 및 특징


(1) 구조 : 객체를 일렬로 늘어놓음


(2) 특징 


① 인덱스로 객체 관리

- 객체 저장시 자동으로 인덱스 부여

- 객체 자체를 저장하지 않고 객체의 번지를 참조

- 인덱스로 객체 검색 및 삭제


② 제네릭 타입

- 메소드의 매개 변수 타입 및 리턴 타입은 구현 객체를 생성할 때 결정

 (* generics : 정해진 타입을 넣고 빼기 위해 객체를 넣을 때 타입을 지정)




2. List 인터페이스 메소드

- 특징 : 인덱스로 객체를 관리하기 때문에 인덱스가 매개값인 메소드 다수 


 기능

메소드 

메소드 설명 

예시 

 객체 추가

 add( )

 객체를 맨 끝에 추가

list.add("abc") 

 add(int index, E)

 인덱스에 객체 추가

list.add(3, "abc") 

 set(int index, E)

 인덱스에 저장된 객체를 주어진 객체로 변경

 

 객체 검색

 contains(Object)

 객체 저장 여부 

 

 get(int index) 

 인덱스에 저장된 객체 리턴

 list.get(3)

 isEmpty( )

 컬렉션이 비어있는지 조사

 

 int size( )

 저장되어 있는 전체 객체 수 리턴

 

 객체 삭제

 clear( )

 저장된 모든 객체 삭제

 

 remove(int index)

 인덱스에 저장된 객체 삭제

list.remove(3) 

 remove(Object)

 객체 삭제

list.remove("abc") 




3. List 인터페이스의 구현 클래스


(1) Arraylist


① 특징 

- 내부 배열에 객체를 저장, 인덱스로 관리

- 저장 용량을 초과하여 객체들이 들어와도 자동으로 저장 용량이 늘어남

- 객체 추가시 인덱스 0부터 차례대로 저장

- 특정 인덱스의 값을 제거하거나 삽입하면 인덱스 값 또한 인덱스 값이 1씩 당겨지거나 1씩 밀려남


② 사용법

- 인덱스 검색

- 맨 마지막에 객체를 추가하는 경우

  (* 참고 :  빈번한 객체 삽입과 삭제 발생시 ArrayList 사용 부적합)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 1. 컬렉션 생성
//(1) 기본 생성자 호출, 기본으로 10개의 객체를 저장할 수 있음
//(2) 용량의 크기를 매개값으로 받는 생성자 사용 가능
List<String> list = new ArrayList<String>();
List<String> list = new ArrayList<String>(30);
 
 
// 2. 객체 추가
list.add("JAVA")
list.add("JSP")
list.add("1,Database")
 
 
 
// 3. 객체 얻기
//(1) 저장된 총 객체 수 얻기 : list.size()
//(2) 인덱스의 객체 얻기
//(3) for문 사용 : 저장된 객체 수만큼 반복
//(4) 향상된 for문 사용 : list(변수명)에서 저장된 객체를 하나씩 가져옴, 저장된 객체 수만큼 반복
 
int size = list.size();
list.get(1);

for(int i = 0; i<list.size(); i++) {
    String str = list.get(i);
}

for(String str : list) {
}
 
 
//4. 객체 삭제
list.remove(2);
list.remove(2);
list.remove("JSP");
 




(2) LinkedList


① 특징 

- 인접 참조를 링크하여 체인처럼 관리 

- 특정 인덱스의 객체를 제거하거나 삽입할 때 제거한 객체의 앞뒤 링크만 변경, 나머지 링크는 변경되지 않음

- 처음 생성될 때 어떤 링크도 만들어지지 않으므로 내부는 비어있음



② 사용법

- 객체를 중간에 추가 또는 삭제할 경우 사용


1
2
3
// 1. 컬렉션 생성
List<String> list = new LinkedList<String>();







(3) Vector 


① 특징 

- Arraylist와 내부 구조 동일 (내부 배열에 객체를 저장, 인덱스로 관리)
- 동기화된 메소드로 구성되어 있음
- 하나의 스레드가 실행을 완료해야 다른 스레드 실행 가능, 따라서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제 할 수 있음



② 예제


[Information.java] 개인정보객체


1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class Inforamtion{
    String name;
    int number;
    String address;
 
 
 
public Information(String name, int number, String address{
    this.name = name;
    this.number = number;
    this.address = adress;
 
    }
}





[VectorExample.java] Information 객체를 저장하는 Vector


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
import java.util.*;
 
public class VectorExample{
    public static void main (String[] args){
 
        // 1.Vector 생성
        List<Information> list = new Vector<Information>();
 
        // 2.Information 객체 저장
        list.add(new Information("홍길동""01000000000""서울")
        list.add(new Information("김철수""01000000000""부산")
        list.add(new Information("김영수""01000000000""울산")
        list.add(new Information("이은수""01000000000""인천")
        list.add(new Information("김영희""01000000000""대전")
 
 
        // 3.객체 삭제 (김영수 삭제, 김영희 삭제)
        list.remove(2)
        list.remove(3)
 
 
        //4.객체 검색
        for(int i = 0; i<list.size(); i++) {
            Information info = list.get(i);
            System.out.println(info.name + "\t" + info.number + "\t" + info.address);
        }
 
}




댓글