티스토리 뷰

Collections framework

->배열이 갖고 있는 불편함을 벗게 해주는 도구이다.

컬렉션 프레임워크란 데이터를 저장하는 클래스들을 표준화한 설계이다.

컬렉션 프레임워크는 아래 그림과 같이 데이터를 저장하는 구조에 따라 3가지 인터페이스로 구성된다.

 

ArrayList

->java.util패키지안에 포함되어있다.

->import java.util.ArrayList

 ArrayList 데이터 추가하기 - Add 메소드

ArrayList에 데이터를 추가하는 방법은 add 메소드를 활용하는 방법입니다. add 메소드를 사용하는 방식은 두 가지로 인자 정보를 하나만 넘기는 경우와 두 개를 넘기는 방법이 있습니다. 

 

boolean add(E e)

void add(int index, E element)

 

첫 번째 방식은 Element 값만 넘기는 방식입니다. 이때는 List의 맨 마지막 위치에 데이터가 들어갑니다. 두 번째 방식은 추가할 Element 값과 데이터가 들어갈 특정 위치를 지정할 수 있습니다.

 

import java.util.*;
 
public class Sample
{
    public static void main(String[] args)
    {
        ArrayList<Integer> arrayList = new ArrayList<>();
 
        arrayList.add(0);
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
 
        for(int i : arrayList)
        {
            System.out.println("값 : " + i );
        }
    }
}

 

 

▼ 데이터 추가는 ArrayList의 add 메소드를 통해 추가할 수 있습니다. 따로 위치를 지정하지 않았으므로 데이터는 순서대로 0, 1, 2, 3, 4가 List에 들어가게 됩니다.

 

 

import java.util.*;
 
public class Sample
{
    public static void main(String[] args)
    {
        ArrayList<Integer> arrayList = new ArrayList<>();
 
        arrayList.add(0);
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
 
        arrayList.add(1,10);
 
        for(int i : arrayList)
        {
            System.out.println("값 : " + i );
        }
    }
}

 

 

▼ 위 예제에서 15번 라인이 추가되었습니다. 마찬가지로 add 메소드를 사용하였는데 인자로 index를 추가로 넘기고 있습니다. ArrayList에서 index 1에 해당하는 위치에 데이터 10을 넣으라는 의미로 해석할 수 있습니다. 뒤에 Element 들은 자동으로 뒤로 밀리게 됩니다.

 

ArrayList 데이터 추가하기 - addAll 메소드

addAll 메소드를 통해 ArrayList에 ArrayList를 추가할 수 있습니다. 메소드를 사용하는 방식은 add 메소드와 마찬가지로 두 가지가 있으며 인자 정보를 하나만 넘기는 경우와 두 개를 넘기는 경우가 있습니다.

 

boolean addAll(Collection<? extends E> c)

boolean addAll(int index, Collection<? extends E> c)

 

 

▼ arrayList를 arrayList와 arrayList2 두 개를 생성하였고 add 메소드를 통해 데이터를 넣었습니다.그런 다음 18 Line에서 addAll 메소드를 통해 arrayList에 arrayList2에 있는 데이터를 추가해주는 예제입니다. 

 

 

import java.util.*;
 
public class Sample
{
    public static void main(String[] args)
    {
        ArrayList<Integer> arrayList = new ArrayList<>();
        ArrayList<Integer> arrayList2 = new ArrayList<>();
 
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
 
        arrayList2.add(10);
        arrayList2.add(30);
        arrayList2.add(20);
 
        arrayList.addAll(arrayList2);
 
        for(int i : arrayList)
        {
            System.out.println(i);
        }
    }
}

 

 

ArrayList 데이터 제거하기

 

ArrayList에서 특정 데이터를 제거할 수 있습니다.

 

boolean remove(int index)

 

remove 메소드를 통해 특정 index의 element를 제거할 수 있습니다.

 

▼ 16 Line에서 remove 메소드를 통해 index 1에 해당하는 element를 제거하는 예제입니다. 중간에 element가 제거되면 ArrayList는 자동으로 size가 조절됩니다.

import java.util.*;
 
public class Sample
{
    public static void main(String[] args)
    {
        ArrayList<Integer> arrayList = new ArrayList<>();
        ArrayList<Integer> arrayList2 = new ArrayList<>();
 
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        arrayList.add(5);
 
        arrayList.remove(1);
    }
}

 

 

 ArrayList로부터 특정 데이터 가져오기

 

E get(int index)

List<E> subLit(int fromIndex, int toIndex)

 

첫 번째 get 메소드를 통해 element 하나를 가지고 오는 방식이 있습니다. 두 번째로 index 범위를 지정하여 List로 가지고 오는 방식이 있습니다.

 

▼ 15 Line에서 arrayList로부터 index 범위 1~3에 해당하는 element들을 List 형태로 반환받아서 출력하는 예제입니다. 주의할 것은 index 범위가 1~3까지 지정이 되었지만 toIndex 앞까지에 해당하는 element까지만 반환한다는 것입니다. 

import java.util.*;
 
public class Sample
{
    public static void main(String[] args)
    {
        ArrayList<Integer> arrayList = new ArrayList<>();
 
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
        arrayList.add(5);
 
        List<Integer> list = arrayList.subList(1,3);
 
        for(int i : arrayList)
        {
            System.out.println("arrayList : " + i);
 
        }
 
        System.out.println("------------------------");
 
        for(int i : list)
        {
            System.out.println("subList 메소드로 가져온 List : " + i);
        }
    }
}

 

 

 

 

 

 

※ Check ! 

위의 사진처럼  " add() "라는 메소드는 어떠한 형태의 데이터타입도 수용할 수 있는 메소드이다.

이것이 가능하기 위해서는 add()라는 메소드는 인자 즉, "one"의 데이터 타입이 object 형 이어야한다.

즉,ArrayList()내부에 저장될때 object형으로 저장되어있다는 것 !!

따라서 , String value =al get(i)  i가 0일때 "one"이라는 값을 가져와야하는데 "one"은 object type으로 저장되어 있고  저장하려는 변수(value) 의 타입은 String type이기 때문에 al get(i)는  String으로 (사진처럼) 형변환이 필요로하다.

 

ArrayList()를 사용하고 , add시킨 값을 가져올 때 그 값을 원래의 값으로 가져오고 싶다면 무조건 형변환을 해야한다.!!

위에 그림처럼 get(i)로 값을 뽑아낼때 (String) 즉, 형변환을 하지 않으면 오류가 발생되어 출력이 되지 않는다 .

 

 

위 사진 상황 해결 방법

처음 ArrayList를 정의할때, 제네릭을 통해 입력되는 데이터의 타입을 명시해주면된다.

 

 

 

출처:lktprogrammer,생활코딩

'Java' 카테고리의 다른 글

Java-iterator란?  (0) 2019.10.26
Java-List와 Hash의 차이점  (0) 2019.10.26
Java-제네릭  (0) 2019.10.26
JAVA- toString()  (0) 2019.09.28
JAVA - Object  (0) 2019.09.28