컴퓨터 관련/JAVA 강의

java #25 List(ArrayList, Vector)

승명 2016. 12. 18. 19:58

java #25 List(ArrayList, Vector)

 

List(ArrayList, Vector)


 
ArrayList
Vector

 동기화

x

0

 동시접근

multi thread에서 동시접근 가능

불가

 속도

빠름

느림



1. ArrayList


- jdk1.4까지는 객체를 저장

- 1.5부터 generic을 지원하여 특정객체만 저장할 수 있음


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
* 객체 생성
List l = new Arraylist();
 
* jdk1.5+
List<E> l=new ArrayList<E>();
generic                   generic
<데이터형>               <데이터형>(<>다이아몬드연산자라고 한다.)
 
List<String> l = new ArrayList<String>();
                                            1.7에서는 <>로 생략가능
 
- 추가
l. add(값);
 
- 크기
l.size() -> int로
 
- 값얻기
l.get(인덱스)
 
- 내용삭제
l.remove(인덱스)
 
- 모든 방을 삭제
l.clear();
cs


- 예제

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package day0303;
 
import java.util.List;
import java.util.ArrayList;
 
/**
* 일차원 배열처럼 생성되고, 입력하는 값에 따라 방이 증가하고, 
* 삭제하는 값에 따라 방의 갯수가 감소하는 List의 사용.
*
*/
public class UseList {
     public void useArrayList() {
          // generic을 사용하지 않는 경우 : 
          // jdk1.4에서는 객체만 입력받고, jdk1.5부터는 모든 값을 저장할 수 있다.
 
          List al = new ArrayList();
          /*
           JDK1.4에서는 기본형 데이터형을 추가할 수 없다. 
          기본형을 추가하려면 기본형을 객체로 감쌋서 사용하는 wrapper
           class를 이용하여 처리함
           wrapper class는 기본형 데이터형과 같은 이름의 클래스를 말한다.
           al.add(new Integer(10));
           al.add(new Double(3.14));
          */
 
          al.add(10);/* jdk1.4-error, jdk1.5에서는 compiler가 
          자동으로 wrapper class를 이용하여 감싸는 코드를 넣어준다.(autoboxing) */
 
          al.add("안녕하세요");
 
          System.out.println("크기" + al.size() + " / " + al);
 
          for (int i = 0; i < al.size(); i++) {
           // autoboxing된 값이 있다면 원래대로 변환해서 꺼내오는 unboxing이 발생한다.
               System.out.println(al.get(i));
          }// end for
 
          // 삭제
          al.remove(1);// 뒷방의 값이 앞으로 이동하고 전체크기가 변경된다.
          System.out.println("삭제후 크기" + al.size() + " / " + al);
 
          al.clear();
          System.out.println("clear 후 크기" + al.size() + " / " + al);
 
          // /////Generic 사용 : 입력되는 형의 제한////////
          // 동기화가 되지 않기 때문에 동시에 여러명이 접근할 수 있다.
          List<String> list = new ArrayList<String>();
          // List<String> list1 = new ArrayList<>();//JDK1.7부터 뒤쪽 generic을 <>로 생략
          // 가능
          // 추가 : Generic으로 선언한 데이터형만 추가됨.
          list.add("오늘은");
          list.add("월요일");
          list.add("입니다.");
          // list.add(3); //generic으로 선언된 문자열형 이외에는 error
          System.out.println("크기 : " + list.size() + " / " + list);
          list.add("3월의 첫주");
          System.out.println("크기 : " + list.size() + " / " + list);
 
          /*
          * 기존의 for for(int i = 0;i<list.size();i++){
          * System.out.println(list.get(i)); }//end for
          */
 
          // 개선된 for
          for (String msg : list) {
               System.out.println(msg);
          }// end for
 
          // 배열로 복사 : Generic이 정의되어있을 때만
          // 리스트에 크기대로 배열을 생성하고
          String[] msg = new String[list.size()];
          // 생성된 배열에 리스트의 값을 넣어준다.
          list.toArray(msg);
 
          // 삭제
          // 인덱스로 삭제
          list.remove(1);
          System.out.println("인덱스로 1방 삭제 후 " + list);
          // 방의 내용으로 삭제
          list.remove("입니다.");
          System.out.println("방의 내용으로 삭제 후" + list);
          // 모든방의 삭제
          list.clear();
          System.out.println("모든 방 삭제후" + list);
          System.out.println("----배열방의 값 출력----");
          for (String data : msg) {
               System.out.println(data);
          }
     }// useArrayList    
 
     public static void main(String[] args) {
          UseList ul = new UseList();
          ul.useArrayList();
     }
}
 

cs



2. Vector


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
29
30
31
32
33
34
35
36
37
38
39
 
package day0303;
 
import java.util.Vector;
 
 public void useVector() {
          // 생성 jdk1.4
          // List list=new Vector<>();
          // list.add(new integer(11));
          // 동기화가 되어서 동시에 여러 사용자가 방 하나에 접근할 수 없다.
          List<String> list = new Vector<String>();
          // 값 추가
          list.add("사과");
          list.add("딸기");
          list.add("배");
          list.add("포도");
 
          System.out.println("값 추가" + list);
          // 중복값 저장 가능
          list.add("사과");
          System.out.println("값 추가" + list);
          System.out.println();
          for (int i = 0; i < list.size(); i++) {
               System.out.println(list.get(i));
               // end for
          }// for
               // 값 삭제 : 인덱스로 삭제, 내용으로 삭제
          // 내용으로 삭제될 때에는 중복값이 있다면 처음 등장하는 값만 삭제한다.
          list.remove("사과");
          System.out.println("삭제 후" + list);
     }// useVector
 
     public static void main(String[] args) {
          UseList ul = new UseList();
          ul.useVector();
 
     }
}