유디의 공간정보·개발일기

H5-6. 0723_ ArrayList (Collection API) 본문

JDBC

H5-6. 0723_ ArrayList (Collection API)

55yudi 2021. 10. 31. 16:16

[CollectionTest]

package myjdbc;

import java.util.ArrayList;
import java.util.Calendar;

public class CollectionTest {

	public static void main(String[] args) {
		//배열 --> 선언, 생성, 할당, 참조
		//배열의 문제점 : 변경이 안되고, 크기가 정해져 있다. --> 가변적 크기로 하려면 ArrayList로 해결
		//ArrayList는 동적배열, Container(-역할을 함)
		
		//ArrayList<> 타입을 지정하지 않고 만들 수 있다.
//		ArrayList list = new ArrayList(); //list : ArrayList 타입의 로컬변수 //ArrayList를 생성
//		String str = "haha";
//		list.add(str); //add : ArrayList내에 있는 함수
//		list.add(500); //할당
//		list.add(new EmpVO());
//
//		System.out.println(list.get(0)); //index 참조해서 출력 //get: 리턴타입은 Object(커서올리면 나옴)
//		Object obj = list.get(0); //Object클래스 : 모든 클래스의 superclass(최상위 클래스)
//		//0번지에는 문자열 "haha"가 담겨있음
//		String str2 = (String) list.get(0); //get이 object를 참조?하니까? 스트링에 넣어줘야 하니까 형변환해주기
//		str2.length();
		
		//<E> : general type -처음부터 타입을 지정하고 만듦 --> 형변환을 해주지 않아도 되는 장점이 있다.
		ArrayList<String> list1 = new ArrayList<String>(); //"매개변수가 없이 디폴트값으로 생성자 함수를 호출하는 것"
//		list1.add(500); //500이 String이 아니므로 오류
		list1.add("haha");
		
		//API => 라이브러리 => (자바가 제공하는)클래스들
		ArrayList<String> list = new ArrayList<String>(100); // ()안에 매개변수 넣는 것과 26줄(안 넣는 것)이랑 뭐가 다른가?
				//차이점 : 매개변수 안넣으면 10칸(default값)씩 만들고 100을 넣으면 100만큼 만들고 필요할때 또 100칸이 추가로 만들어 값을 넣는다.
		//new가 사용된 건 생성자 함수가 사용된 것 : "매개변수로 숫자를 받아들이는 생성자 함수가 호출됩니다." <--이 방법을 더 선호
		list.add("haha");
		String str = list.get(0);
		System.out.println(list.size());
		
		for(String tempStr : list) {
			System.out.println(tempStr);
		}
		for(int i = 0; i < list.size(); i++) {
			System.out.println(list.get(i));
		}
		
		
		//오늘날짜, 오늘부터 100일 후를 프로그램 내에서 계산해보기
		//Calendar, Date등...
//		Calendar cal = new Calendar(); //이런 생성자가 없기 때문에 오류
		
	}

}

- 배열 : 같은 타입의 데이터를 연속된 공간에 나열하고 각 데이터에 인덱스를 부여해 놓은 자료구조

           인덱스는 0번부터 자동 부여

  * 단점 : 크기의 변경이 불가하다. 크기가 정해져 있다.

  * 해결 : ArrayList를 사용한다.

 

- ArrayList에 매개변수 안 넣는 것 -> 디폴트 값으로 10칸씩 생성됨

- ArrayList에 매개변수 넣는 것 -> 지정한 매개변수 값 만큼 칸 생성됨, 필요하면 또 칸 추가됨

 

- API : 일종의 라이브러리, 자바가 제공하는 클래스들

 

- ArrayList -> Array로 conversion 하는 메서드 : toArray

  + Ex04_Solution 코드의 5번 과제 다시 해결

//5. 3의 배수만을 새로운 배열에 복사하여 리턴하는 함수
	private static int[] makeNewList(int[] list) {
		//도대체 3의 배수가 몇개나 있는지 모르기에 가변적인 배열 ArrayList
		//일단 3의 배수가 몇개인지 체크한다.
		int count = 0;
		for(int ele : list) { //하나하나 꺼내서
			if(ele%3 == 0) { //그 숫자가 3의 배수면
				count++;	//하나씩 더해준다.
			}
		}
		//체크된 수만큼 배열을 생성한다.
		int[] result = new int[count];
		//반복문을 통해서 3의 배수를 배열에 넣는다.
		int index = 0;
		for(int i = 0; i < list.length; i++) {
			if(list[i]%3 == 0) {
				result[index] = list[i];
				index++;
			}
		}
		//배열을 리턴한다.
		return result;
	}
    
///////////////////////////////////////////////////////////////////////////\

// ArrayList로 다시
			ArrayList<Integer> result = new ArrayList<Integer>();
			for(int ele : list) {
				if(ele%3 == 0) {
					result.add(ele);
				}
			}
			//ArrayList -> Array로 conversion(구글링 참조해서 ) 근데 안됨
			Integer[] intArray = new Integer[result.size()];
			result.toArray(intArray);
			return intArray;