Java

[Java] Array 와 Array List의 차이 , 공통점

IGBR 2022. 2. 28. 13:45

Java 백준 문제를 풀던중 분명 Array와 ArrayList를 적재적소에 사용을 하면 효율적인 코딩이 가능할 것 같은데 아직 구분을 잘 못하고 있어서 정리하려고 한다.


 

대략적인 Array와 ArrayList의 차이

코드로 보는 Array와 ArrayList

import java.util.ArrayList;

public class ArrayAndArrayList 
{

	public static void main(String[] args) 
	{
// 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
		
// 		Array와 ArrayList의 선언 과 타입에서의 차이 (+ 크기 알아보기)
		
		int[] numArray = { 1, 2, 3, 4, 4};	// 중복되는 원소를 추가할 수 있습니다.
//		int[] numArray = { 1, "2", 3, 4, 4};	에러! Array(배열)는 선언된 타입만 쓸 수 있습니다.Type Safety
		System.out.println("Array는 .length로 배열의 크기를 알 수 있습니다. => "+numArray.length);
		
		
		ArrayList numArrayList = new ArrayList(); // Generics가 없는 ArrayList 선언
		
		numArrayList.add(1);
		numArrayList.add(2.0); // ArrayList는 타입으로 부터 자유롭습니다.
		numArrayList.add(3);
		numArrayList.add(4);
		numArrayList.add(4); // 중복되는 원소를 추가 할 수 있습니다.
		
		ArrayList<Integer> numArrayListGenerics = new ArrayList<Integer>(); 
        // ArrayList는 <>로 이루어진 Generics를 사용해주면 Type Safety 
		
		numArrayListGenerics.add(1);
		numArrayListGenerics.add(2);
//		numArrayListGenerics.add(2.0); 에러! 
// 		Generics가 Integer 만 받고 있기 때문에 ArrayList라 할지라도 선언된 타입 이외에 받질 못합니다.
		numArrayListGenerics.add(3);
		numArrayListGenerics.add(4);
		numArrayListGenerics.add(5);
		
		System.out.println("ArrayList는 .size( )로 크기를 알 수 있습니다. => " 
        	+ numArrayListGenerics.size());

// 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓

//		Array 와 ArrayList의 출력 방법
		
		System.out.println("Array의 출력입니다.");
		for ( int value : numArray)
			System.out.println(value);	
            // Array는 numArray[index] 로 원하는 index의 값을 다룰 수 있습니다.
	
		System.out.println("ArrayList의 출력입니다.");
//		for ( int value : numArrayList) 에러 ! ArrayList는 for-each 구문으로 출력 할 수 없습니다.
//			System.out.println(value);	

		for (int i = 0; i<numArrayList.size(); i++)
			System.out.println(numArrayList.get(i)); 
            // .get메소드를 통해 원하는 index의 값을 다룰 수 있습니다.
		
		
// 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓
		
// 		Array는 다차원 배열이 가능하나 ArrayList는 불가합니다.
		
		int[][] multiDemensionalArray = new int[2][3];
		
		int n = 1;
		
//		값 넣어보기
		for (int i = 0 ; i < 2; i++)
		{
			for(int j = 0 ; j < 3 ; j++)
			{
				multiDemensionalArray[i][j] = n;
				n++;
			}
		}
		
//		출력해보기
		for (int i = 0 ; i < 2; i++)
		{
			for(int j = 0 ; j < 3 ; j++)
				System.out.println(multiDemensionalArray[i][j]);
		}
	
	}
}

 

3줄 요약 

1. 데이터를 자주 추가하고 삭제한다 -> ArrayList

2. 크기가 가변적이어야 한다 -> ArrayList

3. 데이터 검색을 자주해야 하거나 다차원으로 구성해야 한다 -> Array