이제 복습은 개념보단 코드위주로 할 것 같다

1)컬렉션프레임워크
1-1) List
1-2) Set
1-3)Map
1-4) Iterator
(컬렉션프레임워크에 대해 이해가 어느정도 되어있으므로
살짝씩만 할것임)
1 )@@ 컬렉션 프레임워크@@
컬렉션 프레임워크 에 대해서는 간단히만 말하고
코드로 복습하겠음!!!
컬렉션프레임워크에는
List , Set , Map 존재
* Collection 인터페이스 : 객체를 여러개저장할 수 있는 객체]
1-1) List
* List : Collection 인터페이스의 하위
* 객체들 저장할 때 저장된 순서를 유지 -> 인덱스 사용 가능
* 구현클래스 : ArrayList , Vector , LinkedList..
* Vector : Collection프레임워크 이전의 클래스
* Collection프레임워크에서 제공되는 함수 기존에사용했던함수 혼합
내가직접 예제를 만들어
거기서 사용한 함수 , 방법들은 주석으로 간단히 달아놓겠음
Car 클래스
package ex1_List;
import java.util.ArrayList;
import java.util.Collections;
//Car클래스는 간단히 이름과가격만 멤버로가
class Car implements Comparable<Car>{
String name;
int price;
public Car(String name, int price) {
super();
this.name = name;
this.price = price;
}
@Override
public int compareTo(Car c) {
return name.compareTo(c.name);
//이름기준 정렬
}
@Override
public String toString() {
return name + ":" + price ;
//toString 구현
}
}
구동클래스
public class MyEx1 {
public static void main(String[] args) {
//Car객체만 들어올수있는 List
ArrayList<Car> cList = new ArrayList<>();
cList.add(new Car("k5", 30));
cList.add(new Car("k3", 25));
cList.add(new Car("k7", 40));
cList.add(new Car("g80", 60));
cList.add(new Car("bmw7", 80));
//정렬하지않고 일단출력
System.out.println(cList);
System.out.println("@ ObjectList @ ");
ArrayList<Object> oList = new ArrayList<>(cList);
oList.add(999);
oList.addFirst("Object는 모두의 부모");
//Object는 모두의 부모임(객체를 모두담을 수 있어)
System.out.println(oList);
System.out.println("-------------------");
//이름순으로 출력해보자
//구현해놓은 Comparable활용
Collections.sort(cList);
System.out.println(cList);
//가격순으로 출력해보자
Collections.sort(cList,(s1,s2)->s1.price-s2.price);
//Comparator (람다식 이용)
System.out.println(cList);
//bmw의 인덱스를 추출 후 삭제해보자
int index=0;
for (Car car : cList) {
//car의name에 bmw문자 포함 시
if(car.name.contains("bmw")) {
index = cList.indexOf(car);
//List의 car객체의 인덱스반
System.out.println("bmw는 "+index+"번에 존재");
}
}
System.out.println("삭제 전 : "+cList);
System.out.println("@@"+index+"번삭제 :"+cList.remove(index)+"@@");
//해당인덱스 삭제
System.out.println("삭제 후"+cList);
System.out.println("---Object타입의 List에서도 가능!!!---");
int index2=0;
for(Object o : oList) {
//o가 Car로 형변환이 가능하다면
if(o instanceof Car) {
if(((Car) o).name.contains("bmw")) {
index2 = oList.indexOf(o);
System.out.println("bmw는 "+index2+"번");
}
}
}
System.out.println("삭제 전 : "+oList);
System.out.println(index2+"번 삭제 완료 ");
oList.remove(index2);
System.out.println(oList);
}
}
[k5:30, k3:25, k7:40, g80:60, bmw7:80]
@ ObjectList @
[Object는 모두의 부모, k5:30, k3:25, k7:40, g80:60, bmw7:80, 999]
-------------------
[bmw7:80, g80:60, k3:25, k5:30, k7:40]
[k3:25, k5:30, k7:40, g80:60, bmw7:80]
bmw는 4번에 존재
삭제 전 : [k3:25, k5:30, k7:40, g80:60, bmw7:80]
@@4번삭제 :bmw7:80@@
삭제 후[k3:25, k5:30, k7:40, g80:60]
---Object타입의 List에서도 가능!!!---
bmw는 5번
삭제 전 : [Object는 모두의 부모, k5:30, k3:25, k7:40, g80:60, bmw7:80, 999]
5번 삭제 완료
[Object는 모두의 부모, k5:30, k3:25, k7:40, g80:60, 999]
List의 제네릭타입은 오직 객체여야함!!!
기본형은 불가능(boolean , int , long 등)
래퍼타입으로 넣자!!!
1-2) Set
* set 인터페이스 : 중복객체저장안함
* boolean add(Object) :
true : 추가성공
false : 추가실패
* 구현클래스
* HashSet : 중복불가 순서뒤죽박죽
* TreeSet : 중복불가 , 정렬됨
* LinkedHashSet : 중복불가 . 순서유지
HashSet , TreeSet 등 사용 예시
package ex2_set;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.NavigableSet;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
public class MyEx {
public static void main(String[] args) {
HashSet<Integer> set = new HashSet<>();
set.add(56);set.add(23);set.add(11);set.add(2);set.add(3);
set.add(4);set.add(6);set.add(5);
set.add(12);set.add(8);set.add(1);set.add(1);
//set은 중복값을 저장하지않음
System.out.println("Hashset : "+set);
//set을 list에 넣어 정렬시도
ArrayList<Integer> list = new ArrayList<>(set);
Collections.sort(list);
System.out.println("ArrayList<>(set) : "+list);
System.out.println("TreeSet로 변경");
SortedSet<Integer> treeSet = new TreeSet<>(set);
System.out.println("treeSet : "+treeSet);
//subSet : SortedSet의 메서드
SortedSet<Integer> set2 = treeSet.subSet(2, 5);
System.out.println("treeSet.subSet(2, 5) : " +set2);
}
}
Hashset : [1, 2, 3, 4, 5, 6, 23, 56, 8, 11, 12]
ArrayList<>(set) : [1, 2, 3, 4, 5, 6, 8, 11, 12, 23, 56]
TreeSet로 변경
treeSet : [1, 2, 3, 4, 5, 6, 8, 11, 12, 23, 56]
treeSet.subSet(2, 5) : [2, 3, 4] // 2번째요소~~5번째요소 전까지 반환
* * 1 ~ 99까지의 정수를 입력받아서 TreeSet에 저장하고, 0 을 입력하면 입력을 종료한다.
* 입력된 값을 정렬하여 출력하기.
1 ~ 99 까지의 숫자가 아닌 경우 TreeSet에서 저장하지 말것.
Scanner scan = new Scanner(System.in);
TreeSet<Integer> tSet = new TreeSet<>();
TreeSet<Integer> tSet2 = new TreeSet<>(Comparator.reverseOrder());
System.out.println("1부터 99까지의 숫자입력 , (종료 0 )");
while(true) {
int num= scan.nextInt();
if(num==0) {
break;
}
else if(0<num && num<100) {
tSet.add(num);
tSet2.add(num);
}
}
System.out.println("오름차순"+tSet);
System.out.println("내림차순"+tSet2);
1부터 99까지의 숫자입력 , (종료 0 )
-4 5 1023 105 999 99 10 3 2 1 1 67 32 0
오름차순[1, 2, 3, 5, 10, 32, 67, 99]
내림차순[99, 67, 32, 10, 5, 3, 2, 1]
1-3) Map
* Map인터페이스 : (key,객체) 쌍인 객체들의 모임
map의 주요 메서드들
* put(key,value) : map에 데이터 추가
* get(key) : value값을 리턴
* Set keySet() : map객체중 key 목록 조회
* Set values() : map 객체중 values 목록조회
* Set<Map,Entry> entrySet() : (키,값)쌍 목록 조회
* Map.Entry 객체 : 키,객체(value) 쌍인 객체1개
key : getKey()
value : getValue()
* value remove(key) : key 에 해당하는 객체 제거 후 value값 리턴
존재하지않는 key 객체라면 null 반환
회원관리 Map객체를 만들어보겠다
key 는 회원의 아이디 (중복 불가능)
value는 이름 , 전화번호 , 주소 , 우편번호 등이 되겠음.
User클래스
package ex3_map;
import java.util.Objects;
public class MyEx_User {
private String name;
private String address;
private String phoneNum;
private int zipCode;
public MyEx_User(String name, String address, String phoneNum, int zipCode) {
this.name = name;
this.address = address;
this.phoneNum = phoneNum;
this.zipCode = zipCode;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String getPhoneNum() {
return phoneNum;
}
public int getZipCode() {
return zipCode;
}
@Override
public String toString() {
return "["+name + "," + address + ", " + phoneNum + ", " + zipCode+"]";
}
@Override
public int hashCode() {
return Objects.hash(address, name, phoneNum, zipCode);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyEx_User other = (MyEx_User) obj;
return Objects.equals(address, other.address) && Objects.equals(name, other.name)
&& Objects.equals(phoneNum, other.phoneNum) && zipCode == other.zipCode;
}
}
구동클래스
package ex3_map;
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Set;
public class MyEx {
public static void main(String[] args) {
HashMap<String, MyEx_User> map = new HashMap<>();
map.put("ddkk1120", (new MyEx_User("동곤1","서울시 금천" , "010-1234-2442", 24504)));
map.put("ddkk1234", (new MyEx_User("동곤2","서울시 성동" , "010-1234-1243", 21244)));
map.put("ddkk1000", (new MyEx_User("동곤3","서울시 강북" , "010-1234-8974", 24214)));
map.put("ddkk1024", (new MyEx_User("동곤4","서울시 강서" , "010-1234-4284", 24524)));
System.out.println(map);
// Set<Entry<String, MyEx_User>> entrySet = map.entrySet();
System.out.println("entry이용( key,value쌍)");
for (Entry<String, MyEx_User> entry : map.entrySet()) {
System.out.println("key :"+entry.getKey()+" value:"+entry.getValue());
}
Set<String> keySet = map.keySet();
System.out.println("아이디목록 : "+keySet);
System.out.println("@@map.get()이용해서 key로 전화번호(value의 멤버) 찾기@@");
String key = "ddkk1120";
String phoneNum = map.get(key).getPhoneNum();
System.out.println("map.get("+key+")의 전화번호 : "+phoneNum);
}
}
{ddkk1234=[동곤2,서울시 성동, 010-1234-1243, 21244], ddkk1024=[동곤4,서울시 강서, 010-1234-4284, 24524], ddkk1120=[동곤1,서울시 금천, 010-1234-2442, 24504], ddkk1000=[동곤3,서울시 강북, 010-1234-8974, 24214]}
entry이용( key,value쌍)
key :ddkk1234 value:[동곤2,서울시 성동, 010-1234-1243, 21244]
key :ddkk1024 value:[동곤4,서울시 강서, 010-1234-4284, 24524]
key :ddkk1120 value:[동곤1,서울시 금천, 010-1234-2442, 24504]
key :ddkk1000 value:[동곤3,서울시 강북, 010-1234-8974, 24214]
아이디목록 : [ddkk1234, ddkk1024, ddkk1120, ddkk1000]
@@map.get()이용해서 key로 전화번호(value의 멤버) 찾기@@
map.get(ddkk1120)의 전화번호 : 010-1234-2442
1-4) Iterator ( 반복자 )
* Iterator 인터페이스 : 반복자
* ITerator() : Collection 객체(List,Set)는 Iterator 객체로 변환이 가능함
주요메서드
boolean HasNext() : 조회할요소가있는가
Object next(); ㅣ 조회대상 객체리턴
void remove(); : 조회된 객체를 제거 . next() 실행 이후에가능
package ex4_Iterator;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
public class IterartorEx1 {
public static void main(String[] args) {
Iterator<Object> it = null;
ArrayList<Object> list = new ArrayList<Object>();
HashSet<Object> set = new HashSet<Object>();
for (int i = 1; i <= 5; i++) {
list.add(i+10);//11~16 저장
set.add(i*10);
}
System.out.println("print 이전의 list : "+list);
System.out.println("print 이전의 set : "+set);
it = list.iterator(); //Collection의 하위만 사용가능
print(it);
it = set.iterator();
print(it);
System.out.println("print 이후의 list : "+list);
System.out.println("print 이후의 set : "+set);
}
//--------------------------------------------------------------------------
private static void print(Iterator<Object> e ) {
//다음 조회 할 대상이 있니?
while(e.hasNext()) {
//조회대상 객체반환
System.out.print(e.next()+"(삭제),");
//조회된 객체 삭제
e.remove();
}System.out.println();
}
}
104,103,102,101,
pirnt. 이후의 students 객체 : {}
Alice,bob,Charlie,David,
pirnt. 이후의 students 객체 : {}
단순히 조회용으로 사용하는것을 추천함
Collection활용 예제
내가 소상공인이 되어 가게를 운영한다고 해보자
주말마다 휴일이라는것을 명시해줘야 한다.
DayofWeek의 요일은
1~~ 7 : 월~~일 이다
달력출력을 편하게 하기위해
%7 +1 연산을 해서
1~7 : 일 ~~월 로 바꾸자
package test_setMap;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.Scanner;
public class MyEx {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("년도 입력 : ");
int year = scan.nextInt();
System.out.println("월 입력 : ");
int month = scan.nextInt();
LocalDate of = LocalDate.of(year, month, 1);//입력받은 년도와 월의 첫번쨰날 세팅
int fisrtWeek = (of.getDayOfWeek().getValue()%7)+1;
int dayOfMonth = of.getDayOfMonth();
//1~7 일~월
LocalDate with = of.with(TemporalAdjusters.lastDayOfMonth());//이번달의 마지막날짜
int last= with.getDayOfMonth();//이번달의마지막 일
ArrayList<LocalDate> list = new ArrayList<>();
for (int first=1; first <= last; first++) {
list.add(of);
of= of.plusDays(1);//날짜리스트 생성
}
System.out.println(list);
//-------달력출력----------------------------------------------
System.out.println("\t"+year + "년 " + month + "월");
System.out.printf("%-6c %-7c %-6c%-7c %-7c %-7c %-6c",'일','월','화','수','목','금','토');
System.out.println();
for(int i=1; dayOfMonth<=last;i++) {
if(i <fisrtWeek) {
System.out.printf("%-8s"," ");
}
else {
if(list.get(dayOfMonth-1).getDayOfWeek().getValue()==7/*일요일휴무*/) {
System.out.printf("%-6s",(dayOfMonth++ + "(휴무)"));
}
else {
System.out.printf("%-8d",dayOfMonth++);
}
}
if(i%7==0)System.out.println();
}System.out.println();
}
}
년도 입력 :
2025
월 입력 :
3
[2025-03-01, 2025-03-02, 2025-03-03, 2025-03-04, 2025-03-05, 2025-03-06, 2025-03-07, 2025-03-08, 2025-03-09, 2025-03-10, 2025-03-11, 2025-03-12, 2025-03-13, 2025-03-14, 2025-03-15, 2025-03-16, 2025-03-17, 2025-03-18, 2025-03-19, 2025-03-20, 2025-03-21, 2025-03-22, 2025-03-23, 2025-03-24, 2025-03-25, 2025-03-26, 2025-03-27, 2025-03-28, 2025-03-29, 2025-03-30, 2025-03-31]
깔끔하진못하지만 일요일에 휴무라는 사실을 알수있다!!!!
코드를 조금만수정해주면 원하는요일에 추가로 휴무를 할 수 있음
'주말공부 or 복습' 카테고리의 다른 글
주말복습6 (DB) (2) | 2025.03.09 |
---|---|
주말복습5 (0) | 2025.03.03 |
주말복습3(접근제어자 , 인터페이스,내부클래스, 예외처리) (0) | 2025.02.23 |
주말 복습 2 ( 클래스와 생성자, 상속) (2) | 2025.02.15 |
자바(Java) 복습 1 ( 반복문 , 조건문 , 배열 ) (1) | 2025.02.09 |