[자바복습 Day09] 컬렉션 ArrayList, Map, Set, CRUD, 본격적으로 UI, Service, VO를 만들어 코딩 시작
우리는 앞으로 수많은 데이터를 다루게 됨.
Collection는 java.util.*안 에 들어가 있고,
종류는 List, Map, Set가 있다.
-List : 데이터를 선형으로 수집하는 형태
ArrayList, Vector
CRUD
Create : add
Read : iter
update : index, remove, add
delete : remove
데이터 넣기 add,
데이터 삭제 remove(인덱스 혹은 문자열로도 삭제할 수 있다. ), clear(리턴타입이 void이기때문에 아무것도 받을 수 없다.)
데이터 변경 직접적인 변경은 안되고 수정할 데이터의 인덱스를 찾아 삭제 후 그 위치값(인덱스)를 보존해 넣는 방법뿐, set
List<String> list = new ArrayList<>();
System.out.println("List: " + list);
System.out.println(list.size());
//데이터 삽입
list.add("서울시");
list.add("부산시");
list.add(0, "제주도");
list.add(2, "인천시");
System.out.println("List: " + list);
System.out.println(list.size());
//데이터 삭제 확인
boolean result = list.remove("광주");
System.out.println(result);
//데이터 교체
list.set(0, "대전시");
System.out.println("List: " + list);
System.out.println(list.size());
list.remove(0);
list.add(0, "속초시");
System.out.println("List: " + list);
System.out.println(list.size());
//인덱스 찾기
int index = list.indexOf("서울시");
System.out.println(index);
출력값
List: [제주도, 서울시, 인천시, 부산시]
4
false
List: [대전시, 인천시, 부산시]
3
List: [속초시, 인천시, 부산시]
3
//찾을려고 하는 데이터가 없을 경우 return값 -1을 던짐, 하나의 약속, 데이터를 못찾았다ㅎㅎ
-1
ArrayList에서 데이터를 변경할 경우에는 indexOf로 인덱스값을 가져와 index >=0 이런식으로 데이터가 있을 경우, remove와 add를 이용해 변경한다. 찾는 데이터가 없을 경우, indexOf함수의 return값이 -1이 나오기 때문!
전체 데이터 순회하기(Iterator)
: for문은 성능이 낮기 때문에 Iterator를 사용하는 것이 좋다!
: 전체 리스트로부터 Iterator를 생성한 후 순회한다.
Iterator<String> iter = list.iterator();
//iter객체가 다음으로 데이터가 올 때까지 순회!
while(iter.hasNext()) {
System.out.println(iter.next()); //
출력값
속초시
대전시
인천시
부산시
데이터 하나만 가져오고 싶을 때 get을 시용
System.out.println(list.get(2));
Arrays.asList를 사용하면 간단한 데이터를 넣을 수 있다!
//4,2,3,4,7을 ArrayList에 데이터를 넣고 싶을 때는?
//add를 통해 넣는 것은 너무 아깝다.
List<Integer> list = Arrays.asList(4,2,3,4,7);
-Map : 비선형구조, 데이터의 위치값을 키로 가지고 있음(Key, Value)
HashMap, HashTable
-Set
: 비선형구조, 중복을 허용하지 않고 Value데이터만 가지고 있음.
: 데이터가 많을 경우 중복을 제외하기위해 사용한다.
HashSet
Set<Integer> set = new HashSet<>();
//값넣기
//add의 return타입은 boolean이다. 그래서 값이 들어갔는지 아닌지를 확인하는 boolean을 사용한다.
set.add(4);
set.add(1);
set.add(5);
set.add(7);
set.add(4); //중복이 불가하므로 동일한 값의 뒤쪽의 값은 들어가지 않는다.
System.out.println(set);
//set은 데이터를 하나하나 꺼내는 메소드는 존재하지 않는다.
//순회
Iterator<Integer> iter = set.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
System.out.println(set.size());
System.out.println(set.remove(4));
set.clear();
System.out.println(set.isEmpty());
출력값
[1, 4, 5, 7]
1
4
5
7
4
true
true
컬렉션에서 주의할 것 데이터 넣기(Create), 삭제(Delete)
MVC패턴
Model : VO(Entity) 데이터 Member.java
View : UI
Controller : Model을 View에 출력하기 위해 연결하는 작업
ArrayList<Object> list = new ArrayList<>();
==> 코드가 커지면 커질수록 이렇게 사용하지 않는다.
★List<Object>list = new ArrayList<>();
상위클래스의 인터페이스가 하위클래스의 객체를 생성해 사용하는 것이 이후에 코드가 커질 시 확장시키기가 좋다.
List<Member> list = new ArrayList<>();에서 list의 타입은 List<Member>이다.
public List<Member> findAll() {
return list;
}
Member member = service.findById(id);
member가 없을 경우는? null입니다!
CRUD의 Read <조회를 할 경우>
Iterator<Member> iter = list.iterator();
while(iter.hasNext()) {
Member m = iter.next();
System.out.println(m);
}