#1
배열(array)

① 배열 클래스
                                                                   int a[] = new int[10];

: 같은 데이터 타입 한번에 여러개 생성
: 첨자로 한번 크기를 정하면 동적으로 크기 변동불가
: 배열은 객체다.(배열이름이 참조변수이다.)
: 배열끼리 할당은 참조값만 복사이다.
   ▨다시말하지만, 참조값 복사는 주소만 복사하는 것과 같다.(4바이트만), (C++에서 매개편수를 &래퍼런스로 하는것과 같다)
      int[] source = new int[]{1,2,3,4,5}; 
      int[] src = source;                             //참조값만 복사로, 실제 메모리로 접근이 가능하다.
      int[] target = new int[source.length];   //source배열 크기만큼 target배열을 생성한다. 

   ▨배열 메모리를 복사하려면,
   - 부분 배열 복사 : System.arraycopy() 
                        int[] source = new int[]{5, 4, 6, 9, 7, 9};
                        int[] target = {100, 200, 300, 400, 500, 600,700};
                        System.arraycopy(source, 2, target, 3, 4); 
                            //System.arraycopy(원본배열, 원본시작위치, 복사할배열, 복사할배열시작위치, 개수)
                            //여기서 target{100, 200, 300, 400, 6, 9, 7, 9} 이 된다.
                                    
   - 전체 배열 복사 : 배열 자체의 clone()
                        int[] source = new int[]{5, 4, 6, 9, 7, 9}; 
                        int[] target = (int[])source.clone();
                            //clone()은 Object형으로 리턴하므로, int[]형으로 다시 다운캐스팅 해주어야한다.

: 초기화
   int[] a = new int[]{100, 200, 343, 325, 5, 2, 7, 30, 35, 43}; 
   int[] a = {100, 200, 343, 325, 5, 2, 7, 30, 35, 43};
   int[] a = new int[10];  //선언만 하고 값할당은 나중에..
: 참고
C에서는 배열을 사용할때, 함수로 변수와 개수를 함께 보내주어야 했지만, 자바에서는 객체만 하나만보내면 된다.(a.length)


②객체 배열
기본데이터 타입으로 ①번과 같이 만들면 선언과 동시에 메모리가 할당됩니다.
객체 배열은 첨자수만큼 참조변수가 만들어지고, 메모리를 할당되지 않는다.



③2차원 배열
: 초기화  
   int[][] a = new int[][]{{100, 200, 300}, {400,500,600}};
   int[][] a = {{1000, 2000, 3000}, {4000,5000,6000}};
: 참고
   a.length : 2
   a[0].length : 3
   a[1].length : 3







#2,3
입문 전

Collection(컬렉션)와 Map(맵) 인터페이스 클래스
특징은
배열과 다르게 동적으로 크기를 늘리고, 줄일수 있다.
배열은 데이터타입을 Collection과 Map은 객체만을 대상으로 한다.

 : Collection과 Map은 인터페이스이기 때문에 메서드의 프로토타입만 존재한다. 
 : Collection을 구현해서 사용 => 집합적인 저장공간으로서의 기능을 구현한 클래스가 된다. 
 : Map을 구현해서 사용 => 검색적인 저장공간으로서의 기능을 구현한 클래스가 된다.
 : 참고
   배열의 범위를 넘어가면 ArrayIndexOutOfBoundsException 오류를 발생한다.

           
                                                       Collection(컬렉션) 인터페이스 => 집합
   : 구현 클래스: Stack, Vector, LinkedList, TreeSet, HashSet => 배열로 쉽게 전환할 수 있는 메서드 보유한다.
   : Collection(컬렉션)의 Vector클래스로 접근해보겠습니다.
   : 키 없이 단순히 데이터만을 넣어두고자 할 때
삽입 메소드: boolean add(Object o)
삭제 메소드: boolean remove(Object o)
                        
                                                             Map(맵) 인터페이스 => 검색
   : 구현 클래스 : Attributes, HashMap, Hashtable, TreeMap => 검색을 위해 Key를 보유 한다.
   : Map(맵)의 Hashtable클래스 접근해보겠습니다.
   : 키를 사용해서 데이터를 빠르게 검색하려할 때
삽입 메소드: Object put(Object key, Object value)
삭제 메소드 : Object remove(Object key)



#2
Vector 예제
import java.util.Vector;
public class VectorMain2 {
   public static void main(String[] args) {
      Vector v = new Vector();                           //객체 생성 
      v.addElement(new Character('A'));           //Vector v에 객체삽입
      v.addElement(new String("굼뱅이"));          //Wrapper 클래스의 사용 
      v.addElement(new Integer(100)); 
      v.addElement(new Integer(200));
      System.out.println(v.size()); = 4
      v.insertElementAt(new Float(3.141592), 1);           //1번째에 중간삽입, 1번째에 있던 데이터는 2번째가 된다.
      System.out.println(v.size()); = 5
      v.setElementAt("Hello", 3);                                 //3번째 존재하는 데이터를 수정 
      System.out.println(v.size()); = 5
      System.out.println("0번째:" + (Character)v.elementAt(0)); = A
      System.out.println("1번째:" + (Float)v.elementAt(1)); = 3.141592
      System.out.println("2번째:" + (String)v.elementAt(2)); = 굼뱅이
      System.out.println("3번째:" + (String)v.elementAt(3)); = Hello
      System.out.println("4번째:" + (Integer)v.elementAt(4)); = 200
                                                                  //"Hello" 검색 
      if(v.contains("Hello")){                            //데이터가 있는지 확인
         int find = v.indexOf("Hello");                  //위치(인덱스)를 이용한 데이터의 추출 
         System.out.println("v의" + find + "번째:" + (String)v.elementAt(find)); = v의 4번째:200 
      }
   }
}
일반 배열이랑 같군요. 배열이랑 다른건, 모든 객체를 받을 수있다는거? 인거같군요.음..


#3
Hashtable 예제
import java.util.Hashtable;
public class HashtableMain {
      public static void main(String[] args) {
      Hashtable h = new Hashtable();               //객체 생성 
      h.put("Name", new String("홍길동"));        //Hashtable에 키와 데이터의 삽입 
      h.put("Age", new Integer(27));
      h.put("Tel", new String("02-1111-2222"));
      h.put("Handphone", new String("017-777-9999"));
      h.put("Etc", new String("I'm a boy")); 
      String name = (String)h.get("Name");       //키 값을 이용해서 객체 추출 
      System.out.println(name);  = 홍길동
      Integer age = (Integer)h.get("Age");
      System.out.println(age.intValue()); = 27
   }
}
키로 모든걸 컨트롤하는 클래스인거 같군요.. DB가 생각나는군..음..




#4
Enumeration == Iterator
Vector와 Hashtable을 사용할 때, 검색을 용도로 할때!, 반복문을 쓰려할떄!! 도와주는 열거자이다.
Iterator는 최신이름, Enumeration 구형이름, 둘 중 아무거나 써도 된다. 결국, 같은 기능이다.^_^
import java.util.*;
public class EnumVectorMain {
   public static void main(String[] args) {
      Vector v = new Vector();
      v.addElement(new String("망아지"));
      v.addElement(new String("송아지"));
      v.addElement(new String("강아지"));
      v.addElement(new String("병아리")); 
   
      //Vector에서 Enumeration 얻기
      Enumeration enum = v.elements();

      //Vector에 다음 데이터가 존재하는지 검사 
      while(enum.hasMoreElements()){
         //다음 데이터를 추출
         String temp = (String)enum.nextElement();
         System.out.println(temp);
      }
   }
}



import java.util.*;
public class EnumHashtableMain {
   public static void main(String[] args) {
      Hashtable h = new Hashtable(); 
      h.put("1", new String("홍길동"));
      h.put("2", new String("안녕하세요"));
      h.put("3", new String("02-1111-2222"));
      h.put("4", new String("017-777-9999")); 

      //Enumeration 얻기 
      Enumeration enum = h.elements();

      //다음 데이터 존재 여부 확인 
      while(enum.hasMoreElements()){         
         //다음 데이터를 추출
         String temp = (String)enum.nextElement();
         System.out.println(temp);
      }
   }
}


(혹시,.. 키 값을 얻고 싶으면)
Enumeration enum2 = h.keys();
Enumeration 작업을 할때는, 첫번재 위치는 데이터 앞쪽에 있다고 생각하면 쉽게 이해된다.
위에서 Enumeration enum = v.elements() 이부분이 아래에 ⓥ여기!!라고 생각하면 된다.
ⓥ여기!!    ⓞ번 data:3    ①번 data:4    ②번 data:13    ③번 data:1    ④번 data:hello    ⑤번 data:3.123    ⑥번 data:hi
이렇게 되면 Enumeration을 얻고, 그 위치에서 다음 데이터가 존재하는지 여부만 보면 된다. ㅎㅎ

Enumeration랑 Iterator 메소드 사용 비교하면 아래와 같다.
                    Enumeration
-hasMoreElements()
-nextElement()
                     Iterator
-hasNext()
-next()
                    Vector Enumeration enum = v.elements(); Iterator iter = v.iterator();
                 Hashtable Enumeration enum = h.elements();
Enumeration enum2 = h.keys();
Iterator iter = h.values().iterator();
Iterator iter = h.keySet().iterator();





배열은 그냥. .. . 어디서나 생각하는 그런 기본적인 배열구조이고,
컬렉션은 모든 객체를 배열 형태로 가질 수 있는 구조이고, 
맵은 객체를 삽입하면 알아서 정렬되어 저장되는 key를 사용해 모든걸 해결하는 구조네요. 여기서는 Hashtable..배열형태로 오해할만하기도한데, 맵이 어떤구조인지 좀더 알아봐야겟네.. 생각했던거랑 쫌 달느거같긱도하고.. 트리형태로 생각됬었는데.. 맵.. 맵.. 맵.. 여기저기.. 뭐 여튼 key로 해결한다는게 중요한거같네요. 자바의 기본적인 자료구조 이상!