코드 그라데이션
후발대 14일차 설명 포함 코드 본문
LinkedList (2)
public class _05_LinkedList {
public static void main(String[] args) {
// 링크드 리스트
// 여러명이 앉을 의자가 있다고 가정한 설명
/*
먼저 어레이리스트는, 여러명이 앉을 의자가 연달아 있으면, 중간에 누가 앉으려고 한다면 그 사람의 위치로부터
그 사람 뒤에 있는 사람들이 모두 일어나서 한 칸씩 이동해야 하는 번거로움이 있다.
링크드 리스트는 의자 없이 사람들이 나란히 손을 잡고 있는 상황이다.
중간에 한 명이 2-3번 사이로 들어간다고 하면, 잡았던 손을 놓고, 그 사이에 들어가고 나서 기존에 2-3번에 있는 사람과 손을 잡으면서
쉽게 여러 사람들 사이로 들어갈 수 있다. 그냥 손을 놨다가 새로 들어온 사람과 손을 잡는..
쓰는 방법은 두 가지가 거의 비슷하다.
*/
// 선착순으로 수업 진행
LinkedList<String> list = new LinkedList<>();
list.add("유재석");
list.add("조세호");
list.add("김종국");
list.add("박명수");
list.add("강호동");
// 데이터 조회
System.out.println(list.get(0)); // 유재석 출력
System.out.println(list.get(1)); // 조세호 출력
System.out.println(list.getFirst()); // 편리하게 가장 첫번째 데이터 뽑을 수 있음 // 유재석 출력
System.out.println(list.getLast()); // 마지막 데이터를 뽑을 수 있음 // 강호동 출력
System.out.println("-----------");
// 데이터 추가
list.addFirst("서장훈"); // 처음으로 데이터가 들어가게 만든다.
for(String s : list) {
System.out.println(s);
}
System.out.println("--------");
list.addLast("김희철");
for(String s : list) {
System.out.println(s);
} // 7명이 됨
System.out.println("-----");
// 중간에 데이터를 추가하는 경우
System.out.println("학생 추가 전: " + list.get(1)); // 유재석 출력
list.add(1, "김영철"); // 유재석 씨 앞에 김영철 씨 추가됨
System.out.println("학생 추가 후: " + list.get(1)); // 김영철 출력
// 진짜 추가되었는지 확인해보기
System.out.println("학생 추가 후: " + list.get(2)); // 유재석 출력 <== 이동한 위치
//Day14
System.out.println("----------------");
// 삭제 : list.remove()
System.out.println("남은 학생 수(제외 전) : " + list.size());
list.remove(list.size()-1); // 마지막 데이터 삭제
System.out.println("남은 학생 수(제외 후) : " + list.size());
System.out.println("-------------");
// 처음 학생과 마지막 학생이 전학갔다.
System.out.println("남은 학생 수(전학 전) : " + list.size());
list.removeFirst(); // 첫 데이터가 삭제
list.removeLast(); // 마지막 데이터가 삭제
System.out.println("남은 학생 수(전학 후) : " + list.size());
for(String s : list) {
System.out.println(s);
}
System.out.println("---------------");
// 변경 : list.set(변경위치, 변경값)
//ListSet 함수로
list.set(0, "이수근"); //김영철->이수근
System.out.println(list.get(0)); // 첫번째에 이수근 출력
// 데이터 확인 list.contains()
System.out.println(list.indexOf("김종국"));
if(list.contains("김종국")) {
System.out.println("수강 신청 성공");
} else {
System.out.println("수강 신청 실패");
}
System.out.println("----------------");
// 전체삭제 : 내장함수 clear
list.clear();
//isEmpty() 진짜 비어있는지 확인
if(list.isEmpty()) {
System.out.println("학생 수: " + list.size());
System.out.println("리스트가 비어있습니다.");
}
System.out.println("---------------------");
// 정렬
// 다시 다섯 명 추가
list.add("유재석");
list.add("조세호");
list.add("김종국");
list.add("박명수");
list.add("강호동");
// 강호동 중복추가
list.add("강호동");
list.add("강호동");
list.add("강호동");
// 출석부 일단 만들기
Collections.sort(list); // 정렬할 것의 이름을 넣어주기만 하면, 데이터를 가나다순으로 정렬
// 정렬이 잘 되었는지 for-each문으로 순회
for(String s : list) {
System.out.println(s);
}
// 링크드리스트는 중복 데이터 허용한다.
// 강호동씨를 여러번 넣어볼게요. 여러번 넣어진다.
}
}
HashSet
public class _06_HashSet {
public static void main(String[] args) {
//Set
HashSet<String> set = new HashSet<>();
// 삼겹살 구워먹기 위한 재료들을 추가한다. 일부러 중복값 넣어봤어. Set은 중복값 허용하지 않는다. 순서보장도 안 된다.
set.add("삼겹살");
set.add("쌈장");
set.add("음료수");
set.add("후추");
set.add("삼겹살");
set.add("소금");
set.add("깻잎");
set.add("상추");
set.add("삼겹살");
System.out.println("총 구매 상품 수: " + set.size());
// 순회
for(String s : set) {
System.out.println(s);
}
System.out.println("-----------");
// 데이터 확인
if(set.contains("삼겹살")) {
System.out.println("삼겹살 사러 출발");
}
System.out.println("---------");
// 삭제
System.out.println("총 구매 상품 수(삼겹살 사기 전) :" + set.size());
set.remove("삼겹살");
System.out.println("총 구매 상품 수(삼겹살 산 후) :" + set.size());
// 전체삭제
set.clear();
//비어있는지 확인
if(set.isEmpty()) {
System.out.println("남은 상품의 수: " + set.size()); //0 출력
System.out.println("집으로 출발!");
}
System.out.println("----------");
//Set의 특징 : 중복x, 순서 보장x
HashSet<Integer> intSet = new LinkedHashSet<>(); // 순서 보장하기 위해
intSet.add(1);
intSet.add(13);
intSet.add(2);
for(int i : intSet) {
System.out.println(i);
}
}
}
HashMap
public class _07_HashMap {
public static void main(String[] args) {
// Map : Key와 Value의 쌍으로 이루어진 형태.
/*
열쇠로 열 수 있는 사물함이 있다고 가정하는데,
그 사물함을 열 수 있는 열쇠는 딱 하나여야 한다.
이런 것처럼 Key 값을 통해 value를 저장하고 가져오는 이런 작업을 용이하게 하는 것을 map
아래 구현할 예시, 우리가 커피숍에 간다고 했을 때,
휴대폰 번호를 입력해서 내 고객정보에 포인트를 적립하지.
즉, 휴대폰 번호를 key값으로 받아, 내 고객정보에 value를 저장하는 것.
*/
HashMap<String, Integer> map = new LinkedHashMap<>(); // 순서 보장하고 싶을 때 LinkedHashMap
// Key는 이름이므로 String, Value값은 포인트 점수이므로 숫자기 때문에 Integer.
// 데이터 추가 이거는 add가 아니라 put
map.put("유재석", 10);
map.put("박명수", 5);
map.put("김종국", 3);
//서장훈 있었다면?
map.put("서장훈", 10);
System.out.println("총 고객 수 : " + map.size());
System.out.println("---------------");
// 조회 map.get()
System.out.println("유재석 님의 포인트: " + map.get("유재석")); // 괄호 안에 적어주면 그 값을 얻어온다.
System.out.println("유재석 님의 포인트: " + map.get("박명수"));
System.out.println("--------------");
//확인 map.containsKey
if (map.containsKey("서장훈")) {
int humanspoint = map.get("서장훈");
map.put("서장훈", ++humanspoint);
System.out.println("서장훈 님의 누적 포인트: " + map.get("서장훈"));
} else { // 서장훈이 리스트에 없는 경우
map.put("서장훈", 1);
System.out.println("서장훈님 신규 고객 등록");
System.out.println("서장훈님 (포인트 1점)");
// 있으면 11점 출력
}
// 삭제 map.remove()
map.remove("유재석");
System.out.println(map.get("유재석")); // null 출력
// 유재석이라는 key 가 없으므로 null 값이 출력되는 것이다.
System.out.println("-----------");
//전체삭제
map.clear();
// 남은 데이터가 있는지 확인
if (map.isEmpty()) {
System.out.println("남은 고객 수: " + map.size());
System.out.println("가게를 접어야겠다");
}
System.out.println("------------");
// 다음날 다시 찾아왔어
map.put("유재석", 10);
map.put("박명수", 5);
map.put("김종국", 3);
map.put("서장훈", 10);
// key 확인 ** map.keySet()
for (String key: map.keySet()) {
System.out.println(key);
}
System.out.println("------------");
//value 확인 map.values()
for(int value : map.values()) {
System.out.println(value);
}
System.out.println("------------");
// Key와 value 함께 확인
for(String key: map.keySet()) {
System.out.println("고객이름: " + key + "\t포인트" + map.get(key));
}
System.out.println("---------------");
// map:순서 x, 중복 x
map.put("김종국", 11);
map.put("김종국", 30);
map.put("김종국", 50);
for(String key: map.keySet()) {
System.out.println("고객이름: " + key + "\t포인트" + map.get(key));
// 순서 난잡하게 박명수 서장훈 유재석 김종국 출력되고, 김종국은 마지막 입력값인 50으로 출력
}
System.out.println("---------------");
}
}
Iterator(1)
public class _08_Iterator {
public static void main(String[] args) {
// 이터레이터
// 컬렉션 프레임워크의 데이터를 순회하는 거라고 생각하면 쉽다.
List<String> list = new ArrayList<>();
// ctrl하고 클릭해보면 List는 인터페이스이고, ArrayList는 클래스이다.
// ArrayList는 List 인터페이스를 상속받는 형태로 구현이 되는 것이에요.
// 그래서 이는 다형성 사례라고 할 수 있음. LinkedList 써도 마찬가지
//추가
// 알 수 없는 오류로 잘못 된 더미 값이 들어온다고 쳐보자
list.add("유재석");
list.add("(알 수 없음)");
list.add("김종국");
list.add("(알 수 없음)");
list.add("강호동");
list.add("(알 수 없음)");
list.add("박명수");
list.add("(알 수 없음)");
list.add("조세호");
// 순회 후 확인
for (String s : list) {
System.out.println(s);
}
System.out.println("------------");
// 이터레이터는 인텔리제이 내장이어서 편하게 쓸 수 있다.
//it는 약자로 편하게 쓴 것.
// 값 가져오기
// list.iterator(); => 그런데, Ctrl + Alt + V 누르면 자동으로 Iterator<String> iterator = list.iterator(); 형식으로 바꿔줌!
Iterator<String> it = list.iterator();
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
System.out.println(it.next());
// 하나하나씩 번갈아가면서 출력 // // 커서 위치를 처음으로 이동
// 그리고 다음 데이터를 하나씩 하나씩 가지고 온다고 생각하면 된다. 유재석~4번째 알수없음까지
// 그런데 이터레이터는 index가 없다. 몇 번째 까지 순회하징???
//hasNext를 통해 순회함.
System.out.println("---------");
it = list.listIterator(); // 커서 위치를 다시 처음으로 이동
while ((it.hasNext())) {
System.out.println(it.next()); // 반복을 도는 동안 그 다음값들을 계속 찍어줘. 다음 값이 없으면 탈출.
}
System.out.println("------------");
}
// 지우는 것부터 다음 시간에!
}
728x90
'Java > 후발대' 카테고리의 다른 글
후발대 15일차 설명 추가 코드 (0) | 2023.02.11 |
---|---|
후발대 15일차 전체 코드 (0) | 2023.02.11 |
후발대 14일차 전체 코드 (0) | 2023.02.03 |
후발대 13일차 설명 보충 (0) | 2023.02.03 |
후발대 13일차 전체 코드 (0) | 2023.02.03 |
Comments