본문 바로가기

JAVA

[JAVA] 컬렉션 프레임워크 (List, Set, Map)

반응형
컬렉션 프레임워크란? 
자바에서 데이터를 저장하는 클래스들을 표준화한 설계 구조를 말한다. (틀, 뼈대)

컬렉션 프레임워크를 사용의 장점 

  • 제작자의 편의성 증가 
  • 유지보수 용이
  • 제작자들의 실력이 상향평준화됨 

대표적인 인터페이스에 대해서 하기와 같이 정리해보았습니다. 

인터페이스 설명 특징 대표 구현 클래스
List 순서가 있는 데이터의 집합 데이터의 중복을 허용 ArrayList
LinkedList
Set 순서를 유지하지않는
데이터의 집합
데이터의 중복을
허용하지 않음
HashSet
LinkedHashSet
Map 키(key)와 값(value)의
쌍으로 이루어진 데이터 집합
순서유지X
키 중복 X
값 중복O
HashMap
LinkedHashMap
Properties

ArrayList 지원메서드 및 예시 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.ArrayList;
 
class A{
    int a;
    int b;
    A(int a, int b){
        this.a=a;
        this.b=b;
    }
    @Override
    public String toString() {
        return "A 클래스로 만든 객체";
    }
}
public class Test01 {
    public static void main(String[] args) {
        // 컬렉션 프레임워크 
        //[ArrayList] 
 
        //자료형도 모르고 요소의 개수도 모름 
        ArrayList al = new ArrayList();
        System.out.println(al);
        //toString이 오버라이딩 되어진 상태 
 
        al.add(10);
        al.add(20);
        al.add(0,30);
        System.out.println(al);
        
        System.out.println(al.get(1)); // 요소를 가져와서 직접 출력 
        System.out.println(al.get(0));
 
        System.out.println(al.isEmpty()); // 배열이 비어있나요? 물어보는것
 
        System.out.println(al.size()); //사이즈 
        al.remove(1); //첫번째 인덱스 삭제 
        
        al.clear(); // 배열안에 비워줌 
 
        System.out.println(new A(1,2)); 
// 클래스 A의 값 tostring 오버라이딩으로 출력
    }
}
cs
제네릭(Generic)
컬렉션에 저장될 데이터의 타입(자료형)을 강제로 정하겠다는 뜻

클래스나 메소드에서 사용하는 필드나 매개변수의 자료형을 호출하는 쪽에서 지정하는 기능

사용목적? 

  • 코드 중복의 방지와 프로그램 작성이 유연해진다. 
  • 컴파일 중에 타입 검증을 강화하여 프로그램의 안정성을 높이거나 불필요한 형변환을 제거하는 목적으로 사용한다. 
 
컬렉션프레임워크클래스<타입> 객체명 = new 컬렉션프레임워크클래스<타입>();

 제네릭 사용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.ArrayList;
 
class Person{
    String name;
    int point;
    void use() {
        this.point--;
        System.out.println(this.name+"님 출력중...");
    }
    Person(String name,int point){
        this.name=name;
        this.point=point;
    }
    @Override
    public String toString() {
        return "Person [name=" + name + ", point=" + point + "]";
    }
}
public class Test03 {
    public static void main(String[] args) {
 
        ArrayList<Person> data=new ArrayList<Person>(); 
//integer뿐만 아니라 person같이 클래스도 사용가능 
        data.add(new Person("홍길동",1000));
        data.add(new Person("아무무",2000));
 
        for(int i=0;i<data.size();i++) {
            // data.get(i) == Person 객체
            data.get(i).use();
        }
        System.out.println(data);
    }
}
cs

set집합 사용 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.HashSet;
import java.util.Set;
 
public class Test05 {
    public static void main(String[] args) {
        
        // set 집합 
        // :  중복된 데이터를 허용xxx / 중복된 것은 저장자체를 안한다.
        // : 순서xxx
        
        Set s =new HashSet(); // 내가 집합을 만들고 싶은데 그중에 HashSet을 쓸거야 
        Set<Integer> a =new HashSet<Integer>();
        s.add(10);
        s.add(10);
        s.add(10);
        s.add(20);
        s.add(20);
        s.add(1);
        s.add(2);
        s.add(3);
        s.add(4);
        s.add(5);
        System.out.println(s);    
    }
}
 
cs

set집합은 중복을 허용하지 않고 저장자체를 하지않고 순서도 없기때문에 

상기 코드를 출력하게되면 하기와 같이 나온다 

[1, 2, 3, 20, 4, 5, 10]

<set사용 활용문제> 
set을 사용하여 중복이 안되도록 1~10까지 랜덤으로 7개의 수를 생성하여라
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package class01;
 
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
 
public class Test06 {
    public static void main(String[] args) {
        
        //문제 : set을 사용하여 중복이 안되도록 1~10까지 랜덤으로 7개의 수를 생성하여라 
        
        Random r=new Random(); // 랜덤 생성
        Set<Integer> set=new HashSet<Integer>(); // Set선언 
        while(set.size()<7) { // 7개
            int num=r.nextInt(10)+1; //1~10까지 랜덤
            set.add(num);
        }
        System.out.println(set);
    }
}
cs
HashMap
HashMap은 Map 인터페이스를 구현한 대표적인 Map 컬렉션입니다.
Map 인터페이스를 상속하고 있기에 Map의 성질을 그대로 가지고 있습니다.
Map은 키와 값으로 구성된 Entry객체를 저장하는 구조를 가지고 있는 자료구조입니다.
여기서 키와 값은 모두 객체입니다. 값은 중복 저장될 수 있지만 키는 중복 저장될 수 없습니다. 
HashMap 사용예제

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package class01;
 
import java.util.HashMap;
 
public class Test08 {
    public static void main(String[] args) {
        
        HashMap<Integer,String> map=new HashMap<Integer,String>();  // HashMap 선언 
        map.put(101,"콜라"); // 값추가 
        map.put(102,"사이다");
        map.put(107,"웰치스");
        map.remove(101); //key값 101제거
        map.clear(); //모든 값 제거
        
        System.out.println(map); // 값출력 
        
    }
}
cs

 

 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 
 

 

 

반응형