Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Tags
more
Archives
Today
Total
관리 메뉴

붓, 그리다

컬렉션 ★★ 본문

JAVA/Basic

컬렉션 ★★

붓그린 2017. 6. 19. 16:15

[ 컬렉션 ]
- 데이터를 저장, 즉 겍체만 저장 가능하다
- 기본 자료형은 객체가 아니기 때문에 저장할 수 없음


[ Wrapper Class ]
기본자료형의 값을 객체형태로 만들어서 제공되는 클래스
-> 컬렉션에 기본자료형을 집어넣기 위해 만들어진 클래스
- 기본자료형의 첫글자만 대문자로 쓰면 Wrapper Class가 된다

기본자료형byteshortintlongfloatdoublecharboolean
Wrapper ClaseeByteShortIntger.parseInt(~)LongFloatDouble
Character.isDigit(),
Character.toUpperCase()
Boolea

- String은 Wrapper Class가 아니다



1) unboxing
- 자바의 객체형(Wrapper)이 기본자료형으로 변환

2) boxing
- 자바의 기본자료형이 자바의 객체형(Wrapper 클래스)로 변환


package j0619;
// Wrapper 클래스 : 자바의 기본자료형의 값을 컬렉션객체에 저장하기 위해서
// 기본자료형 <--> Wrapper클래스의 자료형
public class BoxingTest {

        public static void main(String[] args) {
                System.out.println("자동 unboxing");
                //unboxing : 자바의 객체형(Wrapper)가 기본자료형으로 변환
                //int obj=10;
                Integer obj=new Integer(10);
                int sum=obj+20;
                //Double obj2=new Double(23.5);
                System.out.println("sume=>"+sum);
                //boxing : 자바의 기본자료형이 객체형(Wrapper)로 변환
                Double d=new Double(123.45);
                printDouble(d);
        }

        static void printDouble(Double obj2) { // 123.45 -> toString() => "123.45"
                System.out.println(obj2.toString());
        }

}





- 스택 : 한쪽은 막혀 있고 한쪽은 open
- 큐 : 양쪽이 다 open
- 배열 : 기차모양처럼 한쪽으로 늘어뜨린 구조 또는 사물함 구조


데이터를 관리 -> 자바의 컬렉션 -> 구조와 상관없이 공통적으로 사용
1) 데이터를 저장(추가)
2) 데이터를 삭제
3) 데이터를 수정 -> 원하는 데이터만 수정
4) 데이터를 검색

-> 인터페이스를 작성(공통메소드) -> Collention
데이터의 저장 구조에 따라서 1) List 2) Set 3) Map 으로 나눔

1) List 인터페이스
- 중복저장이 가능하며 저장순서가 있다
- 배열
- 인덱스 번호로 구분
- Vector->ArrayList, LinkedList

2) Set 인터페이스
- 데이터 중복 저장이 안되며 저장되는 순서가 없다
- 항아리
- HashSet

3) Map
- 표형태로 저장(키, 값)
- 사물함 구조
- 저장시 키를 부여하며 키를 이용하여 빠르게 검색
- HashTabel,HashMpa => 웹에서 세션값 저장시 많이 사용




[ 컬렉션의 특성 ]

1) 객체만 저장
-> 기본자료형은 저장이 안됨, Wrapper 클래스를 이용 가능
2) 정벅배열(크기가 정해져 있는 경우) <-> 동적배열(크기가 유동)
3) 객체를 저장 : 형이 Object형으로 변환
-> 어떠한 객체라도 다 저장이 가능하게 만들기 위한 목적
4) 저장된 데이터를 꺼내올 때 원해의 형으로 형변환시켜야 한다.

[ 단점 ]
- 3), 4)로 인해 원하지 않는 데이터도 저장이 된다
- 자료형에 문제발생(ex. Type mismatch)

[ 제너릭]

클래스명<자료형>

=> 저장할 자료형을 미리 지정하는 제너릭 체제로 변경
- 제너릭을 부여하면 자료형을 형변환 할 필요가 없다


자동 Boxint)

package j0619;

import java.util.*;
public class VectorTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                        Vector v=new Vector(); // new Vector(1,1);와 동일
                        v.add("테스트"); // v.add(new String("테스트));
                        v.add(100); // v.add(new Integer(100)); 자동 Boxing
                        // 기본자료형을 넣으면 자동 Boxing이 된다.
                        v.addElement("임시테스트");
                        v.add("테스트2");
                        System.out.println("v의 크기(size)는 : "+v.size());
        }

}


제너릭 부여)

package j0619;

import java.util.*;
public class VectorTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                        Vector<String> v=new Vector<String>(); // new Vector(1,1);와 동일
                        v.add("테스트"); // v.add(new String("테스트));
                        v.add(100); // 오류 뜸
                        v.addElement("임시테스트");
                        v.add("테스트2");
                        System.out.println("v의 크기(size)는 : "+v.size());
        }

}





Vector)

package j0619;

import java.util.*;
public class VectorTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                        Vector v=new Vector();
                        //형식) 클래스<String> :
                        //Vector<String> v=new Vector<String>(); // new Vector(1,1);와 동일
                        v.add("테스트"); // v.add(new String("테스트));
                        //v.add(100); // v.add(new Integer(100)); 자동 Boxing
                        // 기본자료형을 넣으면 자동 Boxing이 된다.
                        v.addElement("임시테스트");
                        v.add("테스트2");
                        System.out.println("v의 크기(size)는 : "+v.size());

                        //값 출력
                        for(int i=0; i<v.size();i++) {
                                String temp=(String)v.elementAt(i);
                                // 제너릭을 주면 (String) 자료형 형변환을 할 필요가 없다.
                                System.out.println("temp=>"+temp);
                        }

                        // 다양한 값을 저장
                        Vector v2=new Vector();
                        v2.add(new Character('a')); // v2.add('c'); //0
                        // 3.141592 / 1번 인덱스
                        v2.addElement(100); //1->2번 인덱스로 변경->"Set"으로 수정
                        // 중간에 값을 추가(insert)하고 싶을 경우
                        v2.insertElementAt(3.141592, 1); // 저장할 객체명, 삽입할 인덱스번호
                        // 수정 : setElementAt(수정할 객체명, 수정할 인덱스위치)
                        v2.setElementAt("Set", 2);

                        //출력
                        for(int i=0;i<v2.size();i++) {
                                System.out.println("v2의 값 => "+v2.elementAt(i));
                        }

        }

}



ArrayList)


package j0619;

import java.util.*;

public class ArrayListTest {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                // Vector는 메모리를 많이 차지 -> 개선 ArrayList, LinkedList
                ArrayList<String> list=new ArrayList<String>(); //형변환할 필요 없음
                list.add("포도"); //0, 객체명이 포도가 아니라 사과로 변경
                list.add("딸기"); //1
                // "키위" 인덱스번호 2
                list.add("복숭아"); //2->3
                // 중간에 삽입(inset) : add(삽입할 위치, 삽입할 객체명)
                list.add(2, "키위"); //2번 인덱스번호 위치에 키위를 삽입
                // 수정(set) : set(수정할 위치, 수정할 값)
                list.set(0, "사과"); // 0번 인덱스번호 위치한 객체명(포도)를 사과로 수정
                //삭제(remove) : 1) remove(삭제할 데이터명) or 2) remove(인덱스번호) -> 중복데이터일 경우 인덱스번호로 삭제
                list.remove("키위");

                //배열로 호출
                for(int i=0; i<list.size();i++) { // 가져오는 메서드 : get(인덱스번호)
                        String temp=list.get(i); //제너릭이 적용된 컬렉션은 가져올 때 형변환이 필요 없다
                        System.out.println("temp : "+list.get(i));
                }
        }

}



LinkedList)

package j0619;

import java.util.*;

public class ArrayListTest {
        public static void main(String[] args) {
                // TODO Auto-generated method stub
                // Vector는 메모리를 많이 차지 -> 개선 ArrayList, LinkedList
                LinkedList<String> list=new LinkedList<String>();
                list.add("포도"); //0, 객체명이 포도가 아니라 사과로 변경
                list.add("딸기"); //1
                // "키위" 인덱스번호 2
                list.add("복숭아"); //2->3
                // 중간에 삽입(inset) : add(삽입할 위치, 삽입할 객체명)
                list.add(2, "키위"); //2번 인덱스번호 위치에 키위를 삽입
                // 수정(set) : set(수정할 위치, 수정할 값)
                list.set(0, "사과"); // 0번 인덱스번호 위치한 객체명(포도)를 사과로 수정
                //삭제(remove) : 1) remove(삭제할 데이터명) or 2) remove(인덱스번호) -> 중복데이터일 경우 인덱스번호로 삭제
                list.remove("키위");

                //배열로 호출
                for(int i=0; i<list.size();i++) { // 가져오는 메서드 : get(인덱스번호)
                        String temp=list.get(i); //제너릭이 적용된 컬렉션은 가져올 때 형변환이 필요 없다
                        System.out.println("temp : "+list.get(i));
                }
        }

}

-> ArrayList와 LinkedList는 구조는 다르나 같은 계열이기에 사용하는 메서드가 동일


확장for문을 활용한 검색방법)

// 검색방법 2 : 확장 for문 -> 배열이나 컬렉션객체의 값을 꺼내올 때
                System.out.println("==확장 for문==");
                for(String s:list) //for 자료형 출력변수명:배열 또는 컬렉션 객체명
                        System.out.println(s);
        }



[ Stack과 Queue ]





*컬렉션의 값을 검색할 때
- 클래스마다 조금씩 차이가 있다
- ArrayList : get(인덱스번호)
- Vector : elementAt(인덱스번호)



[ Iterator와 Enumeration ]
- 검색에 관련된 인터페이스
- 데이터 저장 구조에 상관없이 공통적인 검색방법을 사용 가능
-> 메서드의 매개변수 또는 반환형을 통해서 객체를 얻어옴
- Enumeration : hasMoreElement(), nextElement()


package j0619;

import java.util.*;

//제너릭?, Map(Hashtable, HashMap)+검색(Enumeration,Iterator)
public class EnumTest {

        public static void main(String[] args) {
                // TODO Auto-generated method stub
                Vector<String> v=new Vector<String>();
                v.add("test1"); v.add("test2"); v.add("test3");
                System.out.println("해쉬테이블(Map)");
                Hashtable<Integer,String> h=new Hashtable<Integer, String>();
                h.put(1, "홍길동"); h.put(2, "테스트"); h.put(3, "010-1234-4564");
                 String tel=h.get(3); //get(검색할 키명) : 키를 알고 있으면 검색속도가 빠르다
                 System.out.println("tel : "+ tel);

                 // 1) 공통으로 검색하는 방법 : Enumeration -> 배열의 값을 출력
                 System.out.println("==Enumeration으로 검색==");
                 Enumeration <String>eu=v.elements();
                 while(eu.hasMoreElements()) //검색해서 꺼내올 객체가 존재한다면
                         System.out.println(eu.nextElement()); //꺼내와서 출력

                 // 2) Iterator (책꽂이에 들어가 있는 책을 연상)
                 System.out.println("==Iterator로 검색==");
                 Iterator<String> ih=v.iterator();
                 while(ih.hasNext()) // 검색해서 꺼내올 객체가 존재한다면
                         System.out.println(ih.next());

        }

}






'JAVA > Basic' 카테고리의 다른 글

제너릭의 종류 1) Class 클래스명<T>{}  (0) 2017.06.20
제너릭 Genrics 개요  (0) 2017.06.20
쓰레드 2 (동기화, Singleton)  (0) 2017.06.19
상속, 오버라이딩  (0) 2017.06.16
쓰레드  (0) 2017.06.16
Comments