백터(Vector)는 Collection을 상속받고 있는 List를 상속받고 있습니다.
그림과 같은 형태를 가지고 있습니다.
또한 백터는 리스트를 상속받고 있으므로 리스트와 같은 속성을 가집니다.
데이터의 순서가 있으며 중복을 허용합니다.
List를 알아보기 전에 Vector의 특징은 어떨까요??
Vector<Integer> v = new Vector<Integer>(10,5);
우선 백터는 위와 같은 형태로 사용됩니다.
Vector(iCa, cpIn)인데요.
iCa는 용량(capacity), cpIn만큼 용량 증가라는 의미입니다.
즉 iCa만큼 용량을 만들며 cpln만큼 용량을 증가시킵니다.
package com.test01;
import java.util.Vector;
public class MTest01 {
public static void main(String[] args) {
Vector<Integer> v = new Vector<Integer>(10,5);
System.out.println(v.size() + " : " + v.capacity());
for(int i = 0; i < 9; i++) {
v.add(i);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
}
v.add(9);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
v.add(10);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
v.remove(0);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
}
}
위 코드의 실행 결과입니다.
우선 컬렉션은 배열과 다르게 크기가 고정적이지 않고 가변적입니다.
위의 백터에서는 처음에 10만큼 용량을 주었지만 5만큼 변화시키겠다고 정의되어 있습니다.
System.out.println(v.size() + " : " + v.capacity());
이 출력문에서 해당 백터의 길이와 용량을 알아보았습니다.
백터 v의 길이는 현재 0이며 용량은 10입니다.
for(int i = 0; i < 9; i++) {
v.add(i);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
}
for문에서 배열 v에 0부터 8까지 대입하였습니다.
add는 추가하는 메소드이며 삭제 메소드는 remove입니다.
v.add(9);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
9를 추가했을 때 v의 길이는 10이고 용량도 10이었습니다.
v.add(10);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
10을 추가하면 길이가 11이 되며 용량이 15로 증가합니다.
v.remove(0);
System.out.println(v + " -> " + v.size() + " : " + v.capacity());
0번째 백터가 삭제되었으며 길이가 다시 10으로 줄어들었지만 용량은 15로 변하지 않습니다.
package com.test01;
import java.util.Vector;
public class MTest02 {
public static void main(String[] args) {
Vector<String> v = new Vector<String>();
v.add("홍길동");
v.add("이순신");
v.add("김선달");
v.add("강호동");
v.add("유재석");
v.add("신동엽");
v.add("조세호");
prn(v);
System.out.println("-------------------------");
transElement(v);
}
public static void prn(Vector<String> vector) {
//향상된 for문 (foreach) -> for(객체 안에 있는 값을 (끝까지) 받는 변수 : 객체(덩어리, 뭉치, 뭔가 많이 들어가 있는 애들)
for(String s : vector) {
System.out.print(s + " ");
}
System.out.println();
}
public static void transElement(Vector<String> vector) {
// 1. "홍길동"의 인덱스를 찾아서, 해당 인덱스의 값을 "홀길순"으로 바꾸자.
//vector.indexOf("홍길동"); // 홍길동이 어디에 들어있는지 확인
vector.set(vector.indexOf("홍길동"), "홍길순");
prn(vector);
// 2. "~신"으로 끝나는 객체를 찾아서, 만일 있으면 "신"->"자"로 바꾸자.
for (int i = 0; i < vector.size(); i++) {
if(vector.get(i).endsWith("신")){
vector.set(i, vector.get(i).replace("신", "자"));
}
}
prn(vector);
// 3. 마지막 글자가 "호"인 이름을 찾아서, 만일 있으면 삭제하자.
/*for (String s : vector) {
if(s.endsWith("호")){
vector.remove(s));
}
}
이렇게 쓰면 에러가남!
*/
for (int i = 0; i < vector.size(); i++) {
if(vector.get(i).endsWith("호")){
vector.remove(vector.get(i));
}
}
prn(vector);
}
}
우선 prn 메소드부터 보겠습니다.
public static void prn(Vector<String> vector) {
for(String s : vector) {
System.out.print(s + " ");
}
System.out.println();
}
해당 메소드에는 for문이 들어있지만 우리가 지금까지 봐왔던 for문과 조금 형태가 다릅니다.
이 형태는 향상된 for문이라고 할 수 있으며 foreach문이라고도 불립니다.
for(객체 안에 있는 값을 (끝까지) 받는 변수 : 객체(덩어리, 뭉치 등)
이렇게 쓰이는데요.
배열을 처음부터 끝까지 반복 시킬 때 사용된다고 볼 수 있습니다.
for(String s : vector) {
System.out.print(s + " ");
}
위의 반복문에서는 백터에 담긴 값을 하나씩 가져오게 됩니다.
'Java 관련 > Java' 카테고리의 다른 글
[Java] Set Collection(셋 컬렉션) (0) | 2021.11.14 |
---|---|
[Java] List Collection(리스트 컬렉션) (0) | 2021.11.13 |
[Java] 컬렉션(Collection framework) (0) | 2021.11.11 |
[Java] 제네릭(Generic) (0) | 2021.11.10 |
[Java] 싱글톤 패턴(Singleton pattern) (0) | 2021.11.09 |