티스토리 뷰
자바 ! 컬렉션 프레임워크 ( 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 |
