- 요소의 저장 순서가 유지된다.
- 같은 요소의 중복 저장을 허용한다.
- 대표적인 List컬렉션 클래스에 속하는 클래스로는 ArrayList, LinkedList, Vector, Stack 가 있다.
- ArrayList와 동일한 내부구조로 값이 추가되면 자동으로 크기가 조절되며 한자리씩 뒤로 이동한다.
- 동기화된 메소드로 구성되어있어 멀티 스레드가 동시에 이 메소드들을 실행할수 없기때문에 안전하게 객체를 추가 할수있다.
- 데이터를 순차적으로 저장하기 때문에 가장 뒤에서부터 데이터를 삭제 하거나 삽입하는 경우에 적합하다.
Vector v = new Vector();//타입 미설정 Object로 선언된다.
Vector<Member> member = new Vector<Member>(); //타입설정 Member객체만 사용가능
Vector<Integer> num1 = new Vector<Integer>(); //타입설정 int타입만 사용가능
Vector<Integer> num2 = new Vector<>(); //new에서 타입 파라미터 생략가능
Vector<Integer> num3 = new Vector<Integer>(10);//초기 용량(capacity)지정
Vector<Integer> num4 = new Vector<Integer>(Arrays.asList(1,2,3)); //초기값 지정
Vector<Integer> v = new Vector<Integer>(10);//Vector생성
v.add(3); //값 추가
v.add(null); //null값도 add가능
v.add(1,10); //인덱스1에 10 삽입
System.out.println(v.size()); //vector 자료 개수 : 3
System.out.println(v.capacity()); //Vector 물리적크기 : 10
Vector v = new Vector();
Member member = new Member(name,age);
v.add(member);
v.add(new Member("홍길동",17));
v.remove(1); //인덱스 1 제거
v.removeAllElements(); //모든 값 제거
v.clear(); //모든 값 제거
🔎 벡터 초기용량을 10으로 지정해주어 capacity()메서드를 사용해서 출력할수있다.
Vector<Integer> v = new Vector<Integer>(Arrays.asList(1,2,3));//Vector 생성
System.out.println(v.get(0));//인덱스0 값을 출력
for(Integer i : v) { //for문을 통한 전체출력
System.out.println(i);
}
Iterator it = v.iterator(); //Iterator 선언
while(it.hasNext()){//다음값이 있는지 체크
System.out.println(it.next()); //값 출력
}
Vector<Integer> v = new Vector<Integer>(Arrays.asList(1,2,3));//Vector 생성
System.out.println(v.contains(2)); //Vector에 2이 있는지 검색 : true
System.out.println(v.indexOf(2)); //2가 있는 index반환 없으면 -1
- Last In First Out => LIFO 먼저 들어간 자료가 나중에 제일 마지막에 나오는 구조
- 인터럽트처리, 수식의 계산, 서브루틴의 복귀 번지 저장 등에 쓰인다.
- 그래프의 깊이 우선 탐색(DFS)에서 사용한다.
- 재귀적(Recursion) 함수를 호출 할 때 사용한다.
Stack v = new Stack();//타입 미설정 Object로 선언된다.
Stack<Member> member = new Stack<Member>(); //타입설정 Member객체만 사용가능
Stack<Integer> num1 = new Stack<Integer>(); //타입설정 int타입만 사용가능
Stack<Integer> num2 = new Stack<>(); //new에서 타입 파라미터 생략가능
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); // stack에 값 1 추가
stack.push(2); // stack에 값 2 추가
stack.push(3); // stack에 값 3 추가
System.out.println(stack.size()); //list 크기 : 3
stack.pop(); // stack의 가장 상단의 값 제거
stack.peek();// stack의 가장 상단의 값 출력
stack.clear(); // stack의 전체 값 제거 (초기화)
🔎 pop()는 값을 꺼내 삭제하고, peek()는 삭제는 하지 않는다!
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); //stack에 값 1 추가
stack.push(2); //stack에 값 2 추가
System.out.println(stack.get(0)); //인덱스0 값 출력
for(Integer i : stack) { //for문을 통한 전체출력
System.out.println(i);
}
Iterator<Integer> iter = stack.iterator(); //Iterator 선언
while(iter.hasNext()){//다음값이 있는지 체크
System.out.println(iter.next()); //값 출력
}
Stack<Integer> stack = new Stack<>(); //int형 스택 선언
stack.push(1); //stack에 값 1 추가
stack.push(2); //stack에 값 2 추가
System.out.println(stack.size()); //stack의 크기 출력 : 2
System.out.println(stack.isEmpty()); //stack이 비어있는지 check (비어있다면 true)
System.out.println(stack.contains(1)); //stack에 1이 있는지 check (있다면 true)