컬렉션
- 사전적 의미로 요소(객체)를 수집해 저장하는 것
배열의 문제점
- 저장할 수 있는 객체 수가 배열을 생성할 때 결정
-> 불특정 다수의 객체를 저장하기에는 문제
- 객체 삭제했을 때 해당 인덱스가 비게 됨
-> 낱알 빠진 옥수수 같은 배열
-> 객체를 저장하려면 어디가 비어있는지 확인해야 함
ex)
0 | 1 | 3 | 5 | 7 | 8 |
컬렉션 프레임워크 인터페이스
List 컬랙션
기능 | 메소드 | 설명 |
객체 추가 | boolean add(E e) | 주어진 객체를 맨끝에 추가 |
void add(int index, E element) | 주어진 인덱스에 객체를 추가 | |
set(int index, E element) | 주어진 인덱스에 저장된 객체로 바꿈 | |
객체 검색 | boolean contains(Object o) | 주어진 객체가 저장되어 있는지 여부 |
E get(int index) | 주어진 인덱스에 저장된 객체를 리턴 | |
int size() | 저장되어 있는 전체 객체수를 리턴 | |
객체 삭제 | void clear() | 저장된 모든 객체를 삭제 |
E remove(int index) | 주어진 인덱스에 저장된 객체를 삭제 | |
boolean remove(Object o) | 주어진 객체를 삭제 |
ArryList
- 저장 용량
초기 용량 : 10
저장 용량을 초과한 객체들이 들어오면 자동적으로 늘어남, 고정시킬 수도 있습니다.
- 객체 제거
바로 뒤 인덱스부터 마지막 인덱스까지 모두 앞으로 1씩 당겨짐
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class JavaEx28 {
public static void main(String[] args) {
String[] strArr = { "김밥", "컵라면", "도시락", "핫도그", "치킨조각", "우유", "컵밥", "음료수" };
// List<String> list = Arrays.asList(strArr);
List<String> list = new ArrayList<>();
list.addAll(Arrays.asList(strArr));
// 전체 요소 삭제
// list.clear();
list.add("컵밥");
// 일부 요소들 삭제 - 중복이있어도 중복 전부 삭제
list.removeAll(Arrays.asList("컵밥","김밥"));
// 개별 요소 삭제
list.remove("컵밥");
// 중복 요소가 있어도 한개만 삭제
System.out.println("리스트 크기 : " + list.size());
list.forEach(x -> System.out.print(x + " "));
}
}
ArrayLIst 는 List 인터페이스의 구현 클래스로, ArrayList에 객체를 추가하면 객체가 인덱스로 관리됩니다.
일반 배열과 ArrayList는 인덱스로 객체를 관리한다는 점에서 유사하지만 큰 차이점을 가지고 있습니다.
배열은 생성할 때 크기가 고정되고 사용 중에 크기를 변경할 수 없지만, ArrayList는 저장 용량을 초과한 객체들이 들어오면 자동으로 저장용량이 늘어나는 것입니다.
List<String> list = new ArrayList<String>();
// String 을 저장하는 ArrayList 생성
기본 생성자 ArrayList 객체를 생성하면 자동으로 초기 용량 10개를 가지게 됩니다. 여기에 객체 수를 넣으면 자동으로 증가하고 처음부터 용량 크기를 크게 잡고 싶다면 용량의 크기를 매개 값으로 받는 생성자를 이용하면 됩니다.
List<String> list = new ArrayList<String>(30);
- new ArrayList<String>(30) 30은 String객체 30개를 저장할 수 있는 용량을 가짐
객체는 0부터 차례대로 저장되고 1.2.3.4.5.6 에서 3을 제거하면 자동으로 숫자가 당겨져 1.2.3.4.5 가됨
따라서 빈번한 객체 삭제와 삽입이 일어나는 곳에서는 ArrayList를 사용하는 것은 좋지 않습니다.
간단히 넣고 삭제 하기 코드
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Ex {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
// String 객체를 저장한다.
// 배열은 0부터시작
// ex) 0.java 1.JDBC....
list.add("Java");
list.add("JDBC");
list.add("Servlet/JSP");
list.add(2, "Database");
list.add("iBATIS");
int size = list.size();
System.out.println("총 객체수 : " + size);
// 객체수는 5개가 나옴
String skill = list.get(2);
// 2번 인덱스의 객체 얻기
System.out.println("2: " + skill);
// list.add(2, "DAtabase"); = Dayabase출력
//저장된 총 객체수 만큼 루핑
for(int i=0; i<list.size(); i++) {
String str = list.get(i);
System.out.println(1 + ":" + str);
// 0.JAVA 1.JDBC 2.Database 3.Servlet/Jsp
// 4. iBATIS 출력됨
}
list.remove(2); // 2번 인덱스 객체 Database 삭제됨
list.remove(2); // 자동으로 밀리면서 servlet/JSP 객체 삭제
list.remove("iBATIS"); // iBATIS 객체 삭제
for(int i=0; i<list.size(); i++) {
String str = list.get(i);
System.out.println(1 + ":" + str);
// 0.JAVA 1.JDBC 출력됨
}
}
}
고정된 객체들로 구성된 List를 생성
import java.util.Arrays;
import java.util.List;
public class Ex2 {
public static void main(String[] args) {
List<String> list = Arrays.asList("홍길동","홍길순","홍당무");
// 3개의 String객체를 가지는 list 생성
for(String name : list) {
// 향상된 for문을 이용하여 list 를 출력하게함
System.out.println(name);
// 홍길동 홍길순 홍당무 출력됨
}
List<Integer> list1 = Arrays.asList(1, 2 ,3);
// 3개의 Integer객체를 가지는 list 생성
for(int value : list1) {
System.out.println(value);
// 1,2,3 출력됩니다.
}
}
}
정방향 역방향 오름 차순 내림 차순 출력연습용
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
public class JavaEx26 {
public static void main(String[] args) {
// 옛날 방식
// List list = new ArrayList();
// List<Object> list = new ArrayList<Object>();
// 제네릭 방식
// List<int> list = new ArrayList(); //(x)
// List<Integer> list = new ArrayList<Integer>();
// Integer intArr[] = new Integer[10];
// int intArr[] = new int[10];
List<Integer> list = new ArrayList<>(); // (o)
// List<> list = new ArratList<>(); // (x)
// List<> list = new ArrayList<Integer>(); // (x)
// ArrayList<Integer> list = new ArrayList<>();
// E -> Integer : 요소
// 요소 제한 => Integer + 처리 성능 강화
// list.add("1"); // (x)
// list.add((int)'c'); //(o)
// list.add(new Integer("1")); // (o)
// list.add(Integer.parseInt("1")); // (0)
list.add(1); // (0)
// 집체요소 추가
// 제너릭스 (제너릭) : Generics : 자료형의 인자화
// ex) T ... a : 가변인가(varargs)
// 자료형의 인자화를 통해 무슨 자료를 사용하는지 가르쳐줌
// list.addAll(Arrays.asList(1,2,3,4,5,6,7));
// list.addAll(Arrays.asList(1,2,3));
list.addAll(Arrays.asList(new Integer[] {1,2,3}));
// 배열로 변환해줄때 new int (x) new Integer[] (o)
// int 배열 => Integer 배열 (auto-baxing 정용이 안됨)
// 개별요소 int => Integer (auto-baxing 적용)
// 개별 요소 조회
System.out.println("첫번째 요소 : " + list.get(0));
System.out.println("마지막 요소 : " + list.get(list.size()-1));
System.out.println("===============");
// 전체/집체 나열(조회)
for(int i =0; i<list.size(); i++) {
System.out.print(list.get(i) +" ");
System.out.println();
}
System.out.println("=============");
for(int n : list) { // Integer이 정확하게는 맞지만 int도 호환해줌
System.out.println(n + " ");
}
System.out.println("=============");
// 정방향
Iterator<Integer> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next() + " ");
}
System.out.println("=============");
// 역순(reverse) 나열
ListIterator<Integer> lit = list.listIterator(list.size());
while(lit.hasPrevious()) {
System.out.println(lit.previous() + " ");
}
System.out.println("=============");
// 일부분 추출 나열
for(int n : list.subList(1, 4)) {
// index 1~3
// 주의) 마지막 인자(index)는 제외(exclusive)
System.out.println(n + " ");
}
System.out.println("=============");
}
}
'JAVA' 카테고리의 다른 글
컬렉션 프레임워크 LinkedList (0) | 2022.05.30 |
---|---|
컬렉션 프레임워크 Vector (0) | 2022.05.30 |
예외 처리 (0) | 2022.05.26 |
인터페이스 (default method) (0) | 2022.05.25 |
2022년 5월 25일 수업중 과제 : 계산기 프로그램 (0) | 2022.05.25 |