한꺼번에 많은 데이터들을 처리하기 위한 구조, 형식을 제공하는 것
컬렉션프레임워크 형식:
자료형명 <자료형명 (클래스급이상만 적을 수 있음. ex)Integer, String)>
List<Car>
**컬렌션프레임워크는 제네릭기반의 자료형이므로 반드시 요소의 자료형은 클래스급 이상의 자료형으로 지정해주어야 한다.
#인터페이스:
Collection 인터페이스가 조상인터페이스임
List 인터페이스 -> ArrayList클래스, LinkedList, Vector, stack , Queue
=> 배열객체가 보완되어 나온 자료형, 방구조를 변경할 수 있다.
=> 중복값을 가질 수 있다. => 인덱스가 있기 때문에(순서가 있다.)
Collection 인터페이스가 조상인터페이스임
Set 인터페이스 -> HashSet클래스, TreeSet클래스
=> 리스트와 비슷하지만 중복값을 가질 수 없다.
=> 순서가 없다. (인덱스가 존재하지 않음)
Iterator 인터페이스가 조상 인터페이스임.
Map 인터페이스 -> HashMap 클래스, TreeMap클래스
=> Key와 Value의 쌍으로 이루어진 자료형
=> 키는 무조건 문자열자료형으로(String) 지정해 준다.
=> 중복값으 가질 수 있지만, 중복키는 불가능하다.
=> 순서가 없다.(인덱스가 존재하지 않음)
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry; // 생략불가
class Test{}
public class ColEx07 {
public static void main(String[] args) {
HashMap<String, Integer> hm = new HashMap<>();
// key, value로 입력이 가능
hm.put("hello",123);
hm.put("world",345);
// key를 null로 할 수 있고 value도 null로 할 수 있다.
hm.put(null,555);
hm.put("nullKey",null);
System.out.println(hm + "\n");
for(String key : hm.keySet()) {
System.out.println("key : " + key + ", value : "+hm.get(key));
}
//entrySet 메서드는 key, value를 볼 수 있게 해준다.
for(Entry<String, Integer> s : hm.entrySet()) { // entrySet 쌍으로 값을 떼오는 함수임.
System.out.println(s.getKey() + ", " + s.getValue());
}
LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>(); // LinkedHashMap은 순서를 가지고 있음.
lhm.put("hello", 123);
lhm.put("world", 345);
// key를 null로 할 수 있고 value도 null로 할 수 있다.
lhm.put(null, 555);
lhm.put("nullKey", null);
lhm.put("world", 777); // 마지막 값으로 저장됨. 중복으로 작성할 수 있음. HashMap은 안되나봄.
System.out.println(lhm + "\n");
for(String key : lhm.keySet()) {
System.out.println("key : " + key + ", value : " + lhm.get(key));
}
//entrySet 메서드는 key, value를 볼 수 있게 해준다.
for(Entry<String, Integer> s : lhm.entrySet()) {
System.out.println(s.getKey() + ", " + s.getValue());
}
}
}
import java.util.HashMap;
import java.util.Scanner;
public class ColEx06 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>(); // null?
map.put("castello","1234"); // map은 순서가 없음
map.put("java","1111");
map.put("lang","1234");
Scanner s = new Scanner(System.in);
while(true) {
System.out.println("id와 password를 입력해주세요");
System.out.print("id : ");
String id = s.nextLine().trim();
System.out.print("password : ");
String password = s.nextLine().trim();
System.out.println();
if(!map.containsKey(id)) { // 1항 연산자.
System.out.println("입력하신 id는 존재하지 안습니다. 다시 입력해주세요. \n");
}else {
if(!map.get(id).equals(password)) {
System.out.println("입력하신 id는 존재하지 안습니다. 다시 입력해주세요. \n");
}else {
System.out.println("id와 비밀번호가 일치합니다.");
break;
}
}
}
}
}
public class ColEx05 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("one", "하나"); // Key가 인덱스 역할을 함.
// key 중복값을 가져올 수 있음. value는 중복값을 가질 수 있음.
map.put("two", "둘");
map.put("three", "셋");
map.put("four", "넷");
map.put("five", "다섯");
Set<String> keys = map.keySet(); // 순서가 없어서 중복값을 가질 수 없음.
Iterator<String> iter = keys.iterator(); // 직렬로 나열되어있는 것만 iterator를 사용할 수 있음.
while(iter.hasNext()) {
String key = iter.next();
System.out.printf("key : %s\t value: %s\n", key, map.get(key));
}
Collection<String> value = map.values();
// 방법1
for(String s: value) {
System.out.printf("value : %s \n", s);
}
// 방법2
iter = value.iterator();
while(iter.hasNext()) {
System.out.printf("value : %s\n",iter.next());
}
}
}
import java.util.ArrayList;
import java.util.Iterator;
public class CollEx04 {
public static void main(String[] args) {
ArrayList<Student> list = new ArrayList<Student>();
list.add(new Student("자바왕", 1,1));
list.add(new Student("자바짱", 1,2));
list.add(new Student("홍길동", 2,1));
list.add(new Student("전우치", 2,2));
Iterator<Student> it = list.iterator();
while(it.hasNext()) {
Student s = it.next();
System.out.println(s.name + " " + s.ban + "반 " + s.no + "번");
}
}
public static class Student{
String name = "";
int ban;
int no;
Student(){}
Student(String name, int ban, int no){
this.name = name;
this.ban = ban;
this.no = no;}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getBan() {
return ban;
}
public void setBan(int ban) {
this.ban = ban;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
}
}
import java.util.ArrayList;
public class ColEx03 {
public static void main(String[] args) {
// ArrayList list = new ArrayList();
ArrayList<String> list = new ArrayList<String>();
list.add("사과");
list.add("사과");
list.add("수박");
list.add("귤");
list.add("딸기");
list.add("체리");
prn(list); // 같은 클래스에 선언된 형제 메소드 이거나 상속받은 클래스의 메소드 이면 이렇게 사용할 수 있음. static이면 이탤릭체!
System.out.println(">> 인덱스 2인 위치에 키위 삽입 <<");
list.add(2, "키위");
prn(list);
System.out.println(">> 인덱스 4인 위치에 포도로 변경 <<");
list.set(4, "포도");
prn(list);
System.out.println(">> 인덱스 1인 위치에 데이터를 제거 <<");
list.remove(1); // 방칸수도 줄어들고 인덱스도 변경됨.
prn(list);
System.out.println(">> 사과 데이터를 찾아서 제거 <<");
list.remove("사과");
prn(list);
System.out.println(">> 원하는 데이터를 찾아서 제거 <<");
ArrayList<String> apple = new ArrayList<String>();
apple.add("사과");
apple.add("수박");
list.removeAll(apple); // 모든 사과만 지우는 것이 아니라 제일 처음 마주친 값만 삭제
prn(list);
}
static void prn(ArrayList list) {
for(int i = 0; i < list.size(); i++) {
System.out.print(list.get(i) + "\t");
}
System.out.println("\n");
}
}
import java.util.*;
public class ColEx02 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<String>();
list.add("사과");
list.add("바나나");
list.add("귤");
list.add("오렌지");
list.add("바나나");
list.add(0, "바나나"); // 해당 인덱스에 값을 채우고 한칸씩 자리를 미룸.
System.out.println("요소의 개수 : " + list.size());
System.out.println(">> Iterator 객체로 요소 얻기 <<");
// Iterator elements = list.iterator(); // 1.5이전
Iterator<String> elements = list.iterator();
while(elements.hasNext()) {
// String str = (String) elements.next(); // 1.5 이전
String str = elements.next();
String str1 = elements.next();
System.out.print(str + " " + str1 +"\t");
}
System.out.println("\n");
System.out.println(">> get 메소드로 요소 얻기 <<");
for(int i = 0; i < list.size(); i++) {
System.out.println(list.get(i) + "\t"); // index 번호로 값을 가져올 때, get을 이용함.
}
System.out.println();
}
}