본문 바로가기

국비과정/JAVA

20230619 _[12일차]_01. ArrayList

[ ArrayList ]

package collection;

import java.util.ArrayList;	// import*

// 자료구조
// 컬랙션 하위 arrayList타입
// 이름도 배열이 들어갑니다. 배열과 흡사합니다. (배열과 다르게 정해진 길이가 없음)
// 배열보다 쉽습니다.
public class ArrayList01 {
	public static void main(String[] args) {

		// 배열 선언
		int[] arr = new int[10];
		
		// List -> ArrayList
		ArrayList<Integer> arr01 = new ArrayList<Integer>();	// 생성할때 타입결정하는데 일단은 int타입으로!
		
		// 값대입 = add()
		arr01.add(10);			// 배열처럼 생각한다면 값 10은 arr01의 첫번째 자리(0번지)에 들어감
		arr01.add(15);			// 값 15 -> arr01의 두번째자리(1번지)
		arr01.add(20);			// 값 20 -> arr01의 세번째자리(2번지)  -> add로 추가하는 순서대로 들어감
//		arr01.add("홍길동");	// 타입이 int가 아니라 string이라서 안됨!
//		arr01.add("10");		// 타입이 int가 아니라 string이라서 안됨!
//		arr01.add((byte) 100); 	// 배열이면 가능한데 얘는 안됨. 무조건 타입일치**
		int num = 100;
		arr01.add(num);			// 변수(int타입이라면) 가능
		
		
		System.out.println(arr01);	// [10, 15, 20] 주소값이 아니라 실제값나옴
		
		for (int i = 1; i <= 10; i++) {	// arr01에 1~10까지 넣기 
			arr01.add(i);
		}
		
		System.out.println(arr01);	// [10, 15, 20, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

* ArrayList<Integer> arr01 = new ArrayList<>();    =>  타입은 앞부분에만 적어줘도 됨

* arr01.get(0);  ---> Integer java.util.ArrayList.get(int index)
int는 p타입 , Integer는 R타입


[ .add() 값 추가 & .get() 값 가져오기 &  .size() 길이 ]  

		// get() _하나씩 출력해보쟝
		int num1 = arr01.get(0);
		System.out.println(num1);	// 10
		
		System.out.println(arr01.get(3));	// 100

		// 길이 뽑기
		System.out.println(arr01.size());	// list의 길이 = 14
		
		// 마지막 index에 저장된 10을 출력하려고 한다면?
		System.out.println(arr01.get(arr01.size()-1)); // arr01.size()-1 = 14-1 = 13 (마지막번지수)
		
		// for문 이용해서 출력하기
		for (int i = 0; i < arr01.size(); i++) {
			System.out.println(arr01.get(i));		// *list 안의 값들 출력
		}

( ArrayList 생성연습 )

		// list타입 arr02라고 만들어주기
		// 홀수를 저장하되 저장된 값이 20개가 되면 멈춰주세요 => arr02.size() = 20
		// 출력
		ArrayList<Integer> arr02 = new ArrayList<Integer>();

		// 방법1
		int number = 1;
		while(arr02.size() < 20) {
			arr02.add(number);
			number +=2;
		}
		
		// 방법2
		for (int i = 0; arr02.size() < 20; i++) {
			arr02.add( (2*i) + 1);
		}
		System.out.println(arr02); // [ 1, 3, ... , 39 ]
		System.out.println(arr02.size()); // 20	
		
	}
}

[ 자료구조 ]

https://fliphtml5.com/hkuy/hgwb

 

쉽게 배우는 자료구조 with 자바

https://www.hanbit.co.kr/store/books/look.php?p_code=B7033044159

fliphtml5.com


[ .add( index, value  )  원하는 위치에 값 추가 ]  

package collection;

import java.util.ArrayList;
import java.util.Collections;

public class ArrayList02 {
	public static void main(String[] args) {
		
		ArrayList<Integer> arr01 = new ArrayList<Integer>();
		
		for (int i = 10; i < 16; i++) {
			arr01.add(i);
		}
		System.out.println(arr01);		// [10, 11, 12, 13, 14, 15]
		
		arr01.add(0, 100); 	// 0번지에 100을 추가
		
		// 마지막 번지수에 50을 넣어주세요. add(index, e) 이용
		System.out.println(arr01.size());	// 7
		arr01.add(arr01.size(), 50);	
		
		System.out.println(arr01);		// [100, 10, 11, 12, 13, 14, 15, 50]
		System.out.println(arr01.size());	// 8

[ .remove ( index )  원하는 위치의 값 제거  ]  

		// 삭제 remove(int index)
		System.out.println(arr01.remove(0));	// 100 (0번지 값인 100을 지워줌)
		System.out.println(arr01);			// [10, 11, 12, 13, 14, 15, 50]
		System.out.println(arr01.size());	// 7
		
		System.out.println(arr01.remove(3));	// 13을 지워보자 (13의 index = 3)
		System.out.println(arr01);			// [10, 11, 12, 14, 15, 50]
		System.out.println(arr01.size());	// 6
		
//		arr01.add(3, 13);	// 13을 다시 넣어보자~~
		System.out.println(arr01);		[10, 11, 12, 14, 15, 50]
		System.out.println(arr01.size());	// 7

[ Generic ]

클래스 선언부에 <E>, <T>, <K, V>가 붙어있는 경우가 있습니다.

이런 인터페이스, 추상 클래스, 클래스를 제네릭이라고 합니다.

자바 1.5부터 추가된 기능입니다.

<E> element, 구성요소(데이터타입)를 적습니다.

<T> Type

<K, V> Key, Value

이 기호를 사용해서 데이터 타입을 선언할 수 있습니다.

정해지지 않은 데이터 타입은 제네릭으로부터 객체가 생성될 때 결정됩니다.

 

> * 타입을 지정하지 않고 저장하면 추후에 값을 불러올 때 혼동.

처음 생성할 때 타입 지정하고 해당 타입만 넣을 수 있게!!

 


[ .indexOf ( value )  _값이 있다면 index출력, 없다면 -1출력 ]  

		ArrayList<String> arr02 = new ArrayList<String>();
		
		arr02.add("홍길동");
		arr02.add("김길동");
		arr02.add("이길동");
		arr02.add("박길동");
		System.out.println(arr02);	// [홍길동, 김길동, 이길동, 박길동]

		// remove (value)
		System.out.println(arr02.remove("홍길동"));	// true
		System.out.println(arr02.remove("표길동"));	// false
		System.out.println(arr02);	// [김길동, 이길동, 박길동]
		
		// indexOf() : 
		System.out.println(arr02.indexOf("김길동"));	// 0	=> arr02에 "김길동"이라는 값이 있음	=> 해당 값의 index 출력
		System.out.println(arr02.indexOf("박길동"));	// 2  	=> arr02에 "박길동"이라는 값이 있음	=> 해당 값의 index 출력
		System.out.println(arr02.indexOf("표길동"));	// -1 	=> arr02에 "표길동"이라는 값이 없다는 의미 
		System.out.println(arr02);	//  [김길동, 이길동, 박길동]

 


 [ collections.sort ( list ) & collections.reverse ( list ) & collections.shuffle ( list ) ]  

정렬 _ 오름차순, 내림차순, 랜덤

 

*주의*  

자바의 Collection 은 인터페이스, Collections 는 클래스 

 

		Collections.sort(arr02);	// 정렬
		System.out.println(arr02);	
		
		// 0~9 랜덤하게 5개 저장하는 list(arr03)를 만들어주세요
        
		ArrayList<Integer> arr03 = new ArrayList<Integer>();
		
		for (int i = 0; arr03.size() < 5; i++) {
			int random = (int) (Math.random() * 10);
			arr03.add(random);			
		}
		
		System.out.println(arr03);		// [2, 6, 8, 3, 0]
		
		Collections.sort(arr03);	// 오름차순 정렬
		System.out.println(arr03);	// [0, 2, 3, 6, 8]	
		
		Collections.reverse(arr03);	// 내림차순 정렬
		System.out.println(arr03);	// [8, 6, 3, 2, 0]

		Collections.shuffle(arr03);	// 랜덤 정렬
		System.out.println(arr03);

 [ contains(value) & set(index, value) & clear( ) ]  

 값이 있는지 확인 &  원하는 위치 값변경 & 모든 값 지우기

		// contains(value) : 요소에 있는지 확인하기
		System.out.println(arr02.contains("김나래"));	// false
		
		System.out.println("arr02 출력하기");
		System.out.println(arr02);	// [김길동, 박길동, 이길동]
		
		// set(index, value) : 값 변경
		arr02.set(0,  "황길동");		
		System.out.println("set 활용하기 " + arr02);	// set 활용하기 [황길동, 박길동, 이길동]
		
		// clear() : 모든 값 지우기
//		arr02.clear();
//		System.out.println("clear : " + arr02);	 // clear : []
//		System.out.println("clear : " + arr02.size());	// clear : 0

		
    	System.out.println(arr02);	// [황길동, 박길동, 이길동]

        // 기존의 list인 arr02를 불러와서 새로운 list인 arr04 생성
        ArrayList<String> arr04 = new ArrayList(arr02);
        
		System.out.println("arr04 : " + arr04);	// arr04 : [황길동, 박길동, 이길동]
        
		arr02.set(1, "김나래");		// arr02 값을 재설정하면 arr04도 바뀔지..?
		System.out.println("arr02 : " + arr02); // arr02 : [황길동, 김나래, 이길동]
		System.out.println("arr04 : " + arr04);	// arr04 : [황길동, 박길동, 이길동]
        
        // 복사할 때 value들을 하나하나 가져오기 때문에 
        // arr04가 생성되고 나면 arr02와의 관계는 끊김!
        // arr02와 arr04는 각각 독립적인 list

[ 로또번호추첨 ]

package collection;

import java.util.ArrayList;
import java.util.Collections;

public class ArrayList03 {
	public static void main(String[] args) {

		ArrayList<Integer> arr01 = new ArrayList<Integer>();
        
		arr01.add(45);
		arr01.add(40);
		
		// indexOf((Integer) 45)	=> (index(int)가 아니라) 값 45가(Integer) 있냐
		System.out.println(arr01.indexOf(45));				// 0  (45는 0번지에 있음)
		System.out.println(arr01.indexOf((Integer) 45));	// 0    
		System.out.println(arr01.indexOf(40));				// 1  (40은 1번지에 있음)
		System.out.println(arr01.indexOf((Integer) 40));	// 1  
		System.out.println(arr01.indexOf(10));				// -1 (10이라는 값이 없음)
		System.out.println(arr01.indexOf((Integer) 10));	// -1 
		
		// contains((Integer) 40)
		System.out.println(arr01.contains(45));	// true  (45이라는 값이 있음)
		System.out.println(arr01.contains(40));	// true  (40이라는 값이 있음)
		System.out.println(arr01.contains(10));	// false (10이라는 값이 없음)

		ArrayList<Integer> lotto = new ArrayList<Integer>();

// 1)
		while (lotto.size() < 6) {
			int random = (int) (Math.random() * 45 + 1);
			if (lotto.contains(random) == false) {
				lotto.add(random);
			}
		}

		System.out.println(lotto);

        
// 2) 
		lotto.add( 0, (int)(Math.random() * 45) + 1 );
		for (int i = 1; i < 6; i++) {
			int num = (int) (Math.random() * 45) + 1;
			if(lotto.indexOf(num) < 0) {		// if(!lotto.contains(num)) 조건도 가능
				lotto.add(i, num);
			} else {
				i--;
			}
		}