-
(국비교육) 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
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
■ 아이디 패스워드 일치
while을 통해 일치할때까지 계속 반복해서 묻도록 한다.
boolean 값 변수를 하나 선언해 그 값을 true 로 설정하고,
만약 일치한다면 반복문을 빠져나오도록 설정한다.
■ stack 과 Queue (p. 586) ★ 시험 문제 多
- stack(후입선출) : 나중에 넣은 객체가 먼저 빠져 나간다.
- Queue(선입선출) : 먼저 넣은 객체가 먼저 빠져 나간다.
'개발 > 국비교육' 카테고리의 다른 글