- 데이터의 집합, 그룹
- JCF(Java Collections Framework)
: 데이터, 자료 구조인 컬렉션과 이를 구현하는 클래스를 정의하는 인터페이스 제공
Java 컬렉션 프레임워크 상속구조
Collection 인터페이스의 특징
인터페이스 | 구현클래스 | 특징 |
Set | HashSet TreeSet |
순서 유지하지 않는 데이터의 집합으로 데이터의 중복을 허용하지 않는다. |
List | LinkedList Vector ArrayList |
순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. |
Queue | LinkedList PriorityQueue |
순서가 있는 데이터의 집합으로 데이터의 중복을 허용한다. |
Map | Hashtable HashMap TreeMap |
키(Key),값(value)의 쌍으로 이루어진 테이터 집합으로 순서 유지되지 않으면 키(key)의 중복 허용하지 않으나 값(value)중복 허용 |
1. List Type
- 1차원 배열구조
- 중복 허용, 순서화 제공
- ArrayList 클래스
- Object 배열 이용해서 순차적으로 저장
- 배열 저장 공간 없으면 보다 큰 새로운 배열 생성해 기존 배열에 저장된 내용을 새로운 배열로 복사한 다음 저장
주요메소드
.add : 데이터 삽입
클래스이름.add(들어갈값);
import java.util.ArrayList;
ArrayList list = new ArrayList(); //객체 생성
// ArrayList => 클래스 타입
//클래스 클래스명 = new 클래스();
for (int i = 0; i <30; i++) { //i = 0~29 까지 1씩 더하면서 감
list.add(i+"번째 데이터"); //클래스이름.add : 0~29까지 list에 데이터가 들어감
}
.clear : 모든 데이터 삭제
클래스 이름.clear();
list.clear(); // 데이터 모두 삭제
.contains : 포함 여부확인
클래스이름.contains(확인값);
ArrayList list = new ArrayList(); //객체 생성
if(list.contains("30번째 데이터")) { //값이 포함 유무 출력
System.out.println("포함되어 있습니다.");
}else {
System.out.println("포함되어 있지 않습니다.");
}
.get : idx(인덱스) 자료 변환
ArrayList list = new ArrayList(); //객체 생성
for (int i = 0; i < 30; i++) {
System.out.println(list.get(i)); //클래스이름.get : 꺼낼때
}
.remove : idx(인덱스) 자료 반환 후 삭제.
클래스이름.remove(삭제값);
ArrayList list = new ArrayList(); //객체 생성
String str = (String)list.remove(10);
//강제로 타입변화 넣은 숫자 해당하는 값이 사라짐 [오브젝은 타입 맞춰져야함]
System.out.println(str); //str 출력 10 값 사라짐
System.out.println(list);//list 출력 10번째 데이터 사라지고 배열문 출력
.size : 리스트 길이 나타냄
클래스이름.size();
더보기
예시
HashMap map = new HashMap();
public int getMaxSalary(List<Map> l) {
for(int i=0; i<list.size(); i++) { // i =0 ~ list 길이 -1 까지 1씩 증가
HashMap map = (HashMap) l.get(i);
}
2.Set 타입
- key로 이루어짐
- key값은 중복 허용하지 않고 순서가 없는 데이터 집합
- 전체 출력은 있지만 부분적 출력은 없다
- HashSet
주요메소드
add(key) : 값 추가
클래스명.add(key);
//key : String 타입, int타입, double타입...
더보기
HashSet set = new HashSet(); // 객체 생성 영역
set.add("가"); //set에 "가" 값 추가
set.add("나"); //set에 "나" 값 추가
set.add("다"); //set에 "다" 값 추가
set.add("라");//set에 "라" 값 추가
set.add(10);//set에 10 값 추가
set.add(10.7);//set에 10.7 값 추가
System.out.println(set); // set 출력
HashSet lotto = new HashSet(); //lotto에 대한 객체 생성
while(lotto.size()<6) { //0~5까지 true 6 초과는 flase
int ran = (int)(Math.random()*45)+1; //1~45까지 랜덤으로 나오는 숫자 ran(int타입) 대입
lotto.add(ran);// ran lotto에 숫자 추가
}
//Set타입은 중복 허용 안되고 순서가 보장되어 있지 않기 때문에 겹치지 않고 랜덤으로 숫자가 나옴
remove(key) : 값 삭제
contains(key) : 포함 여부
iterator() : 전체출력을 위한 이터레이터
Iterator 클래스명 = 꺼내올클래스명.iterator(); //객체 생성
Iterator.hasNext(); // Iterator 안에 다음값이 들어 있는 지 확인
Iterator.next(); // Iterator의 다음 값을 가져온다
Iterator.remove() // Iterator에서 next() 함수 호출 시 가져온 값을 컬렉션(List,Set,Map)등 삭제한다.
더보기
HashSet set = new HashSet(); // Set타입 컬렉션 객체 생성
set.add("가");//set에 "가" 값추가
set.add("나");//set에 "나" 값추가
set.add("다");//set에 "다" 값추가
set.add("라");//set에 "라" 값추가
set.add(10); //set에 10 값추가
set.add(10.7);//set에 10.7 값추가
Iterator it = set.iterator(); // iterator 객체 생성
while(it.hasNext()) // hasNext 다음요소가 있는지 판단
Object key = it.next(); // it에 다음요소 가져와서 key 대입
System.out.println(key);
}
}
3.Map 타입
- HarshMap
- key 와 value 이루어짐
- value 중복 허용
- key 값은 중복을 허용하지않고 순서가 보장되지 않음.
- key는 중복저장될 수 없지만 value은 중복 저장 가능하다. 만약 기존에 저장된 키와 동일한 키로 value을 저장하면 기존의 value은 없어지고 새로운 value 대체
주요메소드
put(key , value) : 데이터 입력 , key값 중북되지 않음, value는 중복가능
클래스이름.put(key, value);
더보기
HashMap map = new HashMap(); //객체 생성
map.put("홍길동", 95); // map 안에 key = "홍길동", value =95 넣어짐
map.put("이순신", 83); // map 안에 key = "이순신", value =83 넣어짐
map.put("정몽주", 97); // map 안에 key = "정몽주", value =97 넣어짐
get(key) : 입력 받은 value 값을 key 값을 통해 꺼내 올 수 있음
클래스명.get(key);
더보기
int hScore = (int) map.get("홍길동"); //key "홍길동"이라고 입력
// 오브젝트라서 변수에 맞게 강제 타입 변환 해야함
System.out.println("홍길동의 점수는 : "+ hScore);
keySet():key로 이루어진 hashSet 값 가져옴
예시
Map타입이랑 List타입 예시
import java.util.ArrayList;
public class MapExample02 {
public static void main(String[] args) {
// emp_no emp_name dept tell
// 100 김기훈 영업부 010-8422-8117
// 101 홍성범 기획부 010-7562-3217
// 102 이만수 기획부 010-5562-6677
// 103 강나미 영업부 010-4442-5614
// 109 민병철 총무부 010-2542-8211
HashMap map1 = new HashMap(); //map1에 Map 타입 객체생성
map1.put("emp_no","100"); // key : "emp_no" ,value : "100" map1 값 추가
map1.put("emp_name","김기훈");//key : "emp_name" ,value : "김기훈" map1 값 추가
map1.put("dept","영업부");//key : "dept" ,value: "영업부" map1 값 추가
map1.put("tell","010-8422-8117");//key : "tell" ,value:"010-8422-8117" map1 값 추가
HashMap map2= new HashMap(); //map2에 Map 타입 객체생성
map2.put("emp_no","101");
map2.put("emp_name","홍성범");
map2.put("dept","기획부");
map2.put("tell","010-7562-3217");
HashMap map3 = new HashMap();//map3에 Map 타입 객체생성
map3.put("emp_no","102");
map3.put("emp_name","이만수");
map3.put("dept","기획부");
map3.put("tell","010-5562-6677");
HashMap map4 = new HashMap();//map4에 Map 타입 객체생성
map4.put("emp_no","103");
map4.put("emp_name","강나미");
map4.put("dept","영업부");
map4.put("tell","010-4442-5614");
HashMap map5 = new HashMap();//map5에 Map 타입 객체생성
map5.put("emp_no","109");
map5.put("emp_name","민병철");
map5.put("dept","총무부");
map5.put("tell","010-2542-8211");
// map1에 key(emp_no) 이용해 value 가져오기
String emp_no1 = (String)map1.get("emp_no");
// map2에 key(emp_no) 이용해 value 가져오기
String emp_no2 = (String)map2.get("emp_no");
// map3에 key(emp_name) 이용해 value 가져오기
String emp_name3 = (String)map3.get("emp_name");
// iterator 이용해서 map4 정보 전체 출력
Iterator it = map4.keySet().iterator();
while(it.hasNext()) { //반복문 이용해서 다음 값이 있으면 true문
String key = (String) it.next();
String value = (String) map4.get(key);
}
//map5에 emp_name value 값 변경하기
map5.put("emp_name","이수빈");
//Map 타입에서는 key는 중복 되지 않기 때문에 다시 쓰면 값이 변경됨
//map5 전체 출력
//map4 전체 출력할때 객체 생성되서 객체생성 안해도됨
it = map5.keySet().iterator(); //keySet() : key로 이루어진 hashSet 값 가져옴
while(it.hasNext()) { // hasNext() : 다음값 있으면 true
String key = (String) it.next(); //next() : 다음요소 가져옴
String value = (String) map5.get(key);
System.out.println(key + ", "+ value);
}
//List타입에 map값을 넣고 전체 출력해보기
ArrayList list = new ArrayList();// 객체 생성
list.add(map1); // map1에 있는 값을 list에 데이터 추가
list.add(map2); // map2에 있는 값을 list에 데이터 추가
list.add(map3); // map3에 있는 값을 list에 데이터 추가
list.add(map4); // map4에 있는 값을 list에 데이터 추가
list.add(map5); // map5에 있는 값을 list에 데이터 추가
for(int i = 0; i<list.size(); i++){ 0~list.size길이 -1 까지 1씩 증가하면서 반복
// list값 0~ list.size 1까지 출력 하고 Map클래스로 변환
HashMap map = (HashMap) list.get(i);
// map에 key 이용해서 "emp_no"에 대한 value 가져오기
System.out.println("emp_no :"+ map.get("emp_no"));
// map에 key 이용해서 "emp_name"에 대한 value 가져오기
System.out.println("emp_name :"+ map.get("emp_name"));
// map에 key 이용해서 "dept"에 대한 value 가져오기
System.out.println("dept :"+ map.get("dept"));
// map에 key 이용해서 "tell"에 대한 value 가져오기
System.out.println("tell :"+ map.get("tell"));
//Systemp.out.println(map); 전체 출력
}
Map : 하나의 컬럼을 담고 있다
List : map들을 담고 있다
예시)
List 타입은 테이블이라고 생각하고Map 타입은 하나의 컬럼이라고 생각하면 된다List 타입은 순서화가 되서 튜플끼리 이동 불가능하지만(map1 과 map2 변경 불가능)
Map타입은 순서가 보장이 안되기 때문에 이동 가능하다(emp_no 과 emp_name 변경 가능)
emp_no | emp_name | dept | tell | |
map1 | 100 | 김기훈 | 영업부 | 010-8422 |
map2 | 101 | 홍성범 | 기획부 | 010-7562-3 |
map3 | 102 | 이만수 | 기획부 | 010-5562 |
map4 | 103 | 강나미 | 영업부 | 010-4442- |
map5 | 109 | 민병철 | 총무부 | 010-2542 |
list 타입에 map값을 넣고 전체출력 for풀이
더보기
위 예저 문제에서 가져옴
for (int i = 0; i < list.size(); i++) {
HashMap map = (HashMap) list.get(i);
}
- i = 0 일때
- HashMap map = (HashMap) list.get(0); => 첫번째 list 값 꺼내고 map에 대입
- map = map1 대입
- i = 1 일때
- HashMap map = (HashMap) list.get(1); => 두번째 list 값 꺼내고 map 대입
- map = map2 대입
...
- i = list.size() -1 일때
- Hashmap map =(HashMap)list.get(list.size(list()-1); => 마지막 list값 꺼내고 map 대입
- map = map5대입