② List인터페이스: 순서O, 중복O
- ArrayList의 메서드
메서드 | 설명 |
ArrayList() | 크기가 0인 ArrayList를 생성한다. |
ArrayList(Collection c) | 주어진 컬렉션이 저장된 ArrayList를 생성한다. |
ArrayList(int initialCapacity) | 지정된 초기용량을 갖는 ArrayList를 생성한다. |
boolean add(Object o) | ArrayList의 마지막에 객체를 추가. 성공하면 true |
void add(int index, Ojbect element) | 지정된 위치(index)에 객체를 저장한다. |
boolean addAll(Collection c) | 주어진 컬렉션의 모든 객체를 저장한다. |
boolean addAll(int index, Collection c) | 지정된 위치부터 주어진 컬렉션의 모든 객체를 저장한다. |
Object clone() | ArrayList를 복제한다. |
boolean contains(Object o) | 지정된 객체(o)가 ArrayList에 포함되어 있는지 확인한다. |
Object get(int index) | 지정된 위치(index)에 저장된 객체를 반환한다. |
int indexOf(Object o) | 지정된 객체가 저장된 위치를 찾아 반환한다. |
boolean isEmpty() | ArrayList가 비어있는지 확인한다. |
Iterator iterator() | ArrayList의 Iterator객체를 반환한다. |
int lastIndexOf(Object o) | 객체(o)가 저장된 위치를 끝부터 역방향으로 검색해서 반환한다. |
ListIterator listIterator() | ArrayList의 ListIterator를 반환한다. |
ListIterator listIterator(int index) | ArrayList의 지정된 위치부터 시작하는 ListIterator를 반환한다. |
boolean remove(Object o) | 지정한 객체를 제거한다. (성공하면 true, 실패하면 false) |
boolean removeAll(Collection c) | 지정한 컬렉션에 저장된 것과 동일한 객체들을 ArrayList에서 제거한다. |
boolean retainAll(Collection c) | ArrayList에 저장된 객체 중에서 주어진 컬렉션과 공통된 것들만 남기고 나머지는 삭제한다. |
- ArrayList 예제
import java.util.*;
class JavaJungsuk_CollectionFramework_ArrayList_ex11_1 {
public static void main(String[] args) {
ArrayList list1=new ArrayList(10);
list1.add(new Integer(5));
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3)); //list1.add(3);도 가능.
ArrayList list2=new ArrayList(list1.subList(1,4));
print(list1, list2);
Collections.sort(list1);
Collections.sort(list2);
print(list1, list2);
System.out.println("list1.containsAll(list2):"+list1.containsAll(list2));
list2.add("B");
list2.add("C");
list2.add(3, "A");
print(list1, list2);
list2.set(3, "AA");
print(list1, list2);
System.out.println("list1.retainAll(list2):"+list1.retainAll(list2));
print(list1, list2);
for(int i=list2.size()-1; i>=0; i--) {
if(list1.contains(list2.get(i))
list2.remove(i);
}
print(list1, list2);
}
static void print(ArrayList list1, ArrayList list2) {
System.out.pritnln("list1:"+list1);
System.out.println("list2:"+list2);
System.out.println();
}
}
결과
list1:[5, 4, 2, 0, 1, 3]
list2:[4, 2, 0]
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4] //Collections.sort(list l)를 이용해서 정렬하였다.
list1.containsAll(list2) :true //list1이 list2의 모든 요소를 포함하고 있을 때만 true
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, A, B, C] //add(Object obj)를 이용해서 새로운 객체를 저장
list1:[0, 1, 2, 3, 4, 5]
list2:[0, 2, 4, AA, B, C] //set(int index, Object obj)를 이용해서 다른 객체로 변경
list1.retainAll(list2) :true //retainAll에 의해 list1에 변화가 있었으므로 true를 반환
list1:[0, 2, 4] //list2와의 공통요소 이외에는 모두 삭제됨.
list2:[0, 2, 4, AA, B, C]
list1:[0, 2, 4]
list2:[AA, B, C]
- ArrayList 객체 삭제
list1.remove(1); //index가 1인 객체를 삭제.
list1.remove(new Integer(1)); //Integer 1을 삭제.
→ ArrayList에 저장된 첫번째 객체부터 삭제하는 경우. (배열 복사가 발생한다.)
→ ArrayList에 저장된 마지막 객체부터 삭제하는 경우. (배열 복사가 발생하지 않는다.)
- LinkedList
: 링크드리스트(LinkedList)는 불연속적으로 존재하는 데이터를 연결한다. (연결리스트)
컬렉션 | 읽기(접근시간) | 추가/삭제 | 비고 |
ArrayList(배열) | 빠르다 | 느리다 | 순차적인 추가삭제는 더 빠름. 비효율적인 메모리사용 |
LinkedList(연결리스트) | 느리다 | 빠르다 | 데이터가 많을수록 접근성이 떨어짐. |
- Stack과 Queue
- Stack의 메서드
메서드 | 설명 |
boolean empty() | Stack이 비어있는지 알려준다. |
Object peek() | Stack의 맨 위에 저장된 객체를 반환. pop()과 달리 Stack에서 객체를 꺼내지는 않음. |
Object pop() | Stack의 맨 위에 저장된 객체를 꺼낸다. |
Object push(Object item) | Stack에 객체(item)를 저장한다. |
int search(Object o) | Stack에서 주어진 객체(o)를 찾아서 그 위치를 반환한다. 못 찾으면 -1을 반환. |
- Queue의 메서드
메서드 | 설명 |
boolean add(Object o) | 지정된 객체를 Queue에 추가한다. 성공하면 true 반환. |
Object remove() | Queue에서 객체를 꺼내 반환. |
Object element() | 삭제없이 요소를 읽어온다. peek와 달리 Queue가 비어있을 때 NoSuchElementException 발생. |
boolean offer(Object o) | Queue에 객체를 저장. 성공하면 true, 실패하면 false 반환. |
Object poll() | Queue에서 객체를 꺼내서 반환. 비어있으면 null 반환. |
Object peek() | 삭제없이 요소를 읽어온다. Queue가 비어있으면 null 반환. |
- Stack과 Queue 예제
import java.util.*;
class JavaJungsuk_CollectionFramework_StackQueue {
public static void main(String[] args) {
Stack st=new Stack();
Queue q=new LinkedList(); //Queue인터페이스의 구현체인 LinkedList를 사용
st.push("0");
st.push("1");
st.push("2");
q.offer("0");
q.offer("1");
q.offer("2");
System.out.println("= Stack =");
while(!st.empty()) {
System.out.println(st.pop()); //스택에서 요소 하나를 꺼내서 출력
}
System.out.println("= Queue =");
while(!q.isEmpty()) {
System.out.println(q.poll)); //큐에서 요소 하나를 꺼내서 출력
}
}
}
결과
= Stack =
2
1
0
= Queue =
0
1
2
→ 위 결과를 보면 Stack은 처음 저장된 0이 제일 밑으로 가기 때문에 2 1 0 순으로 꺼내지고,
Queue는 저장한 것과 같이 0 1 2 순으로 꺼내어진다.
'프로그래밍 > Java' 카테고리의 다른 글
Java_컬렉션 프레임웍(4)_Comparator와 Comparable, HashSet (0) | 2023.01.01 |
---|---|
Java_컬렉션 프레임웍(3)_Iterator, ListIterator, Enumeration, Map과 Iterator, Arrays의 메서드 (0) | 2022.12.28 |
Java_컬렉션 프레임웍(1) (0) | 2022.12.21 |
Java_날짜와 시간&형식화 (0) | 2022.12.18 |
Java_Java.lang패키지와 유용한 클래스(4)_Math클래스와 메서드, 래퍼 클래스, 오토박싱&언박싱 (0) | 2022.12.14 |