KIC/JAVA

day25_2 - JAVA (자바, Collection)

바차 2021. 7. 19. 15:57
반응형

 

 

[배열의 단점]

-> 저장할 수 있는 객체 수가 배열을 생성할때 정해야 하는 배열의 문제점

-> 불특정 다수의 객체를 저장하기에 배열은 문제가 있다.

-> 객체를 삭제했을 때 해당 인덱스가 비게 된다.

-> 객체를 저장하려면 어디가 비었는지 확인해야 하는 불편함

 

 

 

 

 

[컬렉션 프레임워크]

컬렉션: 사전적 의미로 요소(객체)를 수집해 저장하는 것

 

-> 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 제공되는 컬렉션 라이브러리

-> 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는 스레드 관련해서 자주 사용하는 메서드이다.

 

 

 

 

 

300x250