2020.10.21 고급자바 수업 내용 정리 Vector

 컬렉션 대표 :



1) List

*초창기때 벡터가있었다 --> List 

현재도 지원을 해준다. ( 예전에 만든 것을 지원해주려고 ) 




2) Map ,



3) Set(Set 은 중복되는 데이터를 넣을 수 없다. )  ,,,, 

 

데이터 , 변수 , 배열 , List ( add 메소드를 이용해서 저장한다. 배열처럼 크기가 정해져 있지 않다. ),

메소드 , 클래스  




package kr.or.ddit.basic;


import java.util.Vector;


public class VectorTest {


    public static void main(String[] args ) { 

        Vector v1 = new Vector(); 

        System.out.pritnln("크기 : " + v1.size());  

        // 데이터 추가 첫번째 방법 : add(추가할 데이터) 

        // 반환값 : 추가성공(true) 실패하면(false) 반환한다. 

        v1.add("aaaa"); // 문자열 추가 가능 

        v1.add(new Integer(123)); // 2 

        v1.add(123) ;  // 1 

        //저장하려고 하는 데이터는 객체여야 한다. : String 객체, Integer 객체 (int 형 데이터           를 객체화시킨것 : 레퍼클래스 ) 

        // autoboxing : 일반 데이터를 컴퓨터가 자동으로 변환해주는것 1번이 2번으로 가는            

        v1.add('a') ; 

        v1.add(true); // 논리 데이터도 저장이 가능하다. 

 

        // 실수형 데이터 : double (8 byte), float( 4 byte ) 

        boolean r = v1.add(3.14); // 그냥 숫자를 쓰면 기본적으로 double 형으로 저장된다. 

        //만약 folat 을 쓰고 싶으면 v1.add(3.14f) 

       System.out.println("현재크기 : " + v1.size()); 

        System.out.println("반환값 : " + r ) ; 

        // 반환값이 true : add가 성공했다. 

        // 데이터 추가 두번째 방법 : addElement (추가할 데이터 ) ==>

        이전 버전에서 사용하던 메서드 

        이전 버전의 프로그램도 사용할 수 있도록 하기 위해서 남아있는 메서드 

        v1.addElement("ccc"); 

        

        System.out.println(" v1 : " + v1.toString()); 

         동일하다 = 

        System.out.println(" v1 : " + v1); 

중요  ** array = new int[] { 1,2,3,4,5} ; 

System.out.println(Arrays.toString(array)); 

//Arrays.toString() 은 배열을 출력할때 항상 써줘야 한다. Vector 랑 ArrayList 는 상관이 없다.  

            

        데이터추가 세번째 방법  : add(index, 데이터 )

        //'index' 번째에 '데이터' 를 끼워 넣는다.

        // 'index' 는 0부터 시작한다. 

        // 반환값이 없다. 


        v1.add(1, "kkk"); 

        //1번 index 에 kkk의 값을 넣어준다. 

        //원래 있던 값은 뒤로 한칸씩 밀려난다. 

        System.out.println("v1 : " + v1 ) ; 

        

        // 데이터를 수정하는 방법 ( 변경하는 방법 ) : set(index, 새로운 데이터 ) 

        // 'index' 번쨰의 데이터를 '새로운 데이터' 로 덮어 쓴다.     

        // 반환값 : 원래의 데이터 가 반환값으로 나온다. 



        String temp = (String)v1.set(0, "zzz"); 

        System.out.println("v1 : " + v1); 

        

        *(String)을 붙여준 이유    

       //String temp = v1.set(0, "zzz") ; 

       부모쪽에 있는 변수를 자식쪽에 있는 변수에 저장되는게 불가능 컴파일                           에러가 뜸 ->  형변환을 해줘야함 

        System.out.println("v1 : " + v1 ) ; 

        System.out.println("반환값(원래의 데이터 ) : " + temp ) ; 

        --> temp 은 aaaa가 출력된다. 


         데이터 삭제 : remove (index) 

        -> 'index' 번째의 데이터를 삭제한다. 

        -> 반환값 : 삭제한 데이터 

        v1.remove(0); 

        System.out.pritnln("삭제 후 v1 " + v1) ; 

        temp = (String)v1.remove(0)

         System.out.println("삭제된 자료 : " + temp) ; 

        System.out.println("삭제 후 : " + v1 ) ; 

        

        //데이터 삭제 : remove ( 삭제할 데이터 ) 

        //삭제할 데이터를 찾아서 삭제한다. 

        //삭제할 데이터가 여러개이면 앞에서부터 한번에 하나씩 삭제된다. 

        //반환값 : 삭제를 성공하면 true 삭제를 실해하면 false 가 나온다. 

        //삭제할 데이터가 '정수형' 이거나 'char형 ' 일 경우에는 반드시 객체형으로 변환해서 

        사용해야 한다. 


        v1.remove("ccc"); 

        System.out.println("삭제 후 v1 : " + v1 ) ; 

        //v1.remove(123); 

        //위에는 오류가 난다. 삭제할 때도 데이터를 객체로 등록해야 한다. 

        아래처럼 써주어야 한다. 

        v1.remove(new Integer(123)); 

        System.out.println(" 삭제후 v1 " + v1); 


 vi.remove('a' ) ;  이부분도 오류가 난다 

        System.out.prinltn("삭제 후 v1 : " + v1 ); 

          오류가 나는 이유 : 객체형으로 바꿔줘야 하기 때문에 

        vi.remove(new Character('a')) 로 바꾸어 줘야 한다. 


        v1.remove(3.14); 

        v1.remove(true); 

        System.out.println("삭제후 v1 : " + v1) ; 

        ** 위에서 정수형이거나 char 형일때는 객체로 remove 를 해줘야 한다고 해줬잖아. 

        지금 3.14는 실수형이고 true 는 boolean 형이라서 객체로 써주지 않아도 된다.     

        ** 123 123 두개가 있으면 앞에 있는거 지운다. 


        // 데이터 꺼내오기 get(index) 

        // 'index' 번째 데이터를 반환한다. 


        int data = (int)v1.get(0) ; 

        내생각 : 그러니까 주소를 불러오는거라고 생각해서 int 로 형변환을 한거 같기도 .....

        System.out.println( " 0 번째 자료 : " + data ) ; 


        제네릭 타입 

        (Generic Type -> 객체를 선언할 때 < > 괄호 안에 그 Collection이 사용할  데이터의

        타입을 정해주는 것을 말한다. 

        이런식으로 객체를 선언하게 되면 그 데이터 타입 이외의 다른 종류의 데이터를 저장할     수 없다. 

        단 제네릭으로 선언될 수 있는 데이터 타입은 클래스형이어야 한다. 

        그래서 int 는 Integer, boolean 은 Boolean, char 은 Character 등으로 사용해야 한다. 

        제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 형변환이 필요가 없다. 

        


        Vector<String> v2 = vew Vector<String>(); 

        문자열인 String 데이터만 저장할 수 있는 Vector 객체 선언 

        Vector<Integer> v3 = new Vector<>(); 

        // int 형 데이터만 저장할 수 있는 Vector 객체 선언 

        //앞에 선언할 때만 <> 안에 타입 적어주면 된다. 아래 보라 글씨 처럼 

        Integer 타입만 저장할 수 있는 Vector 근데 int 는 안된다. 

        v2.add("안녕하세요") 

        // v2.add(123) ; 제네릭타입과 다른 종류의 데이터를 저장 할 수 없다. 

        String temp2 = v2.ger(0); 형변환을 할필요가 없다. 왜냐하면 처음에 객체 선언 할때

        이미 String 타입으로 정의를 해줬기 때문에 

        

        Vector<Vector> vv = new Vector<>() ; //배열로 치면 2차원 배열 같은것 

        Vector<Vector<Vector>> vvv = new Vector<>(); // 3차원 배열 같은것 


        데이터 전체 삭제 clear()

        System.out.println(" v2 의 클리어 전 size : " + v2.size());


        v2.cleasr(); 

        System.out.println(" v2 의 클리어 후 size : " + v2.size());

System.out.println("-------------------------------------------");

        v2.add("AAA"); 

        v2.add("BBB"); 

v2.add("CCC"); 

v2.add("DDD"); 

v2.add("EEE");       

                


        Vector<String> v4 = new Vector ();

v4.add("BBB"); 

v4.add("EEE"); 

System.out.println("v2 : " + v2 );

         System.out.println("v4 : " + v4);


        데이터 삭제 : removeAll( Collection 객체 ) 

        //'Collection 객체' 가 가지고 있는 데이터를 Vector 에서 찾아서 모두 삭제한다. 

        // 반환값 : 작업성공 ( true) , 작업실패 ( false) 


        v2.removeAll(v4); // v2가 가지고 있는 Vector 안에서 v4가 가지고 있는 것들을 다 지워라 

        System.out.println("삭제 후 v2 : " + v2);

System.out.println("삭제 후 v4 : " + v4); //v4는 이용하는 데이터라서 변하지 않는다. 


         v2.clear();

v2.add("AAA"); 

v2.add("BBB"); 

v2.add("CCC"); 

v2.add("DDD"); 

v2.add("EEE");

// 벡터의 데이터를 순서대로 가져와 모두 사용하고 싶으면 반복문을 사용하면 된다. 

// (주로 for 문을 사용한다.)

for(int i = 0 ; i < v2.size() ;  i++) { 

System.out.println(i + "번째 자료 : " + v2.get(i));

}

System.out.println("---------------------------------");

다른 for 문 

for(String str : v2) { 

System.out.println(str);

// 처음부터 끝까지 순서대로 뽑아낼 수 밖에 없다. 

}

}



댓글