//1. Create
//왼쪽: 인터페이스 타입 ||| 오른쪽: 구현체 타입
List<Integer> list1 = new ArrayList<>();
list1.add(new Integer(5)); //List는 add를 실패할일이 없는데 boolean을 반환, 맨날 true, 왜 이렇게할까? -> set메서드에서 알게될고양
list1.add(2); //매개변수로 Integer타입을 원하지만 정수를 입력해도 자동으로 Integer타입으로 변환됨 -> 오토박싱 (wrapper 클래스만 해당)
list1.add(3);
list1.add(1);
list1.add(4);
List<Integer> list2 = new ArrayList<>(list1.subList(1, 4)); //list1에 있는 애들을 복사해서 list2에 넣어줌, 매개변수로 collection넣을 수 있음
System.out.println(list1); //toString() 오버라이드됨. list1.toString()
System.out.println(list2);
//2. Read
int a = list1.get(2); //unboxing: list1.get(2)는 List의 generic type이 Integer이기때문에 Integer를 반환하지만 unboxing이 일어나 int에 담을 수 있음
System.out.println(a); //3. [5,2,3,1,4]
//3. Delete
list1.remove(2);
System.out.println(list1); // [5,2,1,4] -> 2번방빠지고 앞으로 땡겨오면서 인덱스번호 바뀜
//4. Update
int change = new Integer(10);
int before = list1.set(1, change); // [5,2,1,4] 에서 1번방의 기존값 before를 change으로 바꿔라
System.out.println("바뀌기 전 : " + before + ", 바뀐 값 : "+ change);
System.out.println(list1); // [5,10,1,4]
//그동안 정렬하느라 고생하셨습니다.
//정렬해주는 메서드가 있어요....
Collections.sort(list1); //매개변수로 list만 받음, list타입만 sort가능 ★
System.out.println(list1);
Stack<String> s = new Stack<>(); //List로 만들면 Stack용 메서드(push,pop,search,peek) 못 씀!
s.push("0"); //<>(generic type)을 string으로 주었기때문
s.push("1");
s.push("2");
System.out.println(s.pop()); //2
System.out.println(s.pop()); //1
System.out.println(s.pop()); //0
System.out.println(s.pop()); //EmptyStackException
//몇개들었는지 모르니 for문으로 꺼낼수 없음
//-> 끝을 모르니 while 사용!
while(!s.empty()){
System.out.println(s.pop());
}
Queue<String> qu = new LinkedList<>(); //Queue는 인터페이스니 객체생성 불가, Queue를 구현한 LinkedList로 이용
qu.offer("0"); //qu.add로 하면 List처럼 들어가서 안된다 ★그럼왜안되는데?
qu.offer("1");
qu.offer("2");
while(!qu.isEmpty()){
System.out.println(qu.poll());
}
Set<Integer> se = new HashSet<>();
for (int i = 0; i < 10; i++) {
int random = (int)(Math.random()*35+1);
boolean result = se.add(random);
System.out.println(result);
}
System.out.println(se);
//정렬
//1. set -> list
List<Integer> list = new ArrayList<>(se);
Collections.sort(list); //list만 들어간다
System.out.println(list);
키와 값을 가진다
순서 X
키-데이터 중복 허용 X, 값-데이터 중복 허용 O
예시: <지역, 지역번호> 충남은 모두 041 를 쓰지만 충남 여러도시, 우편번호
구현체: HashMap(요즘), HashTable(옛날), TreeMap(검색용도), Properties
Map<String, Integer> param = new HashMap<>();
param.put("치치", 100); //auto-boxing
param.put("근듀", 60); //auto-boxing
param.put("추추", -15); //auto-boxing
System.out.println(param.put("꼰듀", 10)); //기존에 같은 키가 없으니 null에서 10으로 교체. 원래있던값 null 반환
System.out.println(param.put("꼰듀", 500)); //10에서 500으로 교체하고 키가 이미 있던 10 반환
//R
int ju = param.get("꼰듀");
System.out.println(ju);
//D
System.out.println(param);
System.out.println(param.remove("꼰듀")); //이사람이 이런값을 가지고 있었는데 삭제되었습니다... -> 초프..?
System.out.println(param);
Map<String, String> mem = new HashMap<>(); //Map<list,object,set별거별거 다들어감>
//한명의 정보를 다 가지고 다니려고 바구니를 만들었어요: VO
//로그인시 체크할 사항: ID, PW -> 한사람꺼 다 들고 다닐 필요 없이 매개변수 2개만 필요해요
//근데 2개도 많은거 같아서 ID, PW를 한번에 mem에 김은대의 정보만 저장할 거에요
//id: a001 | pw: asdfasdf
mem.put("MEM_ID","a001");
mem.put("MEM_PW","asdfasdf");
Map<String, String> mem2 = new HashMap<>();
mem2.put("MEM_ID","a002");
mem2.put("MEM_PW","ttt");
System.out.println(mem);
System.out.println(mem2);
/*
SELECT *
FROM MEMBER
WHERE MEM_ID = mem.get("mem_id")
AND MEM_PW = mem.get("mem_pw");
*/