티스토리 뷰

컬렉션 프레임워크란 ? 배열의 단점을 보완한 데이터를 저장하는 클래스들을 표준화한 설계이다.

다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스들로 구성


* 컬렉션(Collection): 다수의 데이터, 데이터 그룹

* 프레임워크(Framework): 표준화, 정형화된 체계적인 프로그래밍 방식





인터페이스

구현 클래스

특징

List

ArrayList

순서가 있는 데이터들의 집합, 데이터의 중복을 허용

 => 데이터를 추가(add)하면 앞에서 부터 순차적으로 데이터가 삽입된다.

    그래서 각각의 저장되어 있는 공간들은 고유한 색인(index)를 가진다.

LinkedList

Stack

Vector

Set

HashSet


순서를 유지하지 않는 데이터들의 집합, 데이터의 중복을 허용하지 않는다.

 => 집합이며 데이터가 순서와는 상관없이 추가(add)된다. 

     중복되지 않는다.


TreeSet

Map

HashMap

키와 값의 쌍으로 이루어진 데이터의 집합. 순서는 유지되지 않는다.

키는 중복으로 허용하지 않고, 값을 중복으로 허용한다.

TreeMap

HashTable



* Iterator (반복자)

 컬렉션 프레임워크에서 컬렉션에 저장된 요소들을 읽어오는 방법을 표준화 하였다.

 iterator()는 Collection인터페이스에 정의된 메소드이므로 Collection인터페이스의 자손인 List와 Set에도 포함되어 있다.

 그래서 List나 Set인터페이를 구현하는 컬렉션은 iterator()가 각 컬렉션의 특징에 알맞게 작성되어 있다.

 


컬렉션 프레임워크에 대한 기본적인 이론을 마치며 실습을 통해 공부하겠습니다.


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
43
44
45
46
import java.util.ArrayList;
 
public class ExampleArrayList{
    public static void main(String[] args) {
        // List 계열의 컬렉션 프레임워크
        // 1) 자료의 저장 순서가 있다.(인덱스를 사용할 수 있다.)
        // 2) 중복된 자료의 저장이 가능하다.
         
        // => ArrayList , LinkedList
        // ArrayList: 배열기반
        // 데이터가 추가 될 때마다 배열을 새로 만들고 전에 있던 데이터를 복사
         
        // LinkedList: 연결리스트 기반
        /// 데이터를 추가하면 노드가 하나 늘어난다.
         
        ArrayList<string> arrList= new ArrayList<>();
        // 1)add: 요소 추가
        // 2)remove: 요소 제거
        // 3)get: 참조하기(가져오다)
        // 4)set: 바꾸기(수정하다)
 
        arrList.add("B");
        arrList.add("C");
        arrList.add("A");
        // List의 길이를 얻는 메소드: size();
        for(int i=0;i>arrList.size();i++){
            System.out.println(arrList.get(i));
        }
         
        System.out.println();
        arrList.set(1, "D");
        System.out.println(arrList.get(1));
         
        // 삭제
        System.out.println(arrList);
        // arrList.remove(1); // 인덱스를 이용한삭제
        arrList.remove("D"); // 객체를 이용한 삭제 (검색을 할때 사용)
        arrList.remove("A");
        System.out.println(arrList);
 
        arrList.add("B");
        arrList.add("B");
        arrList.add("F");
        System.out.println(arrList);
    }
}


컬렉션프레임워크에 제네릭을 함께 사용하는 방식입니다.

먼저 Person 클래스입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class Person {
    private int age;
    private String name;
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public int getAge() {
        return age;
    }
 
    public String getName() {
        return name;
    }
 
    @Override
    public String toString() {
        return "Person [age= " + age + ", name= " + name + "]";
    }
}



ArrayList에 제네릭을 사용하여 Person객체를 순서대로 저장하는 실습입니다.

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
import java.util.ArrayList;
import java.util.Iterator;
 
public class ExampleArrayListGeneric{
    public static void main(String[] args) {
        ArrayList<Person> personList = new ArrayList<>();
        personList.add(new Person("A", 10)); // 0
        personList.add(new Person("B", 20)); // 1
        personList.add(new Person("C", 30)); // 2
        personList.add(new Person("D", 40)); // 3
 
        // for (int i = 0; i < personList.size(); i++) {
        // personList.remove(i);
        // }
        // // 삭제하면 인덱스는 0부터 초기화되기 때문에 B와 D는 삭제 되지 않는다.
 
        // Iterator(반복자) 사용
        Iterator<person> personIt = personList.iterator();
 
        // 다음 아이템(요소)이 있으면 반복(true)해라
        while (personIt.hasNext()) {
            Person temp = personIt.next(); // 다음 값을 리턴 후 반복자 이동
 
            if (temp.getName().equals("A") || temp.getName().equals("C")) {
                personIt.remove(); // 현재 가리키고 있는 요소를 삭제한다.
            }
        }
 
        System.out.println(personList);
 
        for (int i = 0; i < personList.size(); i++) {
            System.out.println(personList.get(i));
        }
         
        // 전체 탐색을 할 때는 인덱스보다 for-each문을 활용하는 것이 좋다.
        // * 특히 LinkedList에서의 전체 탐색은 인덱스가 아닌 for-each 또는 lterator를 이용하자.
        for(Person p : personList){
            System.out.println(p);
        }
    }
}



HashSet에 대한 실습입니다.

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
import java.util.HashSet;
 
public class ExampleHashSet{
    public static void main(String[] args) {
        // set
        // -> 자료가 중복되지 않고, 순서가 없다
        // hash 알고리즘에 의한 데이터들의 배치 (HashSet)
        // tree 정렬기준에 의한 데이터들의 배치 (TreeSet)
         
        HashSet<String> hashSet = new HashSet<>();
        hashSet.add("Banana");
        hashSet.add("Apple");
        hashSet.add("Melon");
        hashSet.add("Orange");
        hashSet.add("Grape");
 
        hashSet.add("Melon");
        hashSet.add("Melon");
        hashSet.add("Melon");
         
        System.out.println(hashSet);
        // 입력한 순서에 상관이 없이 정렬이 된다.
        // 중복된 것은 하나의 요소만 저장되고 나머지는 저장되지 않는다.
    }
}




TreeSet에 대한 실습입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.util.TreeSet;
 
public class Example{
    public static void main(String[] args) {
        TreeSet<String> treeSet= new TreeSet<>();
        // 정렬 기준이 String이라 알파벳 순서대로 정렬된다.
 
        treeSet.add("D");
        treeSet.add("C");
        treeSet.add("B");
        treeSet.add("A");
        treeSet.add("E");
 
        treeSet.add("H");
        treeSet.add("F");
        treeSet.add("I");
        treeSet.add("G");
        treeSet.add("J");
         
        System.out.println(treeSet);
    }
}
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
43
44
45
46
47
48
49
import java.util.TreeSet;
 
public class ExampleTreeSetGeneric{
    public static void main(String[] args) {
 
        TreeSet<Person> treeSet = new TreeSet<>();
 
        treeSet.add(new Person("D", 13));
        treeSet.add(new Person("B", 10));
        treeSet.add(new Person("A", 11));
        treeSet.add(new Person("C", 12));
        treeSet.add(new Person("F", 12));
        // 기준을 잡아놓은 뒤 중복값이 발생하면 나오지 않는다.
        // Tree - 정렬알고리즘 잘 구현하기
 
        System.out.println(treeSet);
    }
}
 
class Person implements Comparable<person> {
    private int age;
    private String name;
 
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
 
    public int getAge() {
        return age;
    }
 
    public String getName() {
        return name;
    }
 
    @Override
    public String toString() {
        return "Person [age= " + age + ", name= " + name + "]\n";
    }
 
    @Override
    public int compareTo(Person o) {
 
        return (this.age - o.age) * -1;// 내림차순
        // this.age- o.age 오름차순
    }
}
</person>




HashMap에 대한 실습입니다.

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.HashMap;
 
public class ExampleHashMap{
    public static void main(String[] args) {
        // HashMap -> 웹, 빅데이터, 안드로이드 등 모든 곳에서 제일 많이 사용한다.
        // 컨텐츠 용도가 아닌, 실제 데이터를 전송 또는 수신할 때 많이 사용된다. (JSON, BSON)
        // Key- Value 방식
         
        // 저장 시 에는  : 키-값 쌍으로 저장
        // 참조시      : 키만 집어 넣어서 값을 참조한다.
         
        HashMap<String, String> hashMap = new HashMap<>();
 
        hashMap.put("ID", "userid01");
        hashMap.put("PW", "useripw01");
 
        String id = hashMap.get("ID");
        String pw = hashMap.get("PW");
        System.out.println(id);
        System.out.println(pw);
         
        hashMap.put("ID","뭐야");
        id=hashMap.get("ID");
        System.out.println(id);
        hashMap.put("PW", "뭐야");
        pw=hashMap.get("PW");
        System.out.println(pw);
         
        // Key가 동일하면 마지막 Key에 해당하는 Value로 덮어쓴다. (Set)
        // Value은 중복이 허용된다.    
    }
}
반응형
LIST
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/04   »
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
글 보관함