ArrayList 하고 Vector은 같음
Vector은 옛날 거
vector은 동기화처리가 돼있다
ArrayLIst는 동기화 안돼있음
List가 붙은 애들은
List 인터페이스 구현했다는 뜻
소스를 보면 아래에 객체배열이 있다
모든 종류의 객체를 저장할 수 있다
생성자(3)
1) ArrayList() - 기본생성자
2) ArrayList(Collection c)
- 매개변수로 어떤 collection을 주면
그 collection에 저장돼있는 걸 저장하는
ArrayList를 만들 수 있음
Collection끼리 변환할 때 많이 씀
3) 배열의 길이를 늘려줌
1) 추가하는 메서드
ArrayList에 어떤 객체
저장하려면 add 쓰면 된다
성공하면 true 반환
실패하면 false
2) index - 저장위치
어느 위치에 저장할 지 정할 수 있음
3) addAll - Collection 주면
Collection이 갖고 있는 요소를
저장할 수 있음.
어디에 추가할 지 위치 정할 수 있다
1) 저장한 걸 삭제할 땐 remove
2) 특정위치에 있는 객체를 삭제할 때
3) collection에 있는 객체들을 삭제하는 것
4) clear은 arrays에 있는 모든 객체를 삭제
1) index of - 검색
객체가 몇 번 째에 저장돼있는지
못찾으면 -1을 반환한다
2) last index of
- 오른쪽 끝에서부터 왼쪽으로 찾음
(index of 와 반대)
3) contains - 객체가 존재하는 지
4) 특정 개체 읽기
5) 특정위치에 있는 객체를
다른 걸로 변경하는 것
1) from 위치에서 to 사이에있는
객체들을 뽑아서
새로운 list를 만드는 것
2) Arraylist의 객체 배열을 반환
3) boolean isEmpty()
arraylist가 비어있는 지
확인하는 메서드
4) 빈공간 제거
5) arraylist에 저장된 객체의 갯수를 반환
길이 10 인 ArrayList 생성
add 메서드 호출하면
맨 뒤에 하나씩 추가되는 것
숫자로만 표현했지
객체 있고 객체 주소가 하나씩 들어감
Object 배열임 이게
참조형이니까 주소값 저장
간단히 5라고 써도 된다
List에는 객체배열이니까
객체만 저장가능하다
근데 어떻게 숫자 5가 저장될 수 있을까?
: autoboxing에 의해서
기본형이 참조형으로 자동변환
List의 subList
: List의 일부를 뽑아서
새로운 List를 만듦
1이상 4미만
1<=x<4
라서 4는 안들어감
그래서 인덱스 4는 빠진,
4,2,0,이 출력된다
subList에 의해서 만들어진
List는 읽기전용임
그래서 새로운 ArrayList로
(new ArrayList)
만들어줘야지만 바꿀 수 있다
이건 ArrayList(Collection C)를 이용한 것
따로 지시 안하면 오름차순으로 정렬
Collection 은 인터페이스고
Collections 는 util클래스
Collections.sort
: Collection을 정렬하는 기능
<containsAll >
List1이 List2의 모든 요소를 포함하고 있느냐고 묻는 것
그래서 그 결과는 맞으니
true가 나옴
(List2의 요소가
List1에 다 있기 때문)
그냥 뒤에다가 추가할 수도 있는데
추가할 위치를 지정해서
추가할 수도 있음
중간에 뭘 끼워넣는건
부담가는 작업이긴 함
set - 변경
index 3 에 있는 걸
AA로 변경하는 것 (치환)
기존에 있는 A는 없어지고
새로운 객체
집어넣은 것이다
인덱스 0번째 위치에다가
문자열 1을 넣는다면,
기존에 있는 요소들이
한 칸 씩 옮겨감
그나저나 들어온 숫자는 문자열이지만
나머지 숫자들은 integer임
indexOf
: 지정된 객체의 위치(인덱스) 알려줌
list1에서
문자열1이 어딨는지
index로
알려준다
remove
: 지우는 것
인덱스 0번째 위치 지우기
또는 이렇게 지울 수도 있다
파란 커서 위치의
1이 사라짐
맨 앞의 1이 왜 아닐까?
아까 맨 앞에 있던 건
Integer가 아니라
String이었음
<주의!>
list1.remove(1);
이것의 의미는 숫자 1을
삭제한다는 것이 아니라
인덱스가 1인 객체를 삭제한다는 뜻
숫자 1을 삭제하려면 이렇게 쓰기
retainAll
list1에서 list1 하고 list2 둘의
겹치는 부분 남기고
나머지 삭제
반대로 list2에서
list1에 있는걸 삭제
list2에 있는 요소들을
하나씩 읽어가면서 확인
list2.get(i)
: list2에 있는 걸 갖고오는 것
i = 0이면
0번째 index에 있는 걸
갖고오는 거라 숫자 0을 갖고옴
list1.contains
: list1에 있는 지를 물어보는 것
index 2 에 있는걸 삭제하려고
list.remove(2)를 호출
그러면 아래에 있는 것을
한 칸 씩 위로 복사함
대신 덮어쓴거라
마지막에 4가 남음
그 마지막 4를
null로 바꾸고
(size - 저장된 객체의 개수)
개수가 5인 걸
하나 줄었으니 4로
사이즈 값을 바꿔줘야 함
삽입할 땐,
뭔가 넣고 싶으면
한 칸 밑에 칸으로 복사함
삽입할 떈 아까의
반대로 하면 됨
만약, 마지막 데이터
data[4]
를 삭제할 때는
data를 옮길 필요가 없으므로
1의 과정을 생략한다
null 집어넣고
size 1 감소시키면 됨
ArrayList에 저장된 객체 삭제하는 반복문
size가 5고
i가 0부터
1씩 증가하면서
삭제되는 것
data[0]이 삭제되면
나머지들이 위로 한 칸 씩
올라감
remove(1)이되면
index 1 인 숫자 2가 삭제됨
이런식으로 하면
for문을 다 돌아도
남아있는 숫자가 있음
(1,3)
(삭제할때마다 아래 숫자가 올라와서)
그래서,
맨 뒤에부터 삭제해야 함
list.size()-1;
size 5 - 1 이니까
index 4 부터 사라짐
즉, 배열복사
data 이동이 없다
'> 프로그래밍 언어 > JAVA' 카테고리의 다른 글
[ch11-15~18] Stack과 Queue (0) | 2023.01.23 |
---|---|
[ch11-12~14] LinkedList (0) | 2023.01.21 |
[ch11-3~6] Collection, List, Set, Map (2) | 2023.01.19 |
[ch11-1~2] 컬렉션프레임워크와 핵심 인터페이스 (0) | 2023.01.19 |
[ch6-11] 선언 위치 변수 종류 (0) | 2023.01.17 |