JAVA

16일차//[java] 컬렉션 프레임워크 // ArrayList (1)

aesup 2021. 2. 2. 00:38
728x90

ArrayList

ArrayList는 크기를 미리 지정하지 않기 때문에 얼마든지 많은 수의 값을 저장할 수 있다.
ArrayList는 배열과는 사용방법이 조금 다르다.
ArrayList는 배열과는 사용방법이 조금 다르다. 배열의 경우 값의 개수를 구할 때 .length를 사용했지만 ArrayList는 메소드 size를 사용한다. 또한, 특정한 값을 가져올 때 배열은 [인덱스 번호]를 사용했지만 컬렉션은 .get(인덱스 번호)를 사용한다..

for(int i=0; i<al.size(); i++){
    String val = al.get(i);
    System.out.println(val);
}

위의 코드는 컴파일 오류가 발생한다. ArrayList의 메소드 add의 입장에서는 인자로 어떤 형태의 값이 올지 알 수 없다.
그렇기 때문에 모든 데이터 타입의 조상인 Object 형식으로 데이터를 받고 있다.
예를들면 아래와 같은 모습일 것이다. (실제와는 다르다)

public boolean add(Object e) {
따라서 ArrayList 내에서 add를 통해서 입력된 값은 Object의 데이터 타입을 가지고 있고,
get을 이용해서 이를 꺼내도 Object의 데이터 타입을 가지고 있게 된다.
그래서 위의 코드는 아래와 같이 바꿔야 한다.

for(int i=0; i<al.size(); i++){
    String val = (String)al.get(i);
    System.out.println(val);
}

get의 리턴값을 문자열로 형변환하고 있다. 원래의 데이터 타입이 된 것이다.

그런데 위의 방식은 예전의 방식이다. 이제는 아래와 같이 제네릭을 사용해야 한다.

ArrayList<String> al = new ArrayList<String>();
al.add("one");
al.add("two");
al.add("three");
for(int i=0; i<al.size(); i++){
    String val = al.get(i);
    System.out.println(val);
}

제네릭을 사용하면 ArrayList 내에서 사용할 데이터 타입을 인스턴스를 생성할 때 지정할 수 있기 때문에 데이터를 꺼낼 때(String val = al.get(i);) 형변환을 하지 않아도 된다.

MainClass

package main;

import java.util.ArrayList;

import myclass.MyClass;

public class MainClass {
    public static void main(String[] args) {
        /*

         collection: 수집

         List : 
             ArrayList:배열처럼 사용할 수 있는 리스트
                       선형구조 0-0-0-0
                       검색속도가 빠르다.

             LinkedList
                 추가, 삭제 속도가 빠르다
                  ex) 실시간(게임)
         Map : 
               HashMap
               TreeMap

         Set == 집합


         */

        //
        //
        ArrayList<Integer> arrlist = new ArrayList<Integer>();
        //추가
        arrlist.add(111);

        Integer in = new Integer(222);
        arrlist.add(in);//뒤에다가 붙이는게 add

        arrlist.add(new Integer(333));

        int len = arrlist.size();
        System.out.println("목록의 크기"+  len);

        for (int i = 0; i < arrlist.size(); i++) {
            System.out.println(arrlist.get(i));
            //ArrayList.get()
            // .get(int index)은 인자로 인덱스를 받습니다. 이 인덱스의 위치에 있는 객체를 리턴해줍니다.
        }
        //삭제
        arrlist.remove(1);

        len = arrlist.size();
        System.out.println("목록의 크기"+  len);

        //원하는 위치에 추가
        Integer num = new Integer(200);
        arrlist.add(1, num);
        for(Integer n : arrlist) {
            System.out.println(n);
        }
        //검색
        int index = arrlist.indexOf(3363);
        System.out.println(index);//인덱스 못찾으면 -1넘어온다

        for (int i = 0; i < arrlist.size(); i++) {
            Integer v = arrlist.get(i);

        }
        //수정
        Integer uData = new Integer(555);
        arrlist.set(2,uData);
        for(Integer n : arrlist) {
            System.out.println(n);
        }




        //MyClass(number, name, height)
        //ArrayList<myClass>

        //
        //
        ArrayList<MyClass> list = new ArrayList<MyClass>();


        //List<MyClass> list = new ArrayList<MyClass>(); 이렇게 추가 가능

        //추가
        MyClass cls = new MyClass(1, "홍길동", 180);
        list.add(cls);

        list.add(new MyClass(1, "홍길동", 180));

        list.set(1, new MyClass(4, "정수동", 180));

        for (int i = 0; i < list.size(); i++) {
            MyClass my = list.get(i);
            System.out.println(my.toString());
        }

        //삭제
        list.remove(1);

        for (int i = 0; i < list.size(); i++) {
            MyClass my = list.get(i);
            System.out.println(my.toString());
        }

        //검색
        String name = "홍길동";

        for (int i = 0; i < list.size(); i++) {
            MyClass my = list.get(i);
            if(name.contentEquals(my.getName())) {
                index = i;
                break;
            }
        }
        System.out.println("검색된 데이터  : " + list.get(index).toString() );

        //수정
        list.set(1, new MyClass(4, "정수동", 178));



        //ArrayList<String> slist = 
        //추가
        //삭제
        //검색
        //수정

        //
        //
        ArrayList<String> slist = new ArrayList<String>();
        //추가
        slist.add("안녕하세요");

        String in2 = new String("감사합니다");
        slist.add(in2);

        slist.add(new String("사랑합니다"));


        int leng = slist.size();
        System.out.println("leng 사이즈는  = " + leng);

        for(int i = 0 ; i < slist.size(); i++) {
            System.out.println(slist.get(i));
        }

        //삭제

        slist.remove(1);// 감사합니다. 삭제
        for(int i = 0 ; i < slist.size(); i++) {
            System.out.println(slist.get(i));
        }









    }
}

Dto - MyClass

package dto;

public class MyClass {

    private int number;
    private String name;
    private double height;

    public MyClass() {
    }

    public MyClass(int number, String name, double height) {
        super();
        this.number = number;
        this.name = name;
        this.height = height;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "MyClass [number=" + number + ", name=" + name + ", height=" + height + "]";
    }


}
728x90