ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • (국비교육) 13 - ArrayList + Set + Map + stack + Queue + 아이디 비밀번호 일치여부
    개발/국비교육 2023. 6. 19. 13:53

    ■ ArrayList (p. 557)

     

     

    - 자료구조
    - 컬랙션 하위 arrayList 타입
    - 이름도 배열이 들어가고, 배열과 흡사하다.
    - 배열보다 쉽다.

     

    기존의 배열의 경우 배열이 고정되었다면 ArrayList 는 고정되어 있지 않다. 

     

    ArrayList 는 출력문에 바로 객체를 불러주면 바로 배열을 보여준다.

     

    System.out.println(arr01);

     

    * add()

    값대입은 add() 를 이용하면 된다. 

     

    arr01.add(10);
    arr01.add(15); 
    arr01.add(20);

     

    를 하게 되면 순차적으로 [10, 15, 20] 배열값이 들어간다.

     

    ArrayList 는 반드시 입력받는 타입이 일치해야 한다. 

    단 데이터 타입이 일치하는 변수는 가능하다.

     

    즉 arr01 의 타입을 Integer 로 했기 때문에

    num 도 int  형으로 arr01.add(num) 이 가능하다.

     

    int num = 100;
    arr01.add(num);

     

    ※ int 는 p 타입 integer 는 int의 r 타입 형태이다.

     

    * get()

    get() 으로는 하나씩 배열을 출력할 수 있다.

     

    int num1 = arr01.get(0);
    System.out.println(num1);

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

     

    하게 되면 num1 값은 arr01의 0번째 배열 10을 출력하게 된다.

    arr01.get(3) 을 하게 되면 배열 3번째 100이 나오게 된다. 

     

    * size()

     

     

    배열의 길이를 뽑기 위해서는 size() 를 이용할 수 있다.

     

    System.out.println(arr01.size());    ----> list 의 길이

     

    응용하여 마지막 번지를 출력하고자 한다면

    우리는 arr01.size() -1 을 하면 마지막 배열의 번지를 찾을 수 있고,

    이를 arr01.get 을 통해 해당 마지막 번지의 값인 10을 출력할 수 있다. 

     

    System.out.println(arr01.get(arr01.size() - 1)); 

     

    ■ ArrayList문제

    문제

    - list타입 arr02 라고 만들어주세요.

    - 홀수를 저장하되 저장된 값이 20개가 되면 멈춰주세요.

    - 이후 배열을출력해주세요.

     

     

    먼저 ArrayList 를 이용해  arr02 를 만들어준다.

     

    배열이 20개가 되면 멈추도록 설정하기 위해 배열 길이를 알 수 있는 arr02.size 를 이용한다.

    add() 배열 0부터 시작함으로 0~ 19 까지가 20이므로 while 을 통해

    arr02.size 가 20 보다 작을 경우 홀수 값을 입력하게 설정한다.

     

    홀수값은 임의의 변수 number 을 1 로 설정하고 +2 를 통해 홀수가 계속 출력하고 더할 수 있도록 설정한다.

     

    * 요청사항

    - ArrayList 이용해서 타노스 손가락 다시 풀어보기

    - 코딩 만들고 어떻게 하면 짧게 줄일 수 있을까도 고민

     

    *  혼자 코딩실습

     

    나의 경우 for 문을 통해 접근했다.

     

    i는 1부터 입력할 것이고 만약 i 가 짝수가 아니라면 i 값을 배열에 추가,

    그렇지 않고 체크할 arr02.size 가 20개가 되었을 때 break 를 걸어 멈춰주게 설정했다. 

     

    * add(인덱스 번호, 값)

     

     

    앞에는 인덱스 번호, 뒤에는 값을 넣어주면 배열 원하는 곳에 값을 넣을 수 있다.

    예시에서는 0번지에 100을 넣어줌으로 제일 처음 100이 나오는 것을 확인 가능하다.

     

    ■ ArrayList문제

    문제

    - 마지막 번지수에 50을 넣어주세요.

    - add(index, e) 를 이용

     

     

    마지막 번지수에 넣는 것은 arr01.size() 를 이용해서 그때그때 대응할 수 있도록 설정한다.

    왜냐하면 ArrayList 는 배열이 정해진 게 아니라 계속 바뀌기 때문이다. 

     

     

    삭제는 remove() 를 이용하면 되는데 삭제할 배열값을 입력해주면 된다.

     

    배열값 0번째를 넣으면 삭제할 값 100 을 보여주고,

    다시 출력해보면 100이 지워진 것을 확인할 수 있으며, size 도 7로 줄어든 것을 볼 수 있다.

     

     

    13을 삭제하고 다시 넣는 것은 add(인덱스번호, 값) 을 해주면 정상적으로 넣어줄 수 있다.

     

    ■ Generic (=일반적인)

    - 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있도록 하는 방법

    - 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미

    - 클래스 선언부에 <E>, <T>, <K, V> 가 붙어있는 경우가 있다.
    - 이런 인터페이스, 추상 클래스, 클래스를 제네릭이라고 한다.
    - 자바 1.5부터 추가된 기능이다.
    - <E> element, 구성요소(데이터타입)를 적는다.
    - <T> Type
    - <K, V> key, Value

     

    * remove(object o)

     

    remove(object o) 를 사용하면 있는지 없는지 참/거짓으로 나오고,

    있다면 해당 데이터를 삭제시켜 준다.

     

    따라서 홍길동 데이터가 삭제됨을 알 수 있다. 

     

    * indexOf()

     

    indexOf()데이터가 있을때는 자기 인덱스 번호 출력, 없으면 -1 출력

    따라서 데이터가 있는지 없는지 체크 가능하다.

     

    * contains(value)

     

     

    요소에 있는지 확인할 때 contains(value) 를 사용한다.

     

    * set(index, value)

     

     

    인덱스 번호에 해당하는 값을 입력한 값으로 바꾼다.

     

    즉 인덱스 0번호의 김길동 -> 홍길동 으로 변경하게 된다. 

     

    * clear

     

     

    clear 데이터 싹 날리는 것이다. 

    따라서 기존 배열에 있던 데이터가 모두 사라진 것을 확인 가능하고, size 도 0이 뜬다.

     

    * 깊은복사

     

    새로운 String 타입 arrayList arr04 를 만들고 arr02 값을 새로운 객체를 통해 복사한다.

    이런 경우에는 arr02.set(1, "김나래") 처리가 되어도 다른 값을 가진다. 

     

    ArrayList<String> arr04 = arr02 ;

     

    처럼 값을 단순히 대입하면 얕은 복사(객체 주소값) 이지만,

    새로운 객체를 통해 값을 넣어줬기 때문에 별도의 값을 가진다. 

     

    * 정렬하기 (p.560)

     

     

    정렬에는 collections 가 쓰인다. 

     

    0~9 까지 랜덤하게 5개 저장하는 list 는 

    arr03.add(들어갈 값) 을 통해 넣어주면 된다.

     

    따라서 들어갈 값 부분에 랜덤 값 math.random() * 10 을 넣어주면 0 ~ 9까지 랜덤하게 들어간다.

     

     

     

    - Collections.sort(arr03); : 오름차순

    - Collections.reverse(arr03); : 내림차순

    - Collections.shuffle(arr03); : 랜덤

     

    * 문제

    - arr01 을 만들어주세요. (arraylist 이용)
    - 6칸 1 ~ 45를 넣어주세요

    - 중복이 있다면 제거해주세요. 참일때는 저장x, 거짓일때는 저장0

     

     

    int형 변수 num 을 선언하고 1~ 45까지 랜덤값을 부여해준다. 

     

    if 를 통해 arr01.contains 에 num 값으로 랜덤 설정한 값이 있는지 없는지 찾고

    ~ 반전을 통해 만약 없다면 배열에 저장한다.

     

    collections.sort 로 오름차순 정렬도 가능하다.

     

    ■ HashSet

     

     

    HastSet을 이용하면 중복과 인덱스가 없는 배열을 만들 수 있다. 

     

    따라서 만약 100 이라는 값을 동일하게 넣었다면 값은 한 번만 저장된다.

    따라서 100, 101, 102, 103 4개의 값만 인식하여 size 는 4가 나온다. 

     

    clear 처리를 하게 되면 아무것도 존재하지 않아 

    size 는 0, 출력하면 배열이 비어있다. 

     

     

    set 은 중복 없이 저장하기 때문에 랜덤값을 보다 편하게 구할 수 있다.

     

     

    for each 문은 인덱스에 관계 없기 때문에 set의 배열값을 출력이 가능하다. 

     

    순서가 없기 때문에 정렬도 없다. 

    따라서 만약 정렬을 하기 위해서는 List 로 변경하고 난 뒤 정렬해야 우리가 원하는 값을 얻을 수 있다. 

     

    ■ 주소록 만들어보기

     

    * Arraylist

    - list는 r 타입이 들어간다.

    - 제네릭에는 R타입 형태만 적습니다.

     

    * set

     

     

    - Iterator : 반복자로 형태 변환 후 출력하기

     

    https://thefif19wlsvy.tistory.com/41

     

    [Java]이터레이터(Iterator) 란?

    Iterator는 자바의 컬렉션 프레임워크에서 컬렉션에 저장되어 있는 요소들을 읽어오는 방법을 표준화한 것이다. 컬렉션 프레임워크란 데이터를 저장하는 클래스들을 표준화한 설계이다. 컬렉션

    thefif19wlsvy.tistory.com

     

     

    set에서 변환된 it 에서 읽어올 요소가 있어?

    str로 받아서 그것을 출력해

     

    - List : 중복허용, 순서가 있습니다.
    - Set : 중복 x, 순서 x
    - Map : 키와 값으로 저장합니다. 쌍으로 저장합니다.

    키는 중복될 수 없습니다. 값은 중복 가능합니다. 


    * map

     

     

    키와 값으로 저장하며, 쌍으로 저장한다

    이는 사전과 비슷한 형태를 띈다.

     

    키는 중복될 수 없지만 값은 중복 가능하다.

    따라서 key 가 중복되면 중복된 키의 값으로 새로 들어간다.

     

     

    따라서 map01.get("토마토") 를 통해 key 값을 넣어주면 value 값이 나온다.

    만약 값이 없는 key 값을 넣으면 null 값이 나온다.

     

    remove() 하게 되면 해당 value에 해당하는 값을 나타내고 삭제처리 된다.

     

    - keyset() : key를 뽑아줍니다.

     

     

    - containKey() : 저런 키가 있어?

    - containValue() : 저런 값이 있어?

     

    - clear() 

    clear 데이터 싹 날리기

    따라서 size 도 0이 뜬다.

     

     

    - replace() : 변경하기

     

    http://www.tcpschool.com/java/java_collectionFramework_map

     

    코딩교육 티씨피스쿨

    4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

    tcpschool.com

     

    ■ 아이디 패스워드 일치

     

     

     while을 통해 일치할때까지 계속 반복해서 묻도록 한다.

     

    boolean 값 변수를 하나 선언해 그 값을 true 로 설정하고,

    만약 일치한다면 반복문을 빠져나오도록 설정한다.

     

     ■ stack 과 Queue (p. 586) ★ 시험 문제 多 

    - stack(후입선출) : 나중에 넣은 객체가 먼저 빠져 나간다.

    - Queue(선입선출) : 먼저 넣은 객체가 먼저 빠져 나간다.

     

Designed by Tistory.