티스토리 뷰

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

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


* 컬렉션(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에 대한 실습입니다.

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 클래스입니다.

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객체를 순서대로 저장하는 실습입니다.

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에 대한 실습입니다.

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에 대한 실습입니다.

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);
	}
}
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 {
	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 오름차순
	}
}




HashMap에 대한 실습입니다.

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
«   2024/05   »
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
글 보관함