메모장

컬렉션 프레임 워크 본문

JAVA/개념정리

컬렉션 프레임 워크

Itchild 2024. 4. 6. 14:24
728x90
반응형

 

"프레임워크"

컬렉션, Spring, JPA, Mybatis,...

한글로 번역하면 : 틀, 골격, 뼈대....

뼈대 , 틀을 제공하면 "강제성"이 생긴다 -> 좋은거

하라는대로 하면 되니까

ex) 리모컨 : 표준. 통일된 규격 , 기준

=> 제품을 판매할때에는 "규격"

=> 코딩할때에도 코드의 "기준"이 필요하다!

 

"데이터 묶음" (== 컬렉션 이란 단어)

: 배열

-> 자료형이 같아야함, 크기를 미리 정해놔야함

=> 크기를 미리 정해놓지 않아도 & 자료형이 달라도 저장할수 있는 데이터 묶음 : 배열리스트, 연결리스트, 집합, 맵, 스택, 큐, 트리...

package class01;

import java.util.ArrayList;

public class Test01 {

	public static void main(String[] args) {       
        // 향상된 배열 == 배열리스트 ArrayList
		// 객체 지향 언어라서 객체가 사용하는 언어를 많이 쓴다
		// 1. 데이터를 마음대로 저장가능 ! 
		// 2. toString() 오버라이딩 되어있다 //예쁘게 출력된다.
		// 3.add(), remove(), clear(), size(), get()..과 같은 다양한 기능의 메서드를 기본제공
		// 4. 서로 다른 자료형(타입)들도 저장은 가능
		//   	=> 그러나, 반드시, 서로 같은 자료형만 취급 해야한다!!
		//     => 그래서 " 강제성" 을 부여하여 사용한다!!!
		// ★ 제네릭 <> : 일반화 라고도 번역이 되는데 ,,, 배열리스트에 저장될 타입을 강제 
		// ex) <String> , <Integer> ,,, 등등
		// 제네릭은 클래스를 사용하기 때문에 wrapper 클래스 로 사용해야한다.
		// 값을 감싸는 클래스 
		ArrayList<Integer> data = new ArrayList<Integer>(); //C + S + O import
		data.add(10);
		data.add(0, 20); // 인덱스 0번에 20넣기 
		data.add(0, 30); // 인덱스 0번에 30넣기 // 한칸씩 뒤로 밀림
		data.clear();
		data.add(10);
		System.out.println(data.isEmpty()); // 이거 비어있니? T/F
		System.out.println(data); // toString이 오버라이딩 되어 있다 
		System.out.println(data.get(0));
		data.remove(0);
		System.out.println(data.size());
		
//		data.add("사과");
		data.add(10);
//		data.add(3.14);
		System.out.println(data);
   }
}		
 
package class01;

import java.util.HashSet;

public class Test02 {

	public static void main(String[] args) {
		// 추상클래스 Set
		// Set류의 부모클래스
		// Set 은 추상클래스 이기 때문에 new 로 만들수가 없다.
		HashSet data = new HashSet(); // 자식인 하위 클래스로 저장하면 된다.
		
		// 집합 (Set)
		// 1. 순서가 없음(index XXX)
		// 2. 중복 허용하지 않는다 XX  ex ) 원카드, 중복 없이 할때 사용됨
		// 3. 다양한 자료형 저장 가능
		// 			-> but, 이렇게 사용하지않음!!!
		//  		=> 제네릭 <> 함께 사용  
		data.add(10);
		data.add(1234);
		data.add(1);
		data.add(2);
		data.add(13);
		data.add(11));
		data.add("apple");
		
		System.out.println(data);
		System.out.println(data.size());
	}
}
 

< 실습문제 >

1. 10개의 랜덤수를 생성해주세요

(범위는 1~15까지 입니다)

중복을 제외하고 생성된 랜덤수의 개수와 랜덤수를 출력해주세요 !

package class01;

import java.util.HashSet;
import java.util.Random;

public class Test03 {

	public static void main(String[] args) {

		//랜덤수 생성 
		Random rand = new Random();

		//중복을 제외하고 //HashSet
		HashSet<Integer> data = new HashSet<Integer>();
		 
		int num =0; //랜덤수
		int cnt = 0; //랜덤수의 개수

		//10개 생성 (단, 1~15 사이)
		for (int i = 0; i < 10; i++) {
			num = rand.nextInt(15)+1;
			data.add(num); // 컬렉션은 객체라 메서드 활용
			cnt ++;	
		}

		System.out.println("랜덤수는 " + cnt + "개 생성되었고,");
		System.out.println(data); // 중복을 제외하고 출력 
		System.out.println("입니다.");
	}
}
 

2. 정수를 입력합니다. 0을 입력하면 종료됩니다. while 무한루프

프로그램이 종료되었을때 , 현재까지 입력한 정수들의 평균을 출력해주세요 !

__.__ 입니다

입력한 정수중에서 짝수가 몇개인지 구해 주세요

package class01;

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

public class Test04 {

	public static void main(String[] args) {

		//중복 허용 
		ArrayList<Integer> datas = new ArrayList<Integer>();
		// 배열은 갯수가 정해져 있어야 하는데 그게 안되어 있어서 일반 배열은 못쓴다.
		// 컬렉션을 써야 겠네? 근데 중복을 허용하지 말라는 말이 없으므로 ? Array
		//정수를 입력 (끝날때 까지 한다 while)
		//0을 입력하면 종료  //종료조건 break;

		Scanner sc = new Scanner(System.in);
		int cnt = 0; // 입력 개수 
		int sum = 0; // 총합 초기화
		double avg = 0.0; // 평균 초기화
		int num = 0;
		while(true){
			System.out.println("정수입력) ");
			System.out.println("0을 입력하면 종료 됩니다.");
			num = sc.nextInt();

			if( num == 0) { // 프로그램 종료 
				break;
			}
			sum += num;
			cnt ++;
		}

		// 프로그램 종료 후 현재까지 입력한 정수들의 평균 출력
		avg = sum * 1.0 / cnt;
		
		System.out.println("평균은 " + avg + "입니다.");
		for (int i = 0; i < cnt; i++) { // 짝수를 보기전에 전체를 한번 봐야된다.
			datas.add(num); // 내가 저장한 수 들을 보여줘 !
		}
		if(  % 2 == 0 ) {
			System.out.println("짝수는 " + cnt + "개 입니다");
			System.out.println(datas);
		} 
	}
}
 
package class01;

import java.util.ArrayList;
import java.util.Scanner;
// 강사님 풀이 
public class Test06 {
	public static void main(String[] args) {

		Scanner sc=new Scanner(System.in);
		ArrayList<Integer> data=new ArrayList<Integer>();

		while(true) {
			System.out.print("입력) ");
			int num=sc.nextInt();
			if(num==0) { // 0일때 종료
				break;
			}
			data.add(num); // 0이 아니면 데이터에 추가
		}

		int sum=0; // 합계 초기화 
		/*
      for(int i=0;i<data.size();i++) {
         sum+=data.get(i);
      }
		 */
		for(int v:data) {
			sum+=v;
		}
		double avg=sum*1.0/data.size(); //Array배열에 사이즈,크기
		System.out.println("평균: "+avg);

		// 처음부터 끝까지 돌면서
		// data의 모든 요소를 확인할거야~ 배열크기가 자꾸 변화하니까 언제 까지 할지 모른다
		// [ a b c ] 요소 b를 삭제
		// [ a c ] 삭제한 인덱스부터 재확인!
		
		int index=0; // 인덱스 번호
		while(index < data.size()) { // 인덱스번호가 data의 사이즈 만큼 돌때
			if(data.get(index)%2 == 1) {//삭제해야하는일이 발생했다면 //홀수일때
				data.remove(index); // 삭제한다
				continue; // 아래로 가면 안된다.
			}
			index++;
		}
		System.out.println(data);
	}
}
 

 

 

728x90
반응형

'JAVA > 개념정리' 카테고리의 다른 글

스레드(Thread) 와 파일 입출력  (1) 2024.04.07
예외 와 예외처리  (0) 2024.04.07
객체배열  (1) 2024.04.06
(접근)제어자  (1) 2024.04.06
[상속] Object  (0) 2024.04.06