Java 13일차 (컬렉션3)

2022. 11. 29. 09:06코딩배움일지/JAVA

** for - each

모든 컬렉션, 배열에서 사용 가능

for ( 변수 : 배열레퍼런스(데이터집합) ) {
        ....반복작업문.....
}

배열의 항목 수 만큼 실행부분을 반복하는데 반복이 이루어질 때마다 배열의 항목을 순서대로 꺼내어 변수에 자동으로 대입해 준다. (변수와 배열의 데이터타입은 같아야 한다)

** 오직 배열의 값을 가져다 사용할 수 만 있고(read) 수정할 수 는 없다(write)

for - each 문을 사용하게 되면 index를 사용할 수 없는데, index가 필요한 경우에는 일반 반복을 사용

 

CRUD 

모든 프로그램의 핵심

데이터 처리 방식

 

Create (생성/등록/추가)

Read (읽기/조회)

Update (변경/수정)

Delete (삭제/제거)

 


import java.util.ArrayList;
 
public class StringList {
    public static void main(String[] args) {
        String[] strArray = new String[3];
 
        strArray[0] = "Java";
        strArray[1] = "JSP";
        strArray[2] = "Servlet";
 
        // 일반 반복
        System.out.println("<<<<<<<<<<<<<<<일반반복>>>>>>>>>>>>>>>");
        for (int i = 0; i < strArray.length; i++) {
            System.out.println(strArray[i]);
        }
 
        // foreach
        System.out.println("<<<<<<<<<<<<<<<foreach>>>>>>>>>>>>>>>");
        for (String str : strArray) {
            System.out.println(str);
        }
 
        ArrayList<String> strList = new ArrayList<>();
 
        /*
        List 값 추가 (Create) -> add(값), add(index, 값)
         */
 
        strList.add("Java");
        strList.add("JSP");
        strList.add("Servlet");
        strList.add(1, "C++"); // 1번 인덱스에 요소 추가
        // add는 값을 바꾸는 메소드가 아니라 값을 추가하는 메소드
        // 중간에 값을 넣으면 요소들이 한칸씩 밀림
        // 그러면서 공간도 자동으로 늘어남
 
        strList.add(0, "HTML");
 
        System.out.println("-" + strList.size());
 
        System.out.println("<<<<<<<<<<<<<<<list foreach>>>>>>>>>>>>>>>");
        for (String str : strList) {
            System.out.println(str);
        }
 
        /*
        List 값 조회 (Read) -> get(index)
         */
        System.out.println("<<<<<<<<<<<<<<<list 일반반복>>>>>>>>>>>>>>>");
        for (int i = 0; i < strList.size(); i++) {
            System.out.println(strList.get(i)); // 리스트에서 i번째에 있는 값을 get
            // get() 메서드는 Set에는 존재하지 않음 (Collection에는 get() 메서드가 없음)
            // 키값이 없는 경우 get()메서드가 없음
        }
 
        System.out.println();
        /*
        List 값 수정(Update) -> set(index, 값)
         */
        strList.set(0, "HTML5");
        System.out.println(strList);    // toString() 메소드
 
        System.out.println();
        /*
        List 값 삭제 (Delete) -> remove(index)
         */
        strList.remove(2);
        System.out.println(strList);
 
        int[] array = new int[10];
        System.out.println("-" + array.length);  //?
 
 
    }
}

 

스택 Stack - 자료구조

LIFO (Lsat In first Out)

  • 한 쪽 끝에서만 자료를 넣고 뺄 수 있는 선형 자료구조
  • 가장 최근에 저장된 값 다음에 저장 (Push)
  • 가장 최근에 저장된 값이 먼저 나감(Pop)
import java.util.ArrayList;
import java.util.Scanner;

public class StackList {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        // 임지현, 신경수, 고희주, 문승주, 장건년, 박수현, 확석민, 박준현

        ArrayList<String> stack = new ArrayList<>();
        // foreach를 돌렸을때 거꾸로 나오게


//        stack.add(0,"임지현");
//        stack.add(0, "신경수");
//        stack.add(0, "고희주");
//        stack.add(0, "문승주");
//        stack.add(0, "장건년");
//        stack.add(0, "박수현");
//        stack.add(0, "확석민");
//        stack.add(0, "박준현");

        for (int i = 0; i < stack.size() + 1; i++) {
            String name = scanner.nextLine();
            if (name.isBlank()) {
                break;
            }
            stack.add(0, name);
        }

        for (String name : stack) {
            System.out.print(name);
            if (!name.equals(stack.get(stack.size() - 1))) {
                System.out.print(", ");
            }
        }


    }
}

 

 

import java.util.ArrayList;
import java.util.List;

public class StackList2 {

    public static void main(String[] args) {
        ArrayList<String> stack2 = new ArrayList<>();

        stack2.add("임지현");
        stack2.add("신경수");
        stack2.add("고희주");
        stack2.add("문승주");
        stack2.add("장건년");
        stack2.add("박수현");
        stack2.add("확석민");
        stack2.add("박준현");

        // 순서대로 넣었을때 거꾸로 나오게
        int size = stack2.size();
        for(int i = 0; i < size; i++) {
            System.out.println(stack2.get(size - (i+1)));
            // System.out.println(stack2.remove(size - i - 1);
        }

        /*
        remove로 stack2의 사이즈가 계속 줄어들기 때문에
        size변수로 stack2의 사이즈를 고정시켜놓고 반복

        인덱스의 길이는 길이 - 1 이기 때문에 (i+1) 또는 i - 1 추가
         */
        System.out.println();

        List<String> copyList = new ArrayList<>();

        int copySize = stack2.size();
        for(int i = 0; i < size; i++) {
            copyList.add(0, stack2.remove(size-i-1));
        }

        System.out.println(copyList);

    }
}

\


import java.util.ArrayList;
import java.util.List;

public class StudentList {
    public static void main(String[] args) {
        List<Student> students = new ArrayList<>();     // 업캐스팅

        Student student = new Student(2022001, "김준일", 2);
        students.add(student);

        // 변수에 안 담고 바로도 가능
        students.add(new Student(2022002, "이승아", 21));
        students.add(new Student(2022003, "김수현", 22));
        students.add(new Student(2022004, "문경원", 23));
        students.add(new Student(2022005, "홍지혜", 24));
        students.add(new Student(2022006, "고동현", 25));

        Student student2 = students.get(4);

        System.out.println(student2);

        // 이름이 문경원인 학생의 나이를 26세로 바꾸기

        for (Student st : students) {
            if (st.getName().equals("문경원")) {
                st.setAge(26);
                break;
            }
        }
        student2 = students.get(3);
        System.out.println(student2);

        //////////////////////////////////////////////////////

        for (int i = 0; i < students.size(); i++) {
            Student s = students.get(i);
            if (s.getName().equals("문경원")) {
                s.setAge(28);
                break;
            }
        }

        System.out.println(students.get(3));


        // 0번 인덱스 학생의 이름을 다음 인덱스의 학생 이름으로 변경
        // 제일 마지막 인덱스의 학생 이름으로 0번 인덱스로 이동

        String lastName = null;
        for(int i = 0; i< students.size(); i++) {    // size 6. i가 5일때까지
            int nowIndex = students.size()-1 -i; // 인덱스 순서 5,4,3,2,1,0
            int perIndex = nowIndex -1;  // 현재요소의 앞  (인덱스가 5면 4)
            Student s = students.get(nowIndex);  // 인덱스의 요소를 뒤에서부터 가져옴

            if(nowIndex == 0) {  // 인덱스가 0일때
                s.setName(lastName); // lastName으로 수정
                break;   // 반복문 탈출

               /*
               break;를 걸어주지 않으면
               인덱스0 --> 에 인덱스 -1의 이름을 넣어주려하기때문에
               오류 발생
                */
            }
            if(nowIndex == students.size() - 1) {    // 마지막인덱스일때(5) lastName값 넣기 (제일 처음 실행되고 그 뒤로는 실행 안됨)
                lastName = s.getName();
            }
            s.setName(students.get(perIndex).getName());
           /*
           인덱스 5 --> 인덱스4 이름 넣기
           인덱스 4 --> 인덱스3 이름 넣기
           인덱스 3 --> 인덱스2 이름 넣기
           인덱스 2 --> 인덱스1 이름 넣기
           인덱스 1 --> 인덱스0 이름 넣기
           인덱스 0 --> lastName 이름 넣기

            */
        }

        System.out.println(students);

    }

}

 

컬렉션에는 get이라는 메소드가 없다. Map 이나 List처럼 키값을 넣어 줘야 get을 쓴다.

'코딩배움일지 > JAVA' 카테고리의 다른 글

Java 14일차 3(set, addAll, List)  (0) 2022.11.29
Java 14일차 (컬렉션. ArrayList)  (0) 2022.11.29
Java 13일차 (컬렉션2)  (0) 2022.11.28
Java 13일차 1(컬렉션)  (0) 2022.11.28
잠온다. Java 12일차 3(제네릭)  (1) 2022.11.25