고급 자바 Vector(추가, 수정, 삭제, 데이터 꺼내오기) /김씨성 이름 출력하기(substring, subSequence, startsWith, charAt, indexOf)

조수경·2021년 10월 28일
0

고급자바

목록 보기
1/97
post-thumbnail
package kr.or.ddit.basic;

import java.util.Vector;

public class VectorTest01 {

	public static void main(String[] args) {
		// 컬렉션 객체 저장되는 데이터는 객체만 저장할 수 있다. 
		
		// 객체 생성
		Vector vl = new Vector(); //모든 객체(데이터)를 저장 가능
		
		System.out.println("처음 크기 : "+ vl.size()); //크기 나옴

데이터 추가: add(추가할 데이터)

    //반환값 : 성공(true),실패(false)
	vl.add("AAAA");
	vl.add(new Integer(123));// 객체화 시켜서 넣어야됨(불편해..)
	vl.add(111);//요즘은 개선되어 숫자 데이터를 넣어도 됨(오토 박싱으로 자동으로 객체화 된다.)
	vl.add('a');//오토박싱
	vl.add(true);//오토박싱
	boolean r = vl.add(3.14);//실수형도 가능
	
	System.out.println("vl의 크기 : "+vl.size());
	System.out.println("반환값 : "+r);
	System.out.println("vl ==> "+vl);//벡터에 현재 들어 있는 값 
	System.out.println("vl ==> "+vl.toString());//위와 같음
	

데이터 추가2: addElement(추가할 데이터)

//이전 버전의 Vector에서 사용하던 메서드
vl.addElement("KKK");
System.out.println("vl =>"+vl);

데이터 추가3: add(index, 데이터)

//==> index번째에 '데이터'를 끼워 넣는다.
//==> index는 0부터 시작한다.
//==> 반환값은 없다.
vl.add(1, "ZZZ");//1 번째 자리에 ZZZ를 추가해라
System.out.println("vl =>"+vl);//ZZZ가 추가되고 나머지는 뒤로 밀려남

데이터 수정: set(index, 새로운 데이터)

// ==> 'index'번째 자료를 '새로운 데이터'로 변경한다.
// 반환값: 원래의 데이터 반환됨
String temp = (String)vl.set(0, "YYYY"); //데이터 형이 바뀐 데이터가 들어감
//부모객체 변수에는 자식 객체를 저장할 수 있지만 부모객체를 자식에 저장할 때는 자동으로 형변환이 일어나지 않음 그래서 형변환 해주기
System.out.println("v1 =>"+vl);
System.out.println("원래의 데이터 : "+ temp);

데이터 삭제 : remove(index)

// ==> 'index'번째의 데이터를 삭제한다.
// ==> 반환값: 삭제된 데이터가 반환값으로 나옴
vl.remove(0);//0번재 값 삭제
System.out.println("삭제 후 : "+ vl);

temp = (String)vl.remove(0);
System.out.println("삭제 후 : "+ vl);
System.out.println("삭제된 데이터 : "+ temp);

데이터 삭제2: remove(삭제할 데이터) --> 한번에 한개씩만 삭제 가능

// ==> '삭제할 데이터'를 찾아서 삭제한다.
// ==> '삭제할 데이터'가 여러개이면 앞에서부터 삭제된다.
// ==> 반환값: 삭제성공(true), 삭제실패(false)
// ==> '삭제할 데이터'가 '정수형'이거나 'char형'일 경우에는 '삭제할 데이터'를 객체로 변환해서 사용해야 한다.
vl.remove("KKK");
System.out.println("삭제 후 : "+vl);

// vl.remove(111);//111은 삭제가 안됨(오류) -> 인덱스로 인식하기 때문에 에러가남 -> 이럴때는 어쩔 수 없이 객체화 시켜야함
vl.remove(new Integer(111));
System.out.println("삭제 후 : "+vl);

// vl.remove('a');//위와 같은 에러가 남 : 작은 따옴표로 감싼 문자는 코드 값으로 바뀌어서 처리가 됨 (a=97)
vl.remove(new Character('a'));
System.out.println("삭제 후 : "+vl);

vl.remove(true);
System.out.println("삭제 후 : "+vl);

vl.remove(3.14);
System.out.println("삭제 후 : "+vl);

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

  // ==> 'index'번째의 데이터를 반환한다.
  int data = (int)vl.get(0);
  System.out.println("0번째 자료 : " + data);
  
	  //----------------------------------------------------
	  /**
	   * 제네릭 타입(Generic Type) ==> 클래스 내부에서 사용할 데이터의 타입을 외부에서 지정하는 기법
	   * => 객체를 선언할 때 <>안에 그 객체가 사용할 데이터의 타입을 정해준다. 
	   * => 이런식으로 선언하게 되면 그 데티어 타입 이외의 데이터를 저장할 수 없다. 단, 제네릭으로 선언될 수 있는 데이터 타입은 클래스형이어야 한다.
	   * 예) int ==> Integer, boolean ==> Boolean, char ==> Character등으로 대체해서 사용해야 한다. 
	   * => 제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때 별도의 형변환이 필요없다. 
	   */
	  
	  Vector<String> v2 = new Vector<>();//Vector<String> v2 = new Vector<String>();String 생략 가능
	  Vector<Integer> v3 = new Vector<>();
	  
	  v2.add("안녕하세요");
//	  v2.add(123); //오류: 제네릭 타입과 맞지 않는 자료형 추가

	  String temp2 = v2.get(0);//v2에는 string만 있기 때문에 형변환이 필요없다.
	  
	  Vector<Vector> vv = new Vector<>(); //2차원 배열
	  Vector<Vector<Vector>> vvv = new Vector<>(); //3차원 배열
	  
	  //-------------------------------------------------------
	  System.out.println("-------------------------------------");
	  v2.clear(); //전체 데이터 삭제
	  
	  System.out.println("v2의 크기 : "+ v2.size());
	  
	  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);
	  
**데이터 삭제3** **: removeAll(Collection 객체) -> 벡터가 가지고 있는것 중에 괄호 속에 들어있는 것을 삭제해라
	  // => 'collection객체'가 가지고 있는 데이터를 모두 삭제한다.
	  // => 반환값 : 성공(true), 실패(false)
	  v2.removeAll(v4); //2에서 4가 가지고 있는 것들을 삭제해라
      System.out.println("v2.removeAll(v4) =>"+v2);	  
	  System.out.println();
      
	  System.out.println("--------------------------------");
	  
	  v2.clear();
	  v2.add("AAA");
	  v2.add("BBB");
	  v2.add("CCC");
	  v2.add("DDD");
	  v2.add("EEE");
	  
	  //전체를 하나하나 꺼내서 사용하고 싶을떼 반복문 사용
	  //vector의 데이터를 처음부터 차례로 읽어와 처리하고 싶으면 반복문을 사용하면 된다.
	  for (int i = 0; i < v2.size(); i++) {
		System.out.println(i + "번째 자료 : "+ v2.get(i));
	}
	  System.out.println("-----------------------------");
	  
	  //향상된 for 문
	  for(String s : v2){//벡터 크기만큼 첫번재 데이터를 꺼내와서 s에 저장하고 밒에 출력문을 출력하고 또 올라가서 가져오고 저장하고 출력함
		  System.out.println(s);
	  }
	  
	  
	}

}


package kr.or.ddit.basic;

import java.util.ArrayList;

public class ArrayListTect01 {

	public static void main(String[] args) {
		//ArrayList는 기본적인 사용법이 Vector와 같다.
		
		ArrayList list1 = new ArrayList();//객체 생성
		
		//add()메서드를 이용해서 추가한다.
		list1.add("aaa");
		list1.add("bbb");
		list1.add(123);
		list1.add('k');
		list1.add(false);
		list1.add(123.45);
	
	System.out.println("list =>"+ list1);
	System.out.println("size =>"+list1.size());
	
	//get()메서드로 데이터를 꺼내온다.
	System.out.println("2번째 데이터: "+ list1.get(2));
	
	//데이터 끼워넣기
	list1.add(3,"zzz");
	System.out.println("list =>"+ list1);
	
	//데이터 수정하기
	String temp = (String)list1.set(3, "yyy");
	System.out.println("temp =>"+temp);
	System.out.println("list =>"+list1);
	
	//삭제도 같다.
	list1.remove(3);
	System.out.println("list =>"+ list1);
	
	list1.remove("bbb");
	System.out.println("list =>"+ list1);
	System.out.println();
	System.out.println("-------------------------------------");
	
	//제네릭을 사용할 수 있다.
	ArrayList<String> list2 = new ArrayList<>();
	
	list2.add("AAA");
	list2.add("BBB");
	list2.add("CCC");
	list2.add("DDD");
	list2.add("EEE");

	for (int i = 0; i < list2.size(); i++) {
		System.out.println(i+"==>"+list2.get(i));
	}	
	System.out.println("-------------------------------");
	for(String str : list2){
		System.out.println(str);
	}
	System.out.println("-------------------------------");
	
   

contains(비교객체)
// ==> List에 '비교객체'가 있으면 true, 없으면 false 반환
System.out.println("DDD값 존재 여부: "+ list2.contains("DDD")); //TURE
System.out.println("YYY값 존재 여부: "+ list2.contains("YYY")); //FALSE

indexOf(비교객체)
//=> List에 '비교객체'가 있으면 '비교객체'가 있는 index값을 반환한다. 없으면 -1을 반환한다.
System.out.println("DDD의 위치값 : "+ list2.indexOf("DDD"));
System.out.println("YYY의 위치값 : "+ list2.indexOf("YYY"));

toArray() => List안의 데이터를 배열로 변환하여 변환한다.
// => 기본적으로 Object형 배열로 변환한다.
//지정한 제네릭 타입에 맞는 배열로 번환하기
//=>toArray(new 제네릭타입[0]);

	
	
	Object[] strArr = list2.toArray(); // object는 형변환 필요
	System.out.println("배열의 개수: "+strArr.length);
    for (int i = 0; i < strArr.length; i++) {
		 String str = (String)strArr[i];//형변환 불편
		 System.out.println(i + "==>" + str);
	}
	
    System.out.println("-------------------------------");
    
    String[] strArr2=list2.toArray(new String[0]);
    for (int i = 0; i < strArr.length; i++) {
		 String str =strArr2[i];//형변환  필요 없음
		 System.out.println(i + "==>" + str);
	}
    }
    }


문제) 5명의 사람 이름을 입력받아 ArrayList에 저장한 후에
저장된 ArrayList의 데이터 중 '김'씨 성의 이름을 모두 출력하시오.
(단, 입력은 Scanner 객체를 이용한다.)



     public class ArrayListTest02 {

	  public static void main(String[] args) {
	     
	      Scanner sc = new Scanner(System.in); 
	      
	      ArrayList<String> strArr = new ArrayList<>();
	      
	      
	      System.out.println(strArr);
	      
	      System.out.println("이름을 입력하세요.");
	      for(int i = 0; i < 5; i++){
	      String str = sc.nextLine();
	      strArr.add(str);
	      }
	      
	      System.out.println(strArr);
**substring**
	      System.out.println("1번쨰-------------------------------------------------------------");
	      System.out.println();
	      for (int i = 0; i < strArr.size(); i++) {
	         if(strArr.get(i).substring(0, 1).equals("김")){
	            System.out.print("김씨자르기 : " + strArr.get(i) + "\t");
	            }
	      }
System.out.println(strArr);
	      

**subSequence**
	      System.out.println("2번째-------------------------------------------------------------");
	      System.out.println();
	      for(String list : strArr){
	         if(list.subSequence(0, 1).equals("김")){
	            System.out.print("김씨subSequence : " + list + "\t ");
	         }
	      }
System.out.println(strArr);
	      

**startsWith**
	      System.out.println("3번쨰-------------------------------------------------------------");
	      System.out.println();
	      for(int i = 0; i < strArr.size(); i++){
	         if(strArr.get(i).startsWith("김")){
	            System.out.print("김씨포함 : " + strArr.get(i) + "\t");
	         }
System.out.println(strArr);
	      
	      
**charAt**
	      System.out.println("4번쨰------------------------------------------------------------");
	      System.out.println();
	      for (int i = 0; i < strArr.size(); i++) {
	         if(strArr.get(i).charAt(0) == '김'){
	            System.out.print("김씨charAt : " + strArr.get(i) + "\t ");
	         }
	      }
	      
	      
**indexOf**
	      System.out.println();
	      System.out.println("5번쨰------------------------------------------------------------");
	      for (int i = 0; i < strArr.size(); i++) {
	         if(strArr.get(i).indexOf("김") == 0){
	            System.out.print("김씨indexOf : " + strArr.get(i) + "\t ");
	         }
	      }
profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보