본문 바로가기

Java

ArrayList Class

ArrayList Class Hierarchy

Iterable interface 

목록에서 원소를 자동으로 하나하나꺼내는 for문에서 사용할 수 있다. => for each loop

 

 

E set(int index, E element)

    Replaces the element at the specified position in this list with the specified element.

    Returns the element previously at the specified position

=> 변경 이전 값 리턴

 

boolean add(E e)

  Appends the specified element to the end of this list.

void add(int index, E element)

  Inserts the specified element at the specified position in this list.

 

E remove(int index)

    Removes the element at the specified position in this list.

    Returns the element that was removed from the list

 

boolean remove(Object o)

    Removes the first occurrence of the specified element from this list, if it is present.

=> add와 remove 메소드 둘 다 오토박싱, 오토언박싱 된다.

    하지만 두 메소드는 int타입 파라미터로 주면 인덱스로 찾는다.

    따라서 remove메소드에서 인덱스가 아닌, 값을 찾고싶을때(Integer)는 remove(new Integer(3));이다.

 

ArrayList array

예시

import java.util.ArrayList;

public class ArrayListArray {
	public static void main(String[] args) {
		ArrayList<Integer>[] a = new ArrayList[10];

		for (int i = 0; i < a.length; ++i) {
			a[i] = new ArrayList<Integer>();
			;
		}

		for (int i = 0; i < 100; ++i) {
			int index = i % a.length;
			a[index].add(i);
		}

		for (int i = 0; i < a.length; ++i) {
			System.out.println(a[i]);
		}
	}
}

출력

[0, 10, 20, 30, 40, 50, 60, 70, 80, 90] 
[1, 11, 21, 31, 41, 51, 61, 71, 81, 91] 
[2, 12, 22, 32, 42, 52, 62, 72, 82, 92] 
[3, 13, 23, 33, 43, 53, 63, 73, 83, 93] 
[4, 14, 24, 34, 44, 54, 64, 74, 84, 94] 
[5, 15, 25, 35, 45, 55, 65, 75, 85, 95] 
[6, 16, 26, 36, 46, 56, 66, 76, 86, 96] 
[7, 17, 27, 37, 47, 57, 67, 77, 87, 97] 
[8, 18, 28, 38, 48, 58, 68, 78, 88, 98] 
[9, 19, 29, 39, 49, 59, 69, 79, 89, 99]

 

다른 Collection 객체로부터 ArrayList 객체 생성시 유의 사항

List<Integer> a = new ArrayList<();

여기서 우리는 List로 생각해야하는가 ArrayList로 생각해야하는가.

정답은 자바는 정적언어다. 

 

정적언어라는 것은 '타입' 즉 자료형을 컴파일 할 때 결정하는 것이다. 따라서 컴파일 할 때 자료형에 맞지 않은 값이 들어있으면 컴파일 에러가 발생한다. 변수타입만 보고 컴파일한다.

정적언어는 C,  C#, C++, Java 등의 언어가 있다.

정적언어 장점 : 컴파일 할 때 타입에 대한 정보를 결정하기 때문에 속도가 빠르다. 타입 에러를 초기에 발견하여 타입 안정성이 높다.

 

반면, 동적언어라는 것은 실행할때  자료형을 결졍한다. 따라서 타입 없이 변수만 선언하여 값을 지정할 수 있다.

동적언어는 JavaScript, Ruby, Python 등의 언어가 있다.

동적 언어의 장단점 : 실행 할 때까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 많은 선택의 여지가 있지만 느리다.

'Java' 카테고리의 다른 글

Object 클래스  (0) 2020.01.15
JVM, JRE, JDK, 메모리 구조  (0) 2020.01.15
Thread  (0) 2019.07.07
Iterator Interface  (0) 2019.07.07
streamAPI의 오해 - for문  (0) 2019.06.09