ddit/Java

Collection Framework(Array List, Vector...), generic / 문제풀기

ssong2ku 2022. 6. 22. 19:13
728x90

▶Vector

package kr.or.ddit.basic;

import java.util.Vector;

public class VectorTest {

	public static void main(String[] args) {
		//객체생성
		//벡터 내부에 배열이 있음
		Vector v1 = new Vector(); //Vector<Object> v1 = new Vector<Object>();
		
		System.out.println("처음 크기 :"+v1.size());
		
		//Collection에는 데이터를 객체만 저장할 수 있다.
		
		//데이터 추가 => add(추가할 데이터)
		//반환값 : 추가 성공(true), 추가실패(false)
		v1.add("aaaaa");
		v1.add(new Integer(111)); //예전에는 숫자기입시 , 
		//							객체생성시켜 래퍼클래스 사용하여 넣어야했음(박싱) ex)111
		v1.add(123); //지금은 개선돼서 직접 숫자를 기입해도 됨, 
		//              박싱,언박싱이 자동으로 일어남(오토박싱,오토언박싱)
		v1.add('a');
		v1.add(true);
		boolean r = v1.add(3.14f);
		
		System.out.println("현재 크기 : "+ v1.size());
		System.out.println("반환값 : "+ r);
		
		//데이터 추가 : addElement(추가할 데이터)
		//==> 예전 버전의 프로그램에서도 사용할 수 있도록 하기 위해 남아있는 메서드
		//요즘은 add를 씀
		
		v1.addElement("ccc");
		System.out.println("v1 => "+v1.toString());
		System.out.println("v1 => "+v1); //toString 생략가능
	
		//데이터 추가 : add(index, 데이터)
		//==> 'index'번째에 '데이터'를 끼워 넣는다.
		//==> 'index'는 0부터 시작한다.
		//==> 반환값을 없다.
		
		v1.add(1,"kkk");
		System.out.println("v1 => "+v1); 
		
		// 데이터 꺼내오기 : get(index)
		//==>'index'번째 데이터를 반환한다.
		int data = (int)v1.get(2);
		System.out.println("data => "+data);
		String str = ((String)v1.get(0));
		System.out.println("str => "+str);
		//데이터 수정하기 :set(index,새로운 데이터) 
		//==>'index'번째의 데이터를  '세로운 데이터'로 덮어쓴다
		//반환값 : 변경되지 못하기 전의 원해데이터
		 String temp = (String)v1.set(0,"zzzz");
		 System.out.println("v1 =>"+v1);
		 System.out.println("원래의 데이터 : "+temp);
		 
		 //데이터 삭제하기 : remove(index)
		 //==>'index' 번째의 데이터를 삭제한다
		 //==>'반환값' 번째의 데이터를 삭제한다
		 v1.remove(0);
		 System.out.println("v1 =>"+v1);
		 
		 temp = (String)v1.remove(0);
		 System.out.println("v1 =>"+v1);
		 System.out.println("삭제된 데이터 =>"+temp);
		 
		 //데이터 삭제하기 : remove(삭제할 데이터)]
		 //==> '삭제할 데이터'를 찾아서 삭제한다.
		 //==> '삭제할 데이터'가 여러개이면 앞에서부터 삭제한다.
		 //==> 반환값 : 삭제성공(true), 삭제실패(false)
		 //==> 삭제할 데이터가 '정수형'이거나 'char형'일 경우에는 반드시
		 //		객체로 변환해서 사용해야 한다.
		 
		 v1.remove("ccc");
		 System.out.println("v1 => "+v1);
		 
//		 v1.remove(123);	//인덱스로 인식하여 오류
//		 System.out.println("v1 => "+v1);
	
		 v1.remove(new Integer(123)); //값을 제거할 때는 오토박싱이 일어나지않음	
		 System.out.println("v1 => "+v1);
	
		 //v1.remove('a'); //a의 코드값인 97로 인식하여 오류
		 v1.remove(new Character('a'));
		 System.out.println("v1 => "+v1);
		 
		 v1.remove(true);
		 System.out.println("v1 => "+v1);
		 
		 //------------------------------------------------------------
		 /*
		  * 제네릭 타입(Generic type) ==> 클래스 내부에서 사용할 데이터의
		  * 	데이터 타입을 외부에서 지정하는 기법으로 객체를 선언할 때
		  * 	< >안에 그 객체의 내부에서 사용할 데이터의 타입을 정해주는 것을 말한다.
		  * 	이런식으로 선언하게 되면 지정한 데이터 타입 이외의 다른 종류의 데이터를
		  * 	저장할 수 없다.
		  * 	이 때 제네릭으로 선언될 수 있는 데이터 타입은 클래스형이어야 한다.
		  * 	(int ==> Integer, boolean ==> Boolean, char==> Character, ...)
		  * ==> 제네릭 타입으로 선언하게 되면 데이터를 꺼내올 때
		  * 	형 변환 없이 꺼내올 수 있다.
		  */
		 Vector<String>v2 = new Vector<String>(); 
		 Vector<Integer>v3 = new Vector<Integer>();
		 
		 v2.add("안녕하세용");
		 //v2.add(100); ==> 오류 : 다른 종류의 데이터를 저장할 수 없다.
		 
		 String temp2 = v2.get(0); // 형변환 없이 사용한다.
		 
		 Vector<Vector> vv = new Vector<Vector>();// 2차원배열처럼 쓸 수 있음
		 //-------------------------------------------------------------------
		 System.out.println("-------------------------------------------------");
	
		 //전체 데이터 삭제 : clear();
		 v2.clear();
		 System.out.println("v2의 size => "+v2.size());
		 
		 v2.add("AAA");
		 v2.add("BBB");
		 v2.add("CCC");
		 v2.add("DDD");
		 v2.add("EEE");
		 
		 Vector<String> v4 = new Vector <String>();
		 
		 v4.add("BBB");
		 v4.add("EEE");
		 
		 System.out.println("v2 => "+v2);
		 System.out.println("v4 => "+v4);
		 
		 
		 //데이터 삭제하기 : removeAll(Collection객체);
		 //==> Collection 객체가 가지고 있는 데이터를 모두 삭제한다.
		 //==> 반환값 : 성공(true),실패(false)
		 
		 v2.removeAll(v4); // v2에 있는 데이터 중 v4가 가지고 있는 
		 					//데이터와 일치하는 것들을 모두 삭제한다.
	
		 System.out.println("v2 => "+v2);
		 System.out.println("-------------------------------------------------");
		 //-----------------------------------------------
		 
		 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 s: v2)
			 System.out.println(s);
	}

}

▶ArrayList

package kr.or.ddit.basic;

import java.util.ArrayList;

public class ArrayListTest01 {

	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("size ==> "+list1.size());
		System.out.println("list1 ==> "+list1); //.toString생략
		
		//get()메서드로 데이터를 꺼내온다.
		System.out.println("1번쨰 자료 : "+list1.get(1));
	
		//데이터 끼워넣기
		list1.add(3, "zzz");
		System.out.println("list1 => "+list1);
		
		//데이터변경하기
		
		String temp =(String)list1.set(3, "yyy");
		System.out.println("list1 => "+list1);
		System.out.println("list1 => "+temp);

		//삭제도 같다.
		list1.remove(3);
		System.out.println("list1 => "+list1);
		
		list1.remove("bbb");
		System.out.println("list1 => "+list1);
		
		//제네릭을 사용할 수 있다.
		ArrayList<String>list2 = new ArrayList<String>();
		 list2.add("AAA");
		 list2.add("BBB");
		 list2.add("CCC");
		 list2.add("DDD");
		 list2.add("BBB");
		 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(비교객체) => 리스트에 '비교객체'가 있으면 true, 없으면 false를 반환
		 System.out.println("DDD값 : "+list2.contains("DDD"));
		 System.out.println("zzz값 : "+list2.contains("zzz"));
		 
		 // indexOf(비교객체)
		 //lastIndexOf(비교객체)
		 //==>리스트에 '비교객체'가 있으면 '비교객체'가 저장되어 있는
		 //   index값을 반환하고 '비교객체' 가 없으면 -1을 반환
		 
		 //indexOf()는 앞에서부터 뒤쪽방향으로 검색
		 //lastIndexOf()는 뒤에서 앞쪽방향으로 검색

		 System.out.println("1. BBB위치값 : " + list2.indexOf("BBB"));
		 System.out.println("2. BBB위치값 : " + list2.lastIndexOf("BBB"));
		 System.out.println("3. zzz위치값 : " + list2.lastIndexOf("zzz"));
		 System.out.println("--------------------------------");
		 
		 //toArray()==>리스트 안의 데이터를 배열로 변환하여 반환
		 //			==> 기본적으로  Object형 배열로 변환
		 
		 Object[]strArr = list2.toArray();
//		 String[]strArr = (String[])list2.toArray(); 
//		 ==> 이런 방법으로는 형변환 안됨
		 
//		 toArray(new  <제네릭타입>[0]);
//			==>제네릭타입의 배열로 변환
		 
		 String[]strArr2 = list2.toArray(new String[0]);
		 for(String str : strArr2) {
			 System.out.println(str);
		 }
		 
		 System.out.println("배열의 개수 : "+strArr.length);
		 for(Object i:strArr) {
			 System.out.println(i);
		 }
		 System.out.println("--------------------------------");
		 
		
		 
	
	
	}

}
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Scanner;

/*
 * 문제) 5명의 사람 이름을 입력 받아 ArrayList에 저장한 후에
 * 		이 들 중 '김'씨 성의 이름을 모두 출력하시오
 */


public class ArrayListTest02 {

	public static void main(String[] args) {
		Scanner scr = new Scanner(System.in); 
		ArrayList<String> arr = new ArrayList<String>();
		
		for(int i =0; i<5;i++) {
			System.out.println("이름을 입력하세요 : ");
			arr.add(i, scr.next());
			
			}
			
		for(int j=0; j<arr.size(); j++) {
			if(arr.get(j).substring(0,1).equals("김")) {
				System.out.println(arr.get(j));
			}
		}
	}

	static void Arraysam1(){
		Scanner scr = new Scanner(System.in); 
		ArrayList<String> nameList = new ArrayList<String>();
		
		System.out.println("5명의 이름을 입력하세요 : ");
		for(int i =0; i<5;i++) {
			System.out.println("(i+1)번째 이름 : ");
			String name = scr.next();
			nameList.add(name);
		}
		System.out.println();
		System.out.println("김씨 성을 가진 사람들... ");
		for(int j=0; j<nameList.size();j++) {
//			if(nameList.get(j).charAt(0)=='김') {
//				System.out.println(nameList.get(j));
//			}
//			if(nameList.get(j).indexOf("김")==0) {
//				System.out.println(nameList.get(j));
//			}
//			nameList.get(j).startsWith("김")==true 트루생략가능	
			if(nameList.get(j).startsWith("김")) {
				System.out.println(nameList.get(j));
			}
		}
	}
}
package kr.or.ddit.basic;

import java.util.ArrayList;
import java.util.Scanner;

/* 문제2) 5명의 별명을 입력 받아 ArrayList에 저장하고 이들 중에 별명의
 * 길이가 제일 긴 별명을 출력하시오.
 * (단, 각 별명의 길이는 모두 다르게 입력한다.)
 */
public class ArrayListTest2_2 {

	public static void main(String[] args) {
		Scanner scr = new Scanner(System.in); 
		ArrayList<String> arr = new ArrayList<String>();
		int max =0;
		int a=0;
		
		for(int i =0; i<5;i++) {
			System.out.println("이름을 입력하세요 : ");
			arr.add(i, scr.next());
			
			}
		
		for(int j=0; j<arr.size(); j++) {
			if(arr.get(j).length()>max) {
				max=arr.get(j).length();
				a=j;
			}
		}
		System.out.println(arr.get(a));
	}
	static void Arraysam2(){
		Scanner scr = new Scanner(System.in); 
		ArrayList<String> aliasList = new ArrayList<String>();
	
		System.out.println("서로 다른 길이의 별명을 5번 입력하세요.");
		
		for(int i =1; i<=5; i++) {
			System.out.println(i+"번째 별명 : ");
			String alias = scr.next();
			aliasList.add(alias);
		}
		System.out.println();
		
		//제일 긴 별명이 저장될 변수 선언
		//list의 첫 번째 데이터로 초기화
		String maxAlias = aliasList.get(0);
		
		for(int i =1; i<aliasList.size(); i++) {
			if(maxAlias.length()< aliasList.get(i).length()) {
				maxAlias = aliasList.get(i);
			}
		}
		System.out.println("제일 긴 별명 : "+maxAlias);
	}
}
package kr.or.ddit.basic;
/* 문제3) 5명의 별명을 입력받아 ArrayList에 저장하고 이들 중에 별명의
* 길이가 제일 긴 별명들을 출력하시오
* (단, 각 별명의 길이가 같은 것이 존재 할 수 있다.)
*/

import java.util.ArrayList;
import java.util.Scanner;

public class ArrayList2_3 {

	public static void main(String[] args) {
		Scanner scr = new Scanner(System.in); 
		ArrayList<String> arr = new ArrayList<String>();
		ArrayList<String> str = new ArrayList<String>();
		int max =0;
		int a=0;
	
		
		for(int i =0; i<5;i++) {
			System.out.println("이름을 입력하세요 : ");
			arr.add(i, scr.next());
			if(arr.get(i).length()>max) {
				max=arr.get(i).length();
			}
		}
		for(int j=0; j<arr.size(); j++) {
			if(max==arr.get(j).length()) {
				a=j;
				str.add(arr.get(a));
			}
		}
		System.out.println(str);
	}
	
	static void Arraysam3(){
		Scanner scan = new Scanner(System.in); 
		ArrayList<String> aliasList = new ArrayList<String>();
	
		System.out.println("별명을 5번 입력하세요.");
		
		for(int i =1; i<=5; i++) {
			System.out.println(i+"번째 별명 : ");
			String alias = scan.next();
			aliasList.add(alias);
		}
		System.out.println();
		
		//제일 긴 별명이 길이가 저장될 변수 선언
		//list의 첫 번째 데이터의 길이로 초기화
		int maxLength = aliasList.get(0).length();
		
		for(int i =1; i<aliasList.size(); i++) {
			if(maxLength< aliasList.get(i).length()) {
				maxLength = aliasList.get(i).length();
			}
		}
		System.out.println("제일 긴 별명들....");
		for(int i=0; i<aliasList.size();i++) {
			if(aliasList.get(i).length()==maxLength) {
				System.out.println(aliasList.get(i));
			}
		}
	}
}
728x90