[개발] - 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
반응형