티스토리 뷰
자바 ! 컬렉션 프레임워크 ( Collection Framework , List, ArrayList, HashSet, TreeSet, HashMap, Iterator)
나는연어다 2017. 5. 14. 19:20컬렉션 프레임워크란 ? 배열의 단점을 보완한 데이터를 저장하는 클래스들을 표준화한 설계이다.
다수의 데이터를 쉽게 처리할 수 있는 방법을 제공하는 클래스들로 구성
* 컬렉션(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은 중복이 허용된다. } }
'프로그래밍 > Java' 카테고리의 다른 글
자바 ! 동기화 (Synchronization , synchronized) (1) | 2017.05.16 |
---|---|
자바 ! 쓰레드 ( Thread, Start , Run, Priority ) (0) | 2017.05.15 |
자바 ! 제네릭( Generic ) (0) | 2017.05.13 |
자바 ! 객체 타입 판별, 배열 ( instanceof , Array, for - each) (0) | 2017.05.10 |
자바 ! 사용자 정의 예외처리 ( Exception, RuntimeException, try ~ catch ~ finally ) (0) | 2017.05.09 |