코드 그라데이션

후발대 14일차 설명 포함 코드 본문

Java/후발대

후발대 14일차 설명 포함 코드

완벽한 장면 2023. 2. 3. 21:05

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