ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 8일차 - 컬렉션 프레임워크
    프로그래밍 언어/자바(JAVA) 2024. 2. 1. 16:58

    자바 컬렉션 프레임워크 상속 구조

    Collection Framework

    자바의 Collection Interface 를 최상위로 하는 자료구조이다 Map의 경우 Collection 인터페이스를 상속받고 있지 않지만 Collection으로 분류된다

     

    자식 인터페이스(List, Set, Map)

    최상위 구현된 클래스 중복 순서 성능
    Collection List ArrayList O X LinkedList 보단 검색 시간이
    상대적으로 빠르다
    LinkedList 빈번한 객체 추가, 삭제할 때
    높은 효율
    Vector ArrayList 와 동일
    Set HashSet X X contains 의 성능은 O(1)으로
    탁월하다
    Map HashMap key: X
    value: O
    X  
    HashTable  
    Properites 자바 I/O 단계에서 이해가능함

    선언 시 크기를 지정하지 않고, 입력받은 크기에 따라서 늘어난다

    MAP을 제외한 List, Set 은 상위 인터페이스가 Collection 이므로 사용 메소드가 동일하다

    Collection 관련 메소드

    메소드 반환타입 설명
    add(E e) boolean (실패 성공) 입력한 요소를 컬렉션에 모두 추가한다
    addAll(Collection<?>) boolean (실패 성공) 입력받은 컬렉션의 모든 요소들을 컬렉션 객체에 모두 추가한다
    clear() void 컬렉션 객체의 모든 요소를 제거한다
    contains(Object) boolean (검색 결과) 컬렉션 객체의 요소들 중 포함되어 있는지의 여부를 반환한다
    equals(Object) boolean (비교 결과) 컬렉션 객체와 매개변수 Object의 동일한지 여부를 반환한다
    isEmpty() boolean 컬렉션 객체가 비어있는지 여부를 반환한다
    remove(Object) boolean (실패 성공) 컬렉션 객체 중 Object 와 동일한 요소를 제거한다
    size() int 컬렉션 객체의 요소 개수를 반환한다

     

    List

     

    ArrayList

    ■ <> 를 제너릭이라고 한다 안에 데이터 타입을 넣어, 어떤 데이터를 사용하는지 명시해줘야한다

    ■ 상위 인터페이스인 List 에 다형성에 의해서 ArrayList 가 들어갈 수 있다

    ■ 배열과 달리 공간의 크기를 할당하지 않아도 부족해지면 공간을 늘려준다

    public static void main(String[] args) {
    	// <> 를 제너릭 이라고 한다
    	// <> 안에 데이터 타입을 넣어서, 해당 클래스 안에서 어떤 데이터를 사용하는지 명시 해준다
    	// 단, 데이터 타입은 반드시 클래스 형태로 들어가야한다 int(x), Integer(O)
    	ArrayList<String> list = new ArrayList<String>();
    	
    	// 크기 지정이 가능하다
    	// 지정된 크기를 넘어서도 괜찮다
    	ArrayList<String> arr = new ArrayList<String>(10);
    	
    	// ArrayList 는 List 구현하는 클래스이므로, 다형성에 의해서 들어가는 것이다
    	// 다형성이란 부모 형태에 자식 객체가 들어가는 것을 말한다
    	List<Integer> list2 = new ArrayList<Integer>();
    	
    	arr.add("a"); 
        arr.add("c"); 
    	arr.set(1, "b"); 
    	System.out.println(arr); 
        // 배열이면 안에 있는 주소값을 보여주지만 컬렉션 프레임워크는 안에 저장된 값을 보여준다
        // > [a,b,c]
        arr.remove("a");
        System.out.println(arr); 
        // > [b,c]
    	
    }

     

    ArrayList 형변환

    캐스팅처럼 하진 않고, 바꾸는 방법이 따로 있다 아래에 설명 있음

    public static void main(String[] args) {
    	// array 를 리스트로 바꾸고 ArrayList 로 바꾸어줘야한다
    	String[] arr = {"List","Map","Set"};
        
    	// Array -> List 형변환
    	List<String> list = Arrays.asList(arr);
    	// Array 를 List 로 변환하고 나면 수정은 불가능하다
    	
    	// List -> ArrayList 형변환
    	ArrayList<String> arrList = new ArrayList<String>();
    	arrList.addAll(list); 
        // Collection 형태 객체를 넣으면 arrList 에 전체요소들을 추가한다
    	System.out.println(arrList);
        > [List, Map, Set]
    }

    Vector 

    ArrayList와 동일하지만 다수 유저의 동시 접근을 막는다

     

    Set

    HashSet

    ■ 요소들의 순서와 중복이 없다 중복되는 요소의 추가가 불가능하다

    ■ 동일한 클래스 객체를 추가해도 객체는 클래스의 복사본일뿐 서로 다른 일련번호를 가지고 있어 중복이 아니다

    ■ Set의 요소들을 Iterator로 하나씩 꺼내는 방법과 향상된 for 문으로 출력 할 수 있다

    public static void main(String[] args) {
    	// List, Set 은 Collection 인터페이스를 상속 받은 인터페이스로 구현되어있어서 사용 방법이 동일하다
    	HashSet<String> set = new HashSet<String>();
    	set.add("JAVA");
    	set.add("JSP");
    	set.add("MARIA");
    	set.add("SPRING");
    	set.add("JAVA"); // "JAVA" 중복임
    	System.out.println(set); 
    	// > [JAVA, SPRING, JSP, MARIA]
    	// 내부적으로 요소들의 순서는 없다
    	System.out.println(set + " : " + set.size());
    	
    	HashSet<Member> member = new HashSet<Member>();
    	// new 키워드는 클래스의 복사본이라
    	// 두 객체는 같지 않고, 복사본이기 때문에 다르다
    	// 두 객체의 내용이 같을 수는 있어도 객체의 주소값이 다르다
    	member.add(new Member());
    	member.add(new Member());
    	System.out.println(member);
    	System.out.println(member.size()); 
    	// > 2
    	// 요소 삭제
    	set.remove("MARIA");
    	
    	// Set의 요소를 하나씩 뽑아내는 방법 두가지
    	// 첫번째 방법 : Iterator 로 이용해
    	Iterator<String> iter = set.iterator(); 
    	// 한 덩어리(set) 을 쪼개 Iterator 로 만들었다
    	while (iter.hasNext()) { // 가져올 값이 있는지 (true/false)
    		System.out.println(iter.next()); 
    		// 쪼개진 조각을 하나씩 가져온다
    	}
    	// 두번째 방법 : 향상된 for 문
    	// set 을 넣으면 알아서 쪼개준다
    	for (String s : set) {
    		System.out.println(s);
    	}
    	
    }

    Map

    ■ Key의 값이 문자열로 되어있고, 순서나 중복이 없다

    ■ Map.Entry 는 키와 값의 쌍으로 이루어진 자료구조이다 getValue(), getKey() 로 키와 값을 반환해준다

    // HashMap 은 Map 인터페이스를 구현받기 때문에 Map 에 들어갈 수 있다(다형성)
    // 필드 다형성
    Map<String, Integer> map = new HashMap<String, Integer>();
    
    // 데이터 추가 put() 
    map.put("Kim", 23);
    map.put("Lee", 26);
    map.put("Park", 26); // Value 의 중복은 상관 없다
    map.put("Kim", 30); // Key 의 중복은 기존 Key의 Value 값을 덮어씌우기한다
    System.out.println(map);
    
    // 크기 알아보기
    System.out.println("map 의 크기 : " + map.size());
    
    // 단일 값 호출
    System.out.println("Lee의 값 : " + map.get("Lee"));
    
    // 삭제 (삭제 후 삭제한 값을 보여준다)
    map.remove("Lee");
    System.out.println(map);
    
    // 1. iterator 
    // map 에서 key 만 set 덩어리로 가져온다
    Set<String> keySet = map.keySet();
    // 하나씩 꺼낼 수 있도록 iterator 화 한다
    Iterator<String> iter = keySet.iterator();
    
    while (iter.hasNext()) {
    	String key = iter.next();
    	System.out.println(key + " : " + map.get(key));
    }
    // 2. 키를 이용해 값을 찾는다
    Set<Entry<String, Integer>> entrySet = map.entrySet();
    // 자르기 좋게 Iterator 화 한다
    Iterator<Entry<String, Integer>> iter = entrySet.iterator();
    // 꺼내온 Entry 로 부터 키와 값을 꺼낸다
    while(iter.hasNext()) {
    	// 엔트리에서 키와 값으로 분리시켜 놓는다
    	Entry<String, Integer> entry = iter.next();
    	System.out.println(entry.getKey() + " : " + entry.getValue());
    }

    '프로그래밍 언어 > 자바(JAVA)' 카테고리의 다른 글

    10일차 - Java I/O  (0) 2024.02.05
    9일차 - Iterator  (0) 2024.02.02
    8일차 - 예외, 에러  (0) 2024.02.01
    7일차 - String(스트링)  (0) 2024.01.31
    5일차 - 상속, 다형성  (0) 2024.01.29
Designed by Tistory.