Search

반응형

'CollectionList'에 해당되는 글 1건

  1. 2020.05.13 [자바/java]List - ArrayList 이해하고 사용해 보기. - Collection, 리스트
반응형

안녕하세요. 신기한 연구소 개발자 티보이입니다.

장기간 유지보수 프로젝트에 투입되었다가 잠시 휴식 시간에 개인적으로 공부를 하다 보니

유지보수 기간 동안 자바에 대한 많은 기억이 사라졌더군요.

그래서 다시 되살려서 복습도 하기 위해 초심을 가지고 기초부터 하나하나 보고 있습니다.

블로그를 하면 좋은 이유가 이해도 해야 하고 자료도 찾아보고 실제 코딩도 하면서 그 예제를 올려놓고

나중에 프로젝트에 투입 시 활용할 수 있는 이점이 있답니다.

그럼 같이 출발해 보겠습니다. 렛츠 고~

List는 순서가 있는 컬렉션(Collection)입니다.

어찌 보면 배열과 가장 비슷한 구조이며 배열을 상상하며 접근하면 편하겠지요?

List는 중복 데이터를 허용합니다.

이 말은 순서를 가지고 데이터를 등록하지만 중복된 데이터도 저장이 가능하다는 말입니다.

순서는 중복이 안 됩니다.

예를 들어서 고속도로에서 오늘 통과한 차의 제조사 정보를 수집한다고 했을 경우에 순번대로 1, 2, 3, 4…로 index가 만들어지고 데이터로는 A, B, C, C, C, A이렇게 중복해서 들어갑니다.

올림픽 경기 중 같은 달리기 100m를 하는 경우 8명 선수가 모두 중복되지 않는 다른 나라일 수 없잖아요? 그런 경우에도 사용하면 되겠네요. 선수목록 리스트로요.

또한 입력 순서가 있기에 index 순서대로 처리하기 좋습니다. 순차 처리에 용이하는 의미로 성적이나 순번 등 순서가 반드시 필요한 경우에도 유용하게 사용할 수 있습니다.

 

 

클래스는 ArrayList, LinkedList, Vector, Stack 이 있습니다.

속도가 다른 컬렉션에 비해 빠른 편이라 특히 ArrayList, Vector를 자주 사용합니다.

여러 번도 이 두 개의 List를 자주 사용하고 자주 만났을 거라 생각합니다.

또한 이 두 개의 클래스를 사용하고 싶기에 검색을 해서 여기까지 오지 않았나 싶네요. ㅎㅎ

하지만 이번 포스팅은 가장 많이 사용하는 ArrayList 클래스로 확인해 볼게요.

ArrayList 클래스는 Collection, List 두 개의 인터페이스 다중 구현이므로 해당 메서드를 모두 구현 가능합니다.

 

이제 List 인터페이스의 메서드를 사용해

ArrayList 클래스로 예제를 살펴보겠습니다.

 

#List - add

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
List<Integer> l01 = new ArrayList<Integer>();
 
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
 
l01.add(2201);
 
System.out.println(l01);
 
[결과]
[100101102103104105101]
[100101201102103104105101]
cs

1번 라인으로 선언해서 사용하면 됩니다. 제너릭으로 Integer 타입만 받겠다는 의미입니다.

3~9번 라인은 add를 사용해 값을 입력하는 겁니다. 순서대로 index가 0번부터 생성됩니다.

특히 9번 라인은 4번 라인과 값이 같습니다. 오류 없이 순서대로 저장됩니다.

또한 13번 라인처럼 특정 index 위치에 입력할 수도 있습니다.

결과를 확인해보세요. 19번 라인에 "201"이 index 2번에 잘 들어갔습니다.

 

#List – addAll

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
List<Integer> l01 = new ArrayList<Integer>();
List<Integer> l02 = new ArrayList<Integer>();
 
for(int i=0; i<10; i++) {
    l02.add(i);
}
        
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
l01.addAll(2, l02);
 
System.out.println(l01);
 
[결과]
[1001010123456789102103104105101]
cs

이번은 addAll을 사용한 예제입니다.

2개의 ArrayList 클래스를 사용해서 하나의 리스트를 끼워 넣는 겁니다.

2번째 index 위치에 "l02" 리스트를 삽입하게 됩니다.

결과를 확인해보세요. 

 

#List – get

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List<Integer> l01 = new ArrayList<Integer>();
 
    
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
System.out.println(l01.get(3));
 
[결과]
[100101102103104105101]
103
cs

get메서드는 특정 index 위치의 값을 반환합니다.

3번째 index는 "103"입니다.

결과를 확인해보세요. 

 

#List – indexOf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
List<Integer> l01 = new ArrayList<Integer>();
 
        
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
System.out.println(l01.indexOf(102));
 
 
[결과]
[100101102103104105101]
2
cs

indexOf 메서드는 해당 데이터(값)을 넣고 위치 정보 index값을 받습니다.

"102"의 위치를 찾기 위해 13번째 라인을 보세요.

결과는 2로 index 2 위치를 반환합니다.

 

#List – lastIndexOf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
List<Integer> l01 = new ArrayList<Integer>();
 
        
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
System.out.println(l01.lastIndexOf(101));
 
 
[결과]
[100101102103104105101]
6
cs

lastIndexOf는 indexOf처럼 입력받은 값의 위치 index를 찾아줍니다.

하지만 last 가 붙은 이유는 뒤에 찾기 시작하고 그 위치는 원래 index 위치 값을 반환합니다.

그래서 1이 아닌 6을 반환합니다.

#List – set

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
List<Integer> l01 = new ArrayList<Integer>();
 
        
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
l01.set(1111);
System.out.println(l01);
 
 
[결과]
[100101102103104105101]
[100111102103104105101]
cs

set메소드는 해당 위치와 바꿀 값을 파라미터로 받습니다.

13번째 라인을 보면 1번째 index의 값을 "111"로 변경하라는 의미입니다.

결과를 확인해보세요.

 

#List – size()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
List<Integer> l01 = new ArrayList<Integer>();
    
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
System.out.println(l01.size());
 
 
[결과]
[100101102103104105101]
7
cs

size메서드는 List의 길이를 반환합니다.

현재 l01은 7개의 값이 있습니다.

결과는 17번째 라인 "7"이 나옵니다.

 

#List – toArray

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
List<Integer> l01 = new ArrayList<Integer>();
 
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
 
System.out.println(l01);
Integer[] ai = l01.toArray(new Integer[l01.size()]);
 
for(Integer itm : ai) {
    System.out.println(itm);
}
 
 
[결과]
[100101102103104105101]
100
101
102
103
104
105
101
cs

toArray를 사용하는 예제입니다.

List를 array로 변환해서 사용할 수 있습니다.

13번째 라인처럼 ai 배열을 생성해서 toArray 메서드로 List의 내역을 받습니다.

for-each 문으로 결과를 확인해보세요.

 

#List – subList

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
List<Integer> l01 = new ArrayList<Integer>();
List<Integer> l02 = new ArrayList<Integer>();
        
l01.add(100);
l01.add(101);
l01.add(102);
l01.add(103);
l01.add(104);
l01.add(105);
l01.add(101);
 
System.out.println(l01);
l02 = l01.subList(24);
System.out.println(l02);
 
 
[결과]
[100101102103104105101]
[102103]
cs

마지막으로 살펴보는 subList 입니다.

이 메서드도 유용하게 사용할 수 있습니다.

위치 범위를 잡아서 시작 index와 종료 index를 입력하면 해당 범위만큼의 List 데이터를 반환합니다.

바로 다른 ArrayList 객체로 넘겨줍니다.

위 결과를 보면 2~4 index 값을 l02로 넘겨줍니다.

지금까지 컬렉션에서 정말 자주 사용하는 List에 대해 알아봤고

ArrayList 클래스로 예제를 만들어봤습니다.

ArrayList는 동기화를 지원하지 않는다는 점 꼭 기억하세요.

즐 코딩하세요~

반응형