day25_2 - JAVA (자바, Collection)
[배열의 단점]
-> 저장할 수 있는 객체 수가 배열을 생성할때 정해야 하는 배열의 문제점
-> 불특정 다수의 객체를 저장하기에 배열은 문제가 있다.
-> 객체를 삭제했을 때 해당 인덱스가 비게 된다.
-> 객체를 저장하려면 어디가 비었는지 확인해야 하는 불편함
[컬렉션 프레임워크]
컬렉션: 사전적 의미로 요소(객체)를 수집해 저장하는 것
-> 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리
-> java.util 패키지에 포함됨
-> 인터페이스를 통해서 정형화된 다양한 컬렉션 클래스를 이용
[List 컬렉션]
-> 인덱스로 관리한다.
-> 중복으로 객체 저장 가능
[구현 클래스]
->ArrayList
-> Vector
-> LinkedList 등
[List 컬렉션 주요 메서드]
[ArrayList]
-> 초기 용량: 10 (따로 지정 가능)
[Vector]
-> Vector는 스레드 동기화에 주로 사용
-> 복수의 스레드가 동시에 Vector에 접근해 객체를 추가, 삭제하더라도 스레드에 안전
[LinkedList]
Set 컬렉션의 특징 및 주요 메서드
특징
-> 수학의 집합에 비유
-> 저장 순서가 유지되지 않음
-> 객체를 중복 저장 불가
-> 하나의 null만 저장 가능
[HashSet]
[Map]
map 주요 메소드
[컬렉션 ArrayList ex]
package javaPro.java_collection;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class ListEx1 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(5);
list.add(4);
list.add(0);
list.add(0);
System.out.println(list);
for(int i = 0; i < list.size(); i++){
System.out.println(i + ":" + list.get(i));
}
//list.subLine(1,4) : list 객체의 1번 인덱스부터 3번 인덱스까지 부분 리스트로 리턴
List<Integer> list2 = new ArrayList<Integer>(list.subList(1,4));
System.out.println(list2);
//list2를 정렬
//Collections : Collection 프레임워크에 관련된 추가 기능을 멤버로 가진 클래스
Collections.sort(list2);//list2 list 객체를 정렬
System.out.println(list2);
}
}
[컬렉션 Vector ex]
package javaPro.java_collection;
import java.util.List;
import java.util.Vector;
/*
* Vector 예제 : Collection 프레임워크 이전에 사용되던 클래스.
* List 의 구현 클래스
* list.addElement(5.0); //Vector의 추가기능 메서드. add 와 같은 기능
*/
public class ListEx2 {
public static void main(String[] args) {
//List list = new Vector(); // <> 생략 가능
List<Double> list = new Vector<Double>();
list.add(0.3);
list.add(Math.PI);
//list.addElement(5.0); // Vector의 추가기능 메서드 -> add 와 같은 기능
list.add(5.0);
for(Object o : list){
System.out.println(o);
}
System.out.println("1: " + list);
double num = 0.5;
int index = list.indexOf(num);
if(index >=0)
System.out.println(num + "의 위치:" + index);
else
System.out.println(num + "은 List에 없습니다.");
num = 0.3;
System.out.println(list.indexOf(num)); // 0
System.out.println(list.indexOf(5.0)); // 2
if(list.contains(num)){ // list 의 요소중 0.3인 데이터가 존재하는지 묻는 구문
list.remove(num); // 삭제
System.out.println(num + "삭제됨.");
}
System.out.println("2: " + list);
System.out.println(list.indexOf(num));//-1
System.out.println(list.indexOf(5.0)); //1
System.out.println(list);
}
}
-> Vector는 ArrayList와 기능은 거의 비슷하고 약간의 메서드 차이가 있다.
-> Vector는 스레드 관련해서 자주 사용하는 메서드이다.