5주차 시작
컬렉션을 학생때 책으로만 봤다. 사용은 안해봤다.
기다렸던 수업이다. 잘 쓰면 편리한 자료구조로 알고 있어서 배워보고 싶었다.
오늘은 list , set , map 중에 list를 배웠다.
피곤하다.
배운점
framework :
활용할 수 있는 모듈(인터페이스)의 집합 , 틀
컬렉션(collection)은 배열처럼 데이터를 저장하는 데 사용
객체를 대상으로 수집하다. 관리하다.
list : 배열 순서가 있다. 리스트는 중복 있다. 순서대로 관리한다.
set : 중복객체 저장x, 복주머니 안의 공 , 색 같은 공은 넣을 수 없다. 순서의미 없다.
map : 지도, 좌표값이 있고 컨텐츠가 있다. 번지가 있고(키) 1대1로 값이 페어링되어 있다. 한 쌍, 키만 알면 그 값을 뽑을 수 있다.
컬렉션 프레임워크
많은 데이터를 쉽고 효과적으로 처리할 수 있는 표준화된 방법을 제공하는 클래스의 집합을 말함
데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 인터페이스
널리 알려진 자료구조를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 관련 인터페이스와 클래스들을 포함시켜 놓은 java.util 패키지
주요 인터페이스: List, Set, Map
public interface Set extends Collection
Set은 Collectiond을 상속받는다.
Collection은 Iterable을 상속받는다.
Interface Map<K,V>
K - the type of keys maintained by this map
V - the type of mapped values
List 컬렉션
객체를 인덱스로 관리하기 때문에 객체를 저장하면 인덱스가 부여되고 인덱스로 객체를 검색, 삭제할 수 있는 기능을 제공
Collection 인터페이스의 자식 인터페이스
선형 자료 구조의 형태로 요소를 저장함
요소를 인덱스로 관리하기 때문에 요소를 저장하면 자동으로 저장 순서의 인덱스가 부여되고, 인덱스로 요소를 검색하거나 삭제할 수 있음
List 컬렉션에는 같은 요소를 중복해서 저장할 수 있는데, 이때 동일한 번지가 참조된다는 것을 주의해야 함
또한 null도 저장할 수 있는데, 이 경우에는 해당 인덱스가 요소를 참조하지 않음
→add() 메서드: ArrayList에 요소 삽입, 삽입 순서대로 목록에 요소를 추가함
→set() 메서드: 요소 수정, 인덱스와 새 요소를 제공하면 해당 인덱스의 요소가 주어
진 새 요소로 업데이트됨
→remove() 메서드: 요소 삭제, 인덱스 값을 전달하여 요소를 삭제할 수도 있음
→clear() 메서드: 모든 요소를 삭제
→size() 메서드: ArrayList의 크기를 구함
→ArrayList의 크기는 마지막 인덱스에 1을 더한 값임
→get(index) 메서드: ArrayList의 요소 값을 출력
→ArrayList에서 원하는 인덱스의 요소 값이 반환됨
→전체 요소 값을 출력할 때는 대개 for문을 사용하지만 Iterator문을 사용할 수도
있음
→요소값 출력
for(String cat : cats){
System.out.println(cat);
}
while (iter.hasNext()){
System.out.println(iter.next());
>
→contains(value) 메서드: ArrayList에서 원하는 요소 값을 검색, 이때 검색한 값이
있으면 true가 반환됨
→indexOf(value) 메서드: 요소 값이 있는 인덱스를 찾음, 이때 값이 없으면 -1이
반환됨
vo(Value Object) 데이터만 담는 객체
동적으로 증량할 수 있도록 동적인배열
인터페이스 타입선언:
arraylist, linkedList..등등 다 담을 수 있다. List<>
List<Board> boardList = new ArrayList<Board>();
추가
boardList.add(new Board("자바심화프로그래밍1","오늘은 컬랙션 프레임워크1","SYM"));
boardList.add(new Board("자바심화프로그래밍2","오늘은 컬랙션 프레임워크2","SYM"));
boardList.add(new Board("자바심화프로그래밍3","오늘은 컬랙션 프레임워크3","SYM"));
boardList.add(new Board("자바심화프로그래밍4","오늘은 컬랙션 프레임워크4","SYM"));
boardList.add(new Board("자바심화프로그래밍5","오늘은 컬랙션 프레임워크5","SYM"));
사이즈
int size = boardList.size();
System.out.println("현재 총 게시글 수는 "+size+"입니다.");
조회, 수정
Board two = boardList.get(1);
System.out.println(two.getWriter());
two.setWriter("KJS");
System.out.println(two.getWriter());
전체 조회 : for문
for(Board board : boardList){
System.out.println(board.getWriter());
System.out.println(board.getSubject());
System.out.println(board.getContent());
}
BoardDao class
boardList 기능을 처리하는 기능 담는 용도, 필드로 리스트 선언
효과적운영
메인은 결과값만 보여준다.
public class BoardDao {
List<Board> boardList = new ArrayList<Board>();
public List<Board> getBoardList() {
//인터페이스 타입선언, arraylist, linkedList..등등 다 담을 수 있다.
//5명이 글을 작성하였습니다. 5명이 쓴 글에대해 글 쓴 순서대로 boardList에 저장하세요
boardList.add(new Board("자바심화프로그래밍1", "오늘은 컬랙션 프레임워크1", "SYM"));
boardList.add(new Board("자바심화프로그래밍2", "오늘은 컬랙션 프레임워크2", "JHJ"));
boardList.add(new Board("자바심화프로그래밍3", "오늘은 컬랙션 프레임워크3", "SYM"));
boardList.add(new Board("자바심화프로그래밍4", "오늘은 컬랙션 프레임워크4", "SYM"));
boardList.add(new Board("자바심화프로그래밍5", "오늘은 컬랙션 프레임워크5", "SYM"));
return boardList;
}
public void getBoardAll(List<Board> boardList) {
//Board의 전체 글 조회
for (Board board : boardList) {
System.out.println("글쓴이: " + board.getWriter() + " 제목: " + board.getSubject() + " 내용: " + board.getContent());
}
}
public void boardSize() {
System.out.println("현재 총 게시글 수는 " + boardList.size() + "입니다.");
}
public void writerSearch(String writer) {
for (Board board : boardList) {
if (board.getWriter().equals(writer)) {
System.out.println("글쓴이: " + board.getWriter() + " 제목: " + board.getSubject() + " 내용: " + board.getContent());
}
}
}
public void boardInsert(String subject, String writer, String content) {
Board board = new Board(subject, writer, content);
boardList.add(board);
}
}
MVC 역할(대충)
모델: Board
뷰: 메인 (사용자)
컨트롤: BoardDao
람다형:
filter 로 조건 걸어줌 , forEach로 하나씩 접근,
public void writerSearch( String name) {
System.out.println("\n-------------------게시글 검색----------------------");
boardList.stream()
.filter(n-> n.getWriter().equals(name))
.forEach(w -> System.out.println(w.getWriter() + " | " + w.getContent() + " | " +w.getSubject()));
}
Board클래스는 int bno 필드를 가지고 있다.
이것과 동일한 값 객체 삭제하기:
int getIndext = 0;
for(Board row : boards){
if(row.getBno() == bno){
getIndext = boards.indexOf(row);
}
}
boards.remove(getIndext);java
removeIf 사용:
boards.removeIf(item -> item.getBno() == bno);
날짜 구하기 메소드 (String) 반환:
SimpleDateFormat: Date클래스 이용해서 현재날짜 구하면 영어섞인 날짜가나온다. 특정 문자열 포맷으로 얻고 싶을때
public String getCurrentDate() {
SimpleDateFormat date = new SimpleDateFormat("yyyy-MM-dd");
String currentDate = date.format(new Date());
return currentDate;
}
리스트 전체 삭제:
boards.clear()
회고
북 리스트 프로젝트할 때 다른 조 코드를 참고 한 적 있다. 우리 조는 배열을 사용했는데 다른 조는 list 나 hashmap을 사용했었다. 우선 배운내용에 충실하고 싶어서 배열 사용했었는데 이제 ArrayList로도 쉽게할 수 있을 것 같다. 다른것도 빨리 더 배우고 싶다.
다른 처음 하시는 분들은 많이 헷갈려하신다. 리스트에 객체 개념까지 있으니 메소드들 간에 파라미터 사용하거나 값을 참조해서 조회,수정,추가,삭제할때 많이 힘든것같다. 나도 조금 버벅거렸지만 이해하고나니 괜찮다. 금요일에 시험본댔는데 할 수는 있을 것같다.
'신세게 - Java 공부' 카테고리의 다른 글
5주차 배운점 느낀점 - Properties, TreeSet, TreeMap, Comporable, Comprator (1) | 2024.10.03 |
---|---|
5주차 배운점 느낀점 - List, ArrayList, Vector, LinkedList, Set, HashMap (1) | 2024.10.03 |
4주차 배운점 느낀점- 예외처리, 예외, try, catch, finally, throws, throw, 사용자정의예외 (10) | 2024.10.03 |
4주차 배운점 느낀점 - ISP 실습, 발표 연습, git 사용법 (8) | 2024.10.03 |
4주차 배운점 느낀점 - 인터페이스, 다형성, 타입변환 (7) | 2024.10.03 |