ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java - Collection
    Java 2018. 1. 25. 10:42
    반응형
    < Collection >

    // 같은 Interface라 메소드는 비슷하다.

    < Array List >
    // Array List는 index로 객체를 관리한다는 점에서 Array와 유사하다
    // 차이점은 Array와 달리 index가 유연하다는 점이다
    // Array List는 객체 삭제/추가 시 inedx가 1씩 당겨지거나 미뤄지게 된다
    // 때문에 빈번한 객체의 추가, 삭제가 일어날 때 다소 무리가 된다.
    // Collection Framework에서 가장 많이 쓰인다.
    // ArrayList<Type> 사용, Generic 가능
    // 선언시 크기 지정을 할 수 있지만 안해도 상관없다.

    ex) ArrayList<String> list = new ArrayList<String>(3); // 크기 지정
    ArrayList<String> list = new ArrayList<>(); // 다이아몬드 연산자 사용 가능

    < ArrayList >

    import java.util.ArrayList;

    public class ArrayList01 {

        public static void main(String[] args) {
            
            // Array List는 Array와 모양은 같다.
            // 하지만 크기가 제한이 없다. 유연성이 좋다.
            // 선언시 크기 지정을 할 수 있지만 안해도 상관없다.
            ArrayList<String> list = new ArrayList<String>(3); // ArrayList<Type> 사용, Generic 가능
            
            list.add("Collection");
            list.add("Thread");
            list.add("Network");
            
            list.add(3, "Lambda"); // 1번 index에 element 삽입. 기존에 있던 1번 인덱스는 뒤로 밀림
            list.add(2, "Java IO");
            // list.add(9, "예외"); // 배열같으면 Exception 발생
            
            // 리스트의 크기
            System.out.println(list.size());
            
            // 리스트의 측정 값 가져오기
            System.out.println(list.get(0));
            
            // for문 이용
            for(int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
            
            System.out.println();
            
            // 삭제
            list.remove("Collection"); // 특정 값을 삭제, boolean type으로 반환
            
            list.remove(2); // 특정 index번에 들어 있는 값 삭제
            
    //      for(int i = 0; i < list.size(); i++) {
    //          System.out.println(list.get(i));
    //      }
            
            for(String s : list) {
                System.out.println(s);
            }

        }

    }


    // ArrayList와 Vector의 차이는 ArrayList는 다수 사용자를 허용하지만
    // Vector는 허용하지 않는다.


    // Array -> List로 변환

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;

    public class ArrayList02 {

        public static void main(String[] args) {
            
            // Array -> List로 변환
            String[] arr = {"Arraylist", "vector", "linkedlist"}; // 값들은 List를 공통적으로 구현받는 것들
            List<String> list = Arrays.asList(arr);
            // 조회는 할 수 있으나, 데이터 변경은 불가능하다.
            System.out.println(list.size());
            System.out.println(list.get(0));
            
            // 변경까지 하려면 list를 ArrayList로 변경해야 한다.
            ArrayList<String> arrList = new ArrayList<String>();
            
            arrList.addAll(list); // list값을 전부 집어넣는다.
            System.out.println(arrList.size());
            arrList.add("Index 3");
            for(String s : arrList) {
                System.out.println(s);
            }
            
            
        }

    }



    // 데이터 수정, 초기화, 검색


    import java.util.ArrayList;

    public class ArrayList03 {

        public static void main(String[] args) {
            
            // 데이터 수정, 초기화, 검색
            ArrayList<Integer> score = new ArrayList<Integer>();
            score.add(70);
            score.add(80);
            score.add(50);
            score.add(90);
            score.add(100);
            score.add(90);
            
            // 수정(set)
            score.set(3, 95); // 3번 index를 95로 수정
            
            // 검색(contains, indexOf)
            // contains() : 특정 값을 담고 있는지 유무
            System.out.println(score.contains(90));
            
            // IndexOf : 특정 값이 어딨는지 찾아줌 (1번)
            System.out.println(score.indexOf(50));


    // 초기화(비우기)
    System.out.println(score.isEmpty()); // 비어 있는지? - bool반환
    score.clear(); // 다 비우기
    System.out.println(score.isEmpty());
            
        }

    }




    < Linked List >

    // LinkedList와 ArrayList는 이용방법은 같다.
    // LinkedList는 좌우 데이터의 주소를 기억하는 구조를 갖는다.
    // 그래서 삽입/삭제가 용이하다. 속도가 빠르다


    import java.util.ArrayList;
    import java.util.LinkedList;

    public class BenchMark {

        public static void main(String[] args) {
            
            // 1. ArrayList와 LinkedList 객체 준비
            ArrayList<Integer> arrList = new ArrayList<Integer>();
            LinkedList<Integer> lnkList = new LinkedList<Integer>();
            
            // < ArrayList >
            
            // 2. 두 객체에 값을 채워 준다.
            for(int i = 1; i <= 300000; i++) {
                arrList.add(i);
                lnkList.add(i);
            }
            
            // 3. 현재 시간 체크
            long start = 0;
            long end = 0;
            long result = 0;
            
            start = System.currentTimeMillis(); // 1/1000초 = 0.001초
            
            // 4. 데이터 추가(중간 부분)
            for(int i = 1; i < 100000; i++) {
                arrList.add(30, 560);
            }// 5. 데이터 추가 끝
            // 6. 현재시간2 체크
            end = System.currentTimeMillis();
            
            // 7. 현재 시간2 - 현재시간1 = 걸린시간
            result = end - start;
            System.out.println(result);
            
            
            
            
            
            // < LinkedList >
            
            start = System.currentTimeMillis();
            
            for(int i = 1; i < 100000; i++) {
                lnkList.add(30, 560);
            }
            
            end = System.currentTimeMillis();
            
            result = end - start;
            System.out.println(result);
            
        }

    }




    < Set Collection >


    // Set Collection은 순서가 유지 되지 않는다. 순서가 없다. - index 지정X
    // 중복을 허용 하지 않는 특성이 있다. - 중복되면 들어가지 않는다.(에러X)
    // Set에는 수정이 없어서 값을 지우고 다시 넣는 작업을 해야한다.
    // 검색 기능이 없는 대신에 하나씩 꺼낼 수 있는 Iterator를 제공.
    // HashSet 역시 최상위는 Collection Interface이기때문에 기본적인 method는 같다.


    import java.util.HashSet;
    import java.util.Set;

    public class SetUse {

        public static void main(String[] args) {
            
            // set 선언 방법
            HashSet<String> set = new HashSet<String>();
            Set<Member> member = new HashSet<Member>(); // 다형성
            
            // set 데이터 추가
            set.add("Java");
            set.add("Oracle");
            set.add("Front");
            set.add("JSP");
            set.add("MVC");
            set.add("Java"); // 중복, 에러x, 값이 들어가지않는다
            
            member.add(new Member()); // 객체는 복사본이기 때문에 중복X
            member.add(new Member());
            member.add(new Member());
            
            System.out.println(set.size());
            System.out.println(member.size());


    // set 덩어리에서 Iterator 형태로 변경하고 하나씩 빼오기
    // Iterator 형태가 되면 하나씩 쪼개진다.
    Iterator<String> iter = set.iterator(); // Iterator로 받는다.
    while(iter.hasNext()) { // hasNext()는 다음 값이 없으면 false를 반환한다. 순서가 없기때문에 while 사용
    String item = iter.next(); // 다음 값들을 반환한다.
    System.out.println(item);
    }

    for(String item : set) { // 향상된 for문으로 다 뽑아낼수도 있지만
    // while문을 사용하면 하나씩 확인 할 수 있다.
    System.out.println(item);
    }

    // 특정 요소 삭제
    set.remove("Java");

    // 비었는지 확인 해서 비우기
    if(set.isEmpty()) {
    System.out.println(set.size());
    }else {
    set.clear();
    System.out.println(set.size());
    }
            
        }
    }

    class Member{}






    반응형

    'Java' 카테고리의 다른 글

    Java - Stack, Queue  (0) 2018.01.25
    Java - Map  (0) 2018.01.25
    Java - Generic Method  (0) 2018.01.24
    Java - Generic  (0) 2018.01.24
    Java - StringBuffer & StringBuilder  (0) 2018.01.23

    댓글

Designed by Tistory.