** Set
=> 데이터를 중복없이 저장하는 자료구조
=> 중복된 데이터를 삽입하면 삽입하지 않음
=> 데이터를 빠르게 조회할 수 있도록 해싱을 이용해서 저장
=> 자바에서 Set은 인터페이스이고, HashSet, LinkedHashSet, TreeSet 클래스로 구현
- HashSet : 데이터의 저장 순서를 알수 없음
- LinkedHashSet : 데이터의 저장 순서를 기억
- TreeSet : 데이터를 오름차순으로 정렬해서 저장
=> 데이터를 삽입시, add메소드를 사용. 이 메소드가 boolean값을 리턴해서 삽입 성공시 true, 실패시 false를 리턴
** Map
=> 데이터를 Key와 Value 쌍으로 저장하는 자료구조
=> Key와 Value 모두 모든 자료형이 가능하지만 Key는 일반적으로 문자열로 만듭니다.
=> 데이터를 저장하는 용도의 Class 대신에 사용
=> 하나의 행을 저장하는 용도로 사용
=> 관계형 데이터 베이스(SQL 사용)는 Class를 이용한 인스턴스의 집합, NoSQL 데이터 베이스는 Map의 List입니다.
=> Key는 중복된 데이터를 허용하지 않음
=> Map은 인터페이스이고 HashMap, LinkedHashMap, TreeMap 클래스로 구현
- HashMap : key의 순서를 알수 없음
- LinkedHashMap : 저장한 순서를 기억
- TreeMap : key를 오름차순 정렬
1. 생성 : new HashMap<Key의 자료형, Value의 자료형>()
2. 데이터 저장 - void put(key, value)
=> 없는 key를 입력시 데이터 삽입, 존재하는 key 입력시 데이터 수정
3. 데이터 가져오기 - Object get(key)
=> 없는 key를 사용하면 null이 리턴
4. 데이터 삭제 - remove(key), put(key, null)
5. 모든 키 값 가져오기 - Set<Key의 자료형> keySet()
6. toString이 재정의 되어 있는데 key 와 value의 toString을 호출해서 하나로 결합해서 리턴
** MVC(Model View Controller) - 데이터를 변경해도 출력부를 변경할 필요없게 하는 것
=> Model : Business Logic을 이용하여 데이터를 생성해내는 부분
=> View : 데이터를 출력하는 부분
=> Controller : Model과 View를 연결시켜 주는 부분
**연습문제
1. 테이블 구조의 데이터를 만들기(사용자정의 클래스의 List or Map의 List사용)
1) 분류된 데이터 배열을 생성
2) 각 분류별로 배열, 리스트 생성
3) 배열이나 리스트와 분류를 나타내는 텍스트를 Map으로 생성
4) Map의 배열이나 리스트를 생성
5) 출력
**랜덤 클래스
=> java.util.Random
** 날짜 관련 클래스
=> java.util.Date, java.sql.Date, java.util.Calendar, java.util.GreogorianCalendar
1. java.util.Date
=> 날짜와 시간을 저장하는 클래스
=> 1970년 1월 1일 자정(epoch time)으로 부터 지나온 시간을 가지고 날짜를 표현
=> 년도는 1900으로 지나온 년도수로 설정하고 월은 0에
1)생성자
- Date(): 현재 날짜 및 시간
- Date(long timeMillis): 1970년 1월 1일 자정으로 지나온 밀리초를 이용해서 생성
- Date(int year, int month, int day): 년도는 1900년부터 지나온 년도로 월은 0부터 일은 동일
ex) 1986년 5월 5일 - new Date(86, 4, 5)
- 위의 생성자에 시간과 분 그리고 시간, 분, 초를 추가해서 생성해주는 생성자도 존재
2)메소드
=>각 단위별로 가져올 수 있는 get 메소드와 설정할 수 있는 set 메소드를 소유
=>크기 비교를 할 수 있는 compareTo 메소드가 존재
2. java.sql.Date와 java.sql.Time
=>Date는 날짜만, Time은 시간만 저장
=> 생성자는 java.util.Date와 유사한데 매개변수가 없는 생성자(Default Constructor)가 없음
3. java.util.Calendar
=> Date에 비해 정확한 날짜 및 시간 설정이 가능한 클래스 - 추상 클래스
=> getInstance()라는 static 메소드를 이용해서 인스턴스를 생성 - 현재 날짜 및 시간으로 생성
=> get, set메소드를 가지고, 매개변수로 Calendar의 상수를 설정해서 원하는 항목을 가져오거나 설정할 수 있음
=> getTimeInMillis()를 이용해서 epoch time을 리턴
4. java.util.GregorianCalendar
=> Calendar의 하위클래스
=> 매개변수가 없는 생성자와 매개변수가 있는 생성자를 이용해서 인스턴스를 생성하는 것이 가능
=> 월은 0부터 시작, 년도나 일은 우리가 사용하는 형태로 설정
** Format 클래스
=> 날짜나 숫자 데이터를 특정 포맷에 맞는 문자열로 변환해주는 클래스
=> java.text나 패키지에 존재
1. SimpleDateFormat
=> 날짜를 문자열로 변환해주는 클래스
1) 생성자 : SimpleDateFormat("날짜 서식")
2) 문자열로 변환 : String format(Date date)
2. DecimalFormat
=> 숫자를 원하는 형식의 문자열로 변환해주는 클래스
3. choiceFormat
=> 구간에 해당하는 문자열을 리턴해주는 클래스
=> double 배열과 String배열을 이용
4. MessageFormat
=> 문자열을 보간하는 클래스
ex) "이름:{0}", "박문석"
**연습문제
1. 1~1000까지 완전수의 갯수 구하기
=> 완전수 : 자신을 제외한 약수의 합이 자기 자신인 수
ex) 6 : 1, 2, 3, 6 => 1 + 2 + 3 = 6
결과 : 3개
**연습문제
1. 노래제목을 저장할 수 있는 배열 또는 ArrayList를 만들어서 노래 제목을 저장하고 순서대로 출력
2. 가수이름과 노래제목을 하나로 묶어서 저장할 수 있는 클래스 또는 Map을 생성해서 데이터를 저장하고 이 데이터를 List나 배열에 저장하고 출력
3. 노래제목배열 들을 만드는데 장르별(트로트, 팝, 발라드등)로 생성
- 만들어진 배열과 장르를 Map(or 별도의 클래스)으로 묶어서 배열이나 리스트로 만들고 출력(분류된 데이터)
4. 야놀자는 큰지역 -> 작은지역으로 구분하고, 그 안에 데이터를 저장하는 구조
'수업 정리' 카테고리의 다른 글
18일차 수업 정리(IO - Input, Output) (0) | 2020.05.01 |
---|---|
17일차 수업 정리(Thread) (0) | 2020.05.01 |
15일차 수업 정리(ArrayList, LinkedList, 자료구조) (0) | 2020.04.27 |
14일차 수업 정리(String, Encoding, Sort & Search ) (0) | 2020.04.24 |
13일차 수업정리(java.lang 패키지) (0) | 2020.04.23 |