본문 바로가기

JAVA

16장

자료를 저장하는 방식 대표적인거
List
-(1차원으로,sequence(열),중복가능)
Set
-중복자료를 넣을 수 없다 .
Map
<key,value>를 쌍으로 집어 넣어서 key로 자료를 찾는다.
일반적으로 key값은 String으로 많이 쓴다. 


List 와 Set은 collection 인터페이스에서 상속을 받는다.
모두다 인터페이스 타입 이다.
 그래서 모두 다 구현해야 한다.
Map은
592페이지 참조

ArrayList에 만약에 Dog를 넣으면 object타입으로 들어 간다.
내올때도 object타입으로 나온다. 그래서 (Dog)으로 캐스팅해서 쓴다.
이러면 불편해서
ArrayList<Dog>으로 타입으로 바로 넣을 수 있게 한다.
그래서 나올때도 Dog타입으로 나온다.
이런게 제네릭이다.
제네릭 선언방법(578p)
이런거 할일은 거의없지만 api에 써있어서 읽을줄은 알아야 한다.
E에 Dog로 쓰면 E에있는건 다 Dog로 바뀐다. (의미만 기억해도 된다)


ArrayList 원소 정렬하기
-정렬 메소드 찾아보기
-하지만 정렬메소드가 없다..ArrayList에는

Collection.sort()메소드
-이걸 사용하면 알파벳순으로 정렬을 할 수 있다.
-하지만 String 객체가 아닌, 다른 복잡한 객체로 구성된 리스트는 어떻게 정렬 할까요?
sort()에인자를 넣어서 comparable을 확장한 것이어야 한다. 

sort()에서는 comparable에있는 compareTo()메소드를 찾아서 정렬 해준다. 
String 객체는 자동으로 있지만 다른것은 없다. 

 
package test3.student;

import java.util.ArrayList;
import java.util.Collections;

public class SortTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  ArrayList<Employee> lists=new ArrayList<Employee>();
  
  Employee emp1= new Employee("af", 15);
  Employee emp2 = new Employee("1213",18);
  Employee emp3 = new Employee("adas",9);
  
  lists.add(emp1);
  lists.add(emp2);
  lists.add(emp3);
  
  Collections.sort(lists);
  ArrayList<String> list2 = new ArrayList<String>();
  list2.add("fault");
  list2.add("add");
  list2.add("ddd");
  
  }

}

class Employee implements Comparable {
 public String getName() {
  return name;
 }
 public int getAge() {
  return age;
 }
 Employee(String name, int age){
  super();
  this.name= name;
  this.age = age;
 }
 public void setName(String name) {
  this.name = name;
 }
 public void setAge(int age) {
  this.age = age;
 }
 
 String name;
 int age;
 
 @Override
 public int compareTo(Object arg0) {
  
  return this.name.compareTo(((Employee)arg0).getName());
 }

 
 
}

제네릭과 형안정성
제네릭을 사용하지 않으면
-object 타입으로 들어가서 모든 이상한게 다 들어간다
제네릭을 사용하면
-<fish>로 하면 fish만 들어가고 나올때도 fish로 나온다.
-형 안정성이 확보된다.

제네릭 사용법
제네릭을 사용하는 클래스
-new ArrayList<Song>()
-List<Song> songLIst=new ArrayList<Song>()



ArrayList<Dog>  , ArrayList<Animal>은
다형성과 상관없이 완전히 다른 타입이다.
Animal에 Dog이들어갈 수 없다.
이거 무조건 pdf 16장 7p꼭 봐라..들어 갈 수도 있다.
< T extends Comparable<? super T>>
     하위범위                      상위범위


comparator를 사용하면 comparable을 구현하지 않는 클래스를 정렬 할 수 있다. 
비교자 클래스를 만들어 주는 것
구현하는 것은 pdf 참조

정렬을 하고싶으면 객체 스스로 비교 할 수 있고(comparable)compareTo()
비교를 해주는 것이 있다(comparator)compare()
두가지 방법이 있다. 
 
List
-인덱스 제공
-Listlterator를 줄 수 있음
-ArrayList(상당히 빠르고 크기를 마음대로 조절, 초강력 배열)
-Vector(요즘대부분 안씀, ArrayList의 구형 버젼)
-LinkedList(스택,큐,양방향큐, 원소를 쉽게 제거 할수 있음)

Set
-중복된 항목이 들어가는 것을 방지함
-equals() 메소드를 이용하여 중복 확인
-HashSet (가장빠른임의접근속도, 순서를전혀예측할수없음)
-LinkedHashSet (추가된순서, 또는가장최근에접근한순서대로접근가능)
-TreeSet (정렬된순서대로보관. 정렬방법을지정할수있음)

Map
-키와 값을 대응시키는기능을 제공
-키와 값은 모두 객체여야만 함
HashMap  가장빠른임의접근기능을제공
HashtableHahsMap  의구형버전
LinkedHashMap  LinkedHashSet과유사. 입력된순서또는가장최근에접근된순서대로보관
TreeMap 정렬된순서대로유지하기에좋음


객체가 같은지 확인하는 방법
객체 동치
-equal()메소드에 대해 true가 리턴되는 것
-똑같은 객체를 참조해야 하는 것은 아님
레퍼런스 동치
-두 레퍼런스가 같은 객체를 참조하는 경우
- a==b가 참이 되어야 함


어떤조건에서두객체가같다고인정할수있을지결정한다음equals() 메소드를오버라이드이때
hashCode() 메소드도반드시오버라이드해야함


Comparable인터페이스 구현해봐라 compareTo()메소드까지 해줘야 한다. 객체 스스로 
Comparator를 써서 비교할 수 있다. 다른 객체끼리 비교
중요 주용 중요 중요 중요 중요 중요 중요 중요
api함 봐바
유틸에서

여기에서 사용방법은 당연히 알고 있어야 한다. 또한 제대로 쓸려면 그거에 맞는 클래스를 쓸 줄 알아야 한다.
제대로된 기능을 활용 할 줄 알아야 한다.

'JAVA' 카테고리의 다른 글

java 시험 관련  (0) 2010.09.03
15장 스레드  (0) 2010.09.02
자바 11장(예외처리)  (0) 2010.08.31
자바 10장  (0) 2010.08.31
자바용어 2  (0) 2010.08.23