본문으로 바로가기

Collections Framework

category onYouTube/Java 2021. 3. 27. 21:34

ArrayList

  • 크기를 선언하지 않아도 됨
  • java.util.ArrayList를 import 해야 함
  • add( )로 데이터를 추가함
  • size( )로 크기를 알 수 있음
  • get( )으로 데이터에 접근할 수 있음
ArrayList al = new ArrayList();


al.add("one");
al.add("two");
al.add("three");


for (int i = 0; i < al.size(); i++) {

	String value = al.get(i);
	System.out.println(value); // 에러
	// add()는 어떠한 타입도 수용해야 하기 때문에 매개변수의 데이터 타입은 Object임
	// 따라서, 추가된 데이터는 Object 타입인데, value는 String 타입이므로 에러가 발생함
	// String value = (String)al.get(i)로 형변환을 하거나, 처음에 제네릭을 통해 String으로 지정해주면 됨
}

 

Collections Framework

     : 컬렉션 + 맵

 

  • 데이터의 중복 가능 여부에 따라 list와 set 중에 선택하면 됨
  • list는 순서가 보장되고, 중복이 허용됨
  • set은 순서가 보장되지 않고, 중복을 허용하지 않음
  • map은 (key, value)의 저장 형식을 가짐

 

  • contatinsAll( ) : 부분집합
  • addAll( ) : 합집합
  • retainAll( ) : 교집합
  • removeAll( ) : 차집합
import java.util.ArrayList;
import java.util.HashSet;
 
import java.util.Iterator;
 

public class SetDemo {
 
    public static void main(String[] args) {
    
        HashSet<Integer> A = new HashSet<Integer>();
        
        A.add(1);
        A.add(2);
        A.add(3);
         
        HashSet<Integer> B = new HashSet<Integer>();
        
        B.add(3);
        B.add(4);
        B.add(5);
         
        HashSet<Integer> C = new HashSet<Integer>();
        
        C.add(1);
        C.add(2);
         
        System.out.println(A.containsAll(B)); // false
        System.out.println(A.containsAll(C)); // true
}

 

Iterator

     : 반복자

 

import java.util.HashSet;
import java.tuil.Iterator;



public class SetDemo {

	public static void main(String[] args) {

		HashSet<Integer> A = new HashSet<Integer>();
    
		A.add(1);
		A.add(2);
		A.add(3);

		Iterator hi = A.iterator();
		// A를 복제한 hi 인스턴스가 생김
    
    
		while (hi.hasNext()) {
    
			System.out.println(hi.next());
			// 값이 출력되고, 출력된 값은 사라짐
		}
}

 

  • Collection의 메소드이기 때문에, 리스트에서도 사용할 수 있음
import java.util.ArrayList;
import java.tuil.Iterator;



public class SetDemo {

	public static void main(String[] args) {

		ArrayList<Integer> A = new ArrayList<Integer>();
		// ArrayList에서도 사용할 수 있음
    
		A.add(1);
		A.add(2);
		A.add(3);

		Iterator hi = A.iterator();
    
    
		while (hi.hasNext()) {
    
			System.out.println(hi.next());
		}
}
import java.util.Collection;
import java.util.ArrayList;
import java.tuil.Iterator;



public class SetDemo {

	public static void main(String[] args) {

		Collection<Integer> A = new ArrayList<Integer>();
		// Collection으로도 가능함
		// Collection<Integer> A = new HashSet<Integer>(); 도 가능함
    
		A.add(1);
		A.add(2);
		A.add(3);

		Iterator hi = A.iterator();
    
    
		while (hi.hasNext()) {
    
			System.out.println(hi.next());
		}
}

 

  • map의 key는 중복이 안되지만, value는 중복이 가능함
  • 이미 있는 key에 value를 대입하면, key는 그대로이고 value만 갱신됨
  • put( , ) : map에 데이터를 추가
public static void main(String[] args) {

	HashMap<String, Integer> a = new HashMap<String, Integer>();

	a.put("one", 1);
	a.put("two", 2);
	// put()은 map에서만 사용할 수 있음
}

 

 

< Map의 출력 방법 >

 

 ① getKey( ), getValue( )

  • getKey( ) : map에서 key를 출력함
  • getValue( ) : map에서 value를 출력함
  • map은 iteration 기능이 없기 때문에, set으로 만든 후 출력
static void iteratorUsingForEach(HashMap map) {

	Set<Map.Entry<String, Integer>> entries = map.entrySet();


	for (Map.Entry<String, Integer> entry : entries) {

		(System.out.println(entry.getKey() + " : " + entry.getValue());
	}
}

 

 ② 반복자 iterator

static void iteratorUsingIterator(HashMap map) {

	Set<Map.Entry<String, Integer>> entries = map.entrySet();
    
	Iterator<Map.Entry<String, Integer>>i = entries.iterator();
    
    
	while (i hasNext()) {
    
		Map.Entry<String, Integer> entry = i.next();
		System.out.println(entry.getKey() + " : " + entry.getValue());
	}
}

 

 

< Collections의 사용법과 정렬 >

 

  • ArrayList에 추가한 순서대로 출력됨
  • Comparable 인터페이스로 정렬함
  • Collections 클래스는 데이터와 관련된 작업을 처리할 수 있도록 해주는 클래스
  • Collections 클래스 안의 메소드들은 전부 static이기 때문에 인스턴스를 만들지 않아도 됨
import java.util.*;



class Computer implements Comparable {

	int serial;
	String owner;
    
    
	Computer(int serial, String owner) {
    
		this.serial = serial;
		this.owner = owner;
	}


	public int compareTo(Object o) {
    
		return this.serial - ((Computer)o).serial;
		// a.compareTo(b)는 (a.serial - b.serial)을 반환
		// 반환 타입이 int이기 때문에 양수, 0, 음수가 가능함
	}
	// Comparable 인터페이스는 compareTo 메소드를 구현하도록 강제함


	public String toString() {
    
		return serial + " " + owner;
	}
}



public class CollectionsDemo {
     
    public static void main(String[] args) {
    
        List<Computer> computers = new ArrayList<Computer>();
        // List 타입을 정렬하려면 List의 각각의 객체들이 Comparable 인터페이스를 구현하고 있어야 함
        
        computers.add(new Computer(500, "egoing"));
        computers.add(new Computer(200, "leezche"));
        computers.add(new Computer(3233, "graphittie"));
        
        Iterator i = computers.iterator();
        
        System.out.println("before");
        
        
        while(i.hasNext()) {
        
            System.out.println(i.next());
        }
        
        
        Collections.sort(computers);
        // 정렬
        
        System.out.println("\nafter");
        
        i = computers.iterator();
        
        
        while(i.hasNext()) {
        
            System.out.println(i.next());
        }
    }
 
}

'onYouTube > Java' 카테고리의 다른 글

제네릭  (0) 2021.03.27
참조  (0) 2021.03.27
상수와 enum  (0) 2021.03.27
Object 클래스  (0) 2021.03.26
예외  (0) 2021.03.26