일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 인터페이스
- java
- File입출력
- array
- JSP
- ToString
- StringBuffer클래스
- 객체
- 예외처리
- Connection
- 상속
- 배열
- 입출력
- 제어자
- I/O
- Interface
- 예외
- try-catch
- 에러
- 람다식
- StringBuffer
- 객체지향
- 변수
- 접근제어자
- DB
- for문
- 다형성
- 커넥션 풀
- 내장 객체 영역
- 메서드
- Today
- Total
ksouth9
List 컬렉션 본문
List 컬렉션
Lsit 컬렉션은 객체를 일렬로 늘어놓은 구조를 가지고 있다. 객체를 인덱스로 관리하기 때문에 객체를 저장하면 자동 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공한다. List컬렉션은 객체 자체를 저장하는 것이 아니라 객체의 번지를 참조한다. 동일한 객체를 중복 저장할 수 있는데, 이 경우 동일한 번지가 참조된다.
List 컬렉션에서 공통적으로 사용 가능한 List 인터페이스의 메소드들이다.
기능 | 메소드 | 설명 |
객체추가 | boolean add(E e) | 주어진 객체를 맨 끝에 추가 |
void add(int index, E element) | 주어진 인덱스에 객체를 추가 | |
E set(int index, E element) | 주어진 인덱스에 저장된 객체를 주어진 객체로바꿈 |
기능 | 메소드 | 설명 |
객체검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
boolean isEmpty() | 컬렉션이 비어 있는지 조사 | |
int size() | 저장되어 있는 전체 객체 수를 리턴 |
기능 | 메소드 | 설명 |
객체삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
boolean remove(Object o) | 주어진 객체를 삭제 |
List 컬렉션에는 ArrayList, Vector,LinkedList가 있다.
ArrayList
ArrayList는 List 인터페이스의 구현 클래스로, ArrayList에 객체를 추가하면 객체가 인덱스로 관리된다.
- ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동적으로 저장 용량이 늘어난다.(동적)
- ArrayList는 모든 종류의 객체를 저장할 수 있다.(객체가 저장될 때 Object 타입으로 변환되어 저장되기 때문)
- 모든 종류의 객체를 저장할 수 있지만, 찾아올 때는 원래 타입으로 변환해야 한다.
- 인덱스 0부터 저장되며, 특정 인덱스의 객체를 제거하면 바로 뒤 인덱스부터 모두 앞으로 1씩 당겨진다.
생성 방법
List list = new ArrayList();
import java.util.ArrayList;
import java.util.List;
public class ArrayListExample {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("Java"); //String 객체를 저장
list.add("JDBC");
list.add("Servlet/JSP");
list.add(2,"Database"); //2번 인덱스에 Database 저장(JDBC 삭제됨)
list.add("iBATIS");
int size = list.size(); //저장된 총 객체 수 얻기
System.out.println("총 객체수 : "+size);
System.out.println();
String skill = list.get(2); //2번 인덱스의 객체 얻기
System.out.println("2 : "+skill);
System.out.println();
for(int i=0;i<list.size();i++) { //저장된 총 객체 수만큼 루핑
String str = list.get(i);
System.out.println(i +":"+ str);
}
System.out.println();
list.remove(2); //2번 인덱스 객체(Database) 삭제됨
list.remove(2); //2번 인덱스 객체(Servlet/JSP) 삭제됨
list.remove("iBATIS");
for(int i=0;i<list.size();i++) {
String str = list.get(i);
System.out.println(i+":"+str);
}
}
}
Vector
Vector는 배열과 같이 여러 데이터를 다루는 데 유용한 자료 구조이다.
- 배열의 크기를 알아서 관리해준다.
- 객체의 삽입, 삭제, 이동이 쉽다.
- 데이터를 저장한 순서를 기억한다. (순서대로 저장)
- 데이터 중복 저장을 허용한다.
- 여러 타입의 데이터들을 저장할 수 있다.
- 기본형 데이터는 저장할 수 없다.
메서드/생성자 | 설명 |
Vector() | 10개의 객체를 저장할 수 있는 Vector인스턴스를 생성한다. 10개 이상의 인스턴스가 저장되면, 자동적으로 크기가 증가된다. |
boolean add(Object o) | Vector에 객체를 추가한다. 추가에 성공하면 결과값으로 true, 실패하면 false를 반환한다. |
boolean remove(Object o) | Vector에 저장되어 있는 객체를 제거한다. 제거에 성공하면 true, 실패하면 false를 반환한다. |
boolean isEmpty() | Vector가 비어있는지 검사한다. 비어있으면 true, 비어있지 않으면 false를 반환한다. |
Object get(int index) | 지정된 위치(index)의 객체를 반환한다. 반환타입이 Object타입이므로 적절한 타입으로 형변환이 필요하다. |
int size() | Vector에 저장된 객체의 개수를 반환한다. |
생성방법
Vector 변수이름 = new Vector();
여러 타입의 데이터를 저장하기 위해서는 제네릭<E>(E(element))를 붙이지 않고 Vector를 사용하면 된다.
제네릭 타입을 사용하지 않으면 자동으로 타입이 변경된다.
import java.util.*;
public class VectorExample {
public static void main(String[] args) {
Vector<String> v = new Vector<String>(5,2); //초기 용량 5개, 데이터가 5개가 넘어가면 2개씩 증가됨
v.add("가"); //0
v.add("나"); //1
v.add("다"); //2
v.add("라"); //3
v.add("마"); //4
v.remove(2);
v.remove(3);
System.out.println(v.get(0));
System.out.println(v.get(1));
System.out.println(v.get(2));
}
}//실행결과
가
나
라
String타입으로 정의 했기 때문에 다른 타입의 데이터는 예외발생.
2번 인덱스 객체("다"), 3번 인덱스 객체("라") 삭제, 뒤의 인덱스는 1씩 앞으로 당겨진다.
객체 유형을 Vector에 담는 방법
import java.util.*;
class Book {
String title;
int price;
Book(String title, int price){
this.title = title;
this.price = price;
}
}
public class VectorExample {
public static void main(String[] args) {
Vector<Book> v = new Vector<Book>();
Book book1 = new Book("이것이 자바다",15000);
Book book2 = new Book("Java의 정석",15000);
Book book3 = new Book("Java입문",15000);
v.add(book1);
v.add(book2);
v.add(book3);
for(int i=0;i<v.size();i++) {
System.out.print("제목 : "+ v.get(i).title);
System.out.println(" 가격 : "+ v.get(i).price);
}
}
}//실행결과
제목 : 이것이 자바다 가격 : 15000
제목 : Java의 정석 가격 : 15000
제목 : Java입문 가격 : 15000
LinkedList
LinkedList는 List 구현 클래스이다. ArrayList와 사용 방법은 똑같지만 내부 구조는 완전 다르다. ArrayList는 내부 배열에 객체를 저장해서 인덱스로 관리하지만, LinkedList는 인접 참조를 링크해서 체인처럼 관리한다. LinkedList에서 특정 인덱스의 객체를 제거하면 앞뒤 링크만 변경되고 나머지 링크는 변경되지 않는다. ArrayList는 제거되는 인덱스를 기준으로 뒤에 있는 객체가 한칸씩 이동했던 점과 차이가 있다. 이러한 차이로 인해서 객체를 삽입, 삭제하는 로직에 있어서 ArrayList보다 LinkedList를 사용할 때 좋은 성능이 나온다.
생성방법
List<E> list = new LinkedList<E>();
'Java' 카테고리의 다른 글
객체지향언어(16) - 인터페이스(interface)(1) (0) | 2022.03.16 |
---|---|
객체지향언어(16) - 추상클래스 (2) | 2022.03.16 |
객체지향언어(15) - 다형성(2) (0) | 2022.03.11 |
객체지향언어(15) - 다형성(1) (4) | 2022.03.10 |
객체지향언어(14) - 접근 제어자(access modifier) (0) | 2022.03.10 |