'map실습'에 해당되는 글 1건

  1. 2012.07.28 map실습

* 전체적으로 조회하는 것은 List가 좋고, 키 값을 가지고 딱 하나만 찾아 낼때는 Map이 편하다.
* Map -* HashTable <- Properties(객체와 객체에서 문자열로 특화시킨 것) <- key(String)
                                    value(String)
      -* HashMap <- key(Object) : key값 안에 들어가는 타입은 거의 String이 들어간다.
      중복허용(X)
      같은 Key-Object추가
      replace처리.
                    value(Object) : 중복허용(O)
        순서개념 없다.
* Map -* key - value
        (Object) (Object)

         - key와 value를 합치면 entry라 부른다.

- 메소드

추가, 변경(replace) : put(Object key,Object value)
조회 : get(Object key) : Object(Value)
삭제 : remove(Object key) : Object(Value)
Key값들(전체)을 조회하는 메소드 : keySet() : Set
entry들(전체)을 조회하는 메소드 : entrySet() : Entry
전체데이터 삭제 : clear()
entry의 개수 : size() : int

* key값의 존재 유무 :  containsKey(Object key) : boolean
  Value값의 존재 유무 :  containsValue(Object value) : boolean

* Map은 테이블 형태로 들어간다.

key    value
-----------------
| k1   |   1    |->entry
|-------------
| k2   |   2    |
|---------------
 

* project : day19
  package : collection.map
  class : MapTest

*new버전 :  java.util.Iterator (Interface) - 조회와 삭제가 가능
 old버전 : (java.util.Enumeration) (Interface) -  조회만 가능
 ->Collection(Interface) 객체가 관리하는 값(객체)들을 조회.

* Iterator : 조회와 삭제를 해준다.(데이터를 모아놓은 List나 Map이 있으면 옆에 붙어서 데이터를 조회 삭제만 한다. 데이터를 직접 모으진 않는다.)
  (장점 :  List나 Map, Set 등의 방법을 Iterator를 통해서 조회해 올수 있다. Set은 조회 방법이 없는데 Iterator를 통해서는 가능하다.)
  -> 값을 순서적으로 돌면서 하나씩 넘겨준다. 값이 없으면 값을 넘기지 않는다.

- Iterator메소드
가져올 값(return할 값)이 있는지 유무 :  hasNext() : boolean
값 리턴 : next() : Object
값 삭제 : remove() : void

- Enumeration
가져올 값(return할 값)이 있는지 유무 :  hasMoreElements() : boolean
값 리턴 : nextElement() : Object

* 사용법

Collection객체.iterator() -> Iterator
Collection객체 = Set,List..


* iterator를 사용한 조회
ex :
  System.out.println("----------Iterator를 이용한 조회-----------------");
  
  Iterator itr = set.iterator();
//  System.out.println(itr.next());
//  System.out.println(itr.next());
//  System.out.println(itr.next());
//  System.out.println(itr.next());
//  System.out.println(itr.next());
  
  while(itr.hasNext()){
   Object obj = itr.next();
   System.out.println(obj);
  }

-------------------------------------------------------------------------------

* Map을 사용한 상품관리 소스

package product.test;
import java.util.ArrayList;
import java.util.List;

import product.dto.DVDPlayer;
import product.dto.ProductDTO;
import product.dto.Television;
import product.service.ProductManagerService;
import product.service.ProductManagerServiceMap;

public class TestProductManagerMap{
 public static void main(String[] args){
  Television tv1 = new Television("tv-111", "LG-3D TV", 2000000, "LG", "최신형 티비", true, true, true);
  Television tv2 = new Television("tv-222", "파브-TV", 1000000, "삼성", "LCD 티비", false, false, true);
//  Television tv2 = new Television("tv-111", "파브-TV", 1000000, "삼성", "LCD 티비", false, false, true);
  DVDPlayer dvd1 = new DVDPlayer("dvd-111", "Bluelay-one", 120000, "삼성", "최신형 블루레이 플레이어", "C", true);
  DVDPlayer dvd2 = new DVDPlayer("dvd-222", "dvd-one", 50000, "LG", "DVD-RW 플레이어", "C", false);
  //관리자인 ProductManagerService객체 생성
  ProductManagerServiceMap pm = new ProductManagerServiceMap();
  pm.addProduct(tv1);
  pm.addProduct(tv2);
  pm.addProduct(dvd1); 
  pm.addProduct(dvd2);
  System.out.println("-------------상품 추가후---------------");
  pm.printProductList();//productList에 저장된 모든 ProductDTO 정보를 프린트
  System.out.println("-----------id로 제품정보 조회------------");
  ProductDTO p1 = pm.searchProductById("tv-111");
  System.out.println("tv-111 제품 정보 : "+p1);
  ProductDTO p2 = pm.searchProductById("tv-222");
  System.out.println("tv-222 제품 정보 : "+p2);
  ProductDTO p3 = pm.searchProductById("dvd-111");
  System.out.println("dvd-111 제품 정보 : "+p3);
  //없는 ID로 조회
  ProductDTO p4 = pm.searchProductById("dvd-222");
  System.out.println("dvd-222 제품 정보 : "+p4);
  System.out.println("-----------정보수정--------------");
  dvd2 = new DVDPlayer("dvd-222", "dvd-one", 702010, "LG", "DVD-RW 플레이어", "Code free", true);
  pm.modifyProductInfo(dvd2);
  pm.printProductList();
  System.out.println("--------삭제----------");
  pm.removeProductById("tv-111");
  pm.printProductList();
  System.out.println("--------Maker조회----------");
  
  ArrayList list = pm.searchProductsByMaker("삼성");
  
  for(int i=0;i<list.size();i++){
   System.out.println(list.get(i));
  }
  
  System.out.println("--------remove조회(Maker로 조회해서 온것 다 삭제----------");
  
 
  for(Object o : list){
   ProductDTO p = (ProductDTO)o;
   pm.removeProductById(p.getProductId());
  }
  pm.printProductList();
 }
}
---------------------------------

package product.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

 

import product.dto.ProductDTO;

public class ProductManagerServiceMap {
 private HashMap productList;

 // private ArrayList productList = new ArrayList();

 // 생성자
 public ProductManagerServiceMap() {
  productList = new HashMap();
 }

 private boolean isNull(Object obj) {
  // boolean flag = false;
  // if(obj ==null){
  // flag =true;
  // }
  // return flag;
  return obj == null;
 }

 // productList에 저장된 모든 제품 정보 출력
 public void printProductList() {

  Set key = productList.keySet();
  Iterator itr = key.iterator();
  while(itr.hasNext()){
//   Object key1 = itr.next();
//   ProductDTO value1 = (ProductDTO) productList.get(key1);
//   System.out.println(value1);
   System.out.println((ProductDTO) productList.get(itr.next()));
   
  }
//  for (Object obj : productList) {
//   System.out.println(obj);
//  }
 }

 // 추가
 public void addProduct(ProductDTO pdto) {
  if (isNull(pdto)) {
   System.out.println("Null 데이터는 추가할 수 없습니다.");
   return;
  }

  /*
   * //같은 ID가 있는지 비교. for(int i=0;i<productList.size();i++){ // ProductDTO
   * pto = (ProductDTO)productList.get(i); //
   * if(pdto.getProductId().equals(pto.getProductId())){ // // }
   * if(((ProductDTO)
   * productList.get(i)).getProductId().equals(pdto.getProductId())){
   * System.out.println("이미 등록된 제품 ID입니다. ID를 바꿔주세요."); return; } }
   */
  if(productList.containsKey(pdto.getProductId())){
   System.out.println("동일한 아이디가 있습니다.");
   return;
  }
  productList.put(pdto.getProductId(), pdto);
 }

 // id로 제품을 조회해서 return
 public ProductDTO searchProductById(String productId) {

  return (ProductDTO) productList.get(productId);

 }

 public void modifyProductInfo(ProductDTO pdto) {
  if (isNull(pdto)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return;
  }
  if(!productList.containsKey(pdto.getProductId())){
   System.out.println("동일한 Id가 없습니다.");
   return;
  }
  productList.put(pdto.getProductId(), pdto);

 }

 public void removeProductById(String productId) {

  if (isNull(productId)) {
   System.out.println("인자로 null값이 들어 왔습니다.");
   return;
  }
  if(!productList.containsKey(productId)){
   System.out.println("동일한 아이디가 없습니다.");
   return;
  }
  productList.remove(productId);
  
 }
 public ArrayList searchProductsByMaker(String productsMaker){
  ArrayList list = new ArrayList();
  

  Set keys = productList.keySet();
  Iterator itr = keys.iterator();
  while(itr.hasNext()){
   Object id = itr.next();
   ProductDTO pto = (ProductDTO) productList.get(id);
   if(productsMaker.equals(pto.getProductMaker())){
    list.add(pto);
   }
  }
  return list;
  
 }
}


---------------------------------

package product.dto;

public class ProductDTO {
 private String productId;
 private String productName;
 private int productPrice;
 private String productMaker;
 private String productInfo;
 public ProductDTO(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  this.productId = productId;
  this.productName = productName;
  this.productPrice = productPrice;
  this.productMaker = productMaker;
  this.productInfo = productInfo;
 }
 public ProductDTO() {
 }
 public String getProductId() {
  return productId;
 }
 public void setProductId(String productId) {
  this.productId = productId;
 }
 public String getProductName() {
  return productName;
 }
 public void setProductName(String productName) {
  this.productName = productName;
 }
 public int getProductPrice() {
  return productPrice;
 }
 public void setProductPrice(int productPrice) {
  this.productPrice = productPrice;
 }
 public String getProductMaker() {
  return productMaker;
 }
 public void setProductMaker(String productMaker) {
  this.productMaker = productMaker;
 }
 public String getProductInfo() {
  return productInfo;
 }
 public void setProductInfo(String productInfo) {
  this.productInfo = productInfo;
 }
 @Override
 public String toString() {
  return "ProductDTO [productId=" + productId + ", productName="
    + productName + ", productPrice=" + productPrice
    + ", productMaker=" + productMaker + ", productInfo="
    + productInfo + "]";
 }
 
}


-----------------------

package product.dto;

public class Television extends ProductDTO{
 private boolean threeD;
 private boolean smartTV;
 private boolean usb;
 public Television(String productId, String productName, int productPrice,
   String productMaker, String productInfo, boolean threeD,
   boolean smartTV, boolean usb) {
  super(productId, productName, productPrice, productMaker, productInfo);
  this.threeD = threeD;
  this.smartTV = smartTV;
  this.usb = usb;
 }
 public Television(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  super(productId, productName, productPrice, productMaker, productInfo);
 }
 public boolean isThreeD() {
  return threeD;
 }
 public void setThreeD(boolean threeD) {
  this.threeD = threeD;
 }
 public boolean isSmartTV() {
  return smartTV;
 }
 public void setSmartTV(boolean smartTV) {
  this.smartTV = smartTV;
 }
 public boolean isUsb() {
  return usb;
 }
 public void setUsb(boolean usb) {
  this.usb = usb;
 }
 @Override
 public String toString() {
  return "Television [threeD=" + (threeD ? "3DTV" : "2GTV") + ", smartTV=" + (smartTV ? "스마트TV" : "일반TV")
    + ", usb=" + (usb ? "Usb사용가능" : "usb사용불가능") + ", 일반제품정보=" + super.toString() + "]";
 }

 

 
 
}


------------------------

package product.dto;

public class DVDPlayer extends ProductDTO{
 private String areaCode;
 private boolean bluelay;
 public DVDPlayer(String productId, String productName, int productPrice,
   String productMaker, String productInfo, String areaCode,
   boolean bluelay) {
  super(productId, productName, productPrice, productMaker, productInfo);
  this.areaCode = areaCode;
  this.bluelay = bluelay;
 }
 public DVDPlayer(String productId, String productName, int productPrice,
   String productMaker, String productInfo) {
  super(productId, productName, productPrice, productMaker, productInfo);
 }
 public String getAreaCode() {
  return areaCode;
 }
 public void setAreaCode(String areaCode) {
  this.areaCode = areaCode;
 }
 public boolean isBluelay() {
  return bluelay;
 }
 public void setBluelay(boolean bluelay) {
  this.bluelay = bluelay;
 }
 @Override
 public String toString() {
  return "DVDPlayer [areaCode=" + areaCode + ", bluelay=" + (bluelay? "사용가능" : "사용불가능")
    + ", 일반제품정보=" + super.toString() + "]";
 }

 

}


----------------------


* map 타입 맞추기
HashMap map = new HashMap();
map.put("name","홍길동");
map.put("age",10);

Set ke = map.keySet();
Iterator itr = ke.iterator();
while(itr.hasNext()){
String k = (String)itr.next();
String v = (String)map.get(k);  //이렇게 하면 age의 10인 Integer를 받아올 때 실행시점에 에러가 난다.

그래서 제너릭을 사용해서 map만들 시에 타입을 HashMap<String, String> map = new HashMap(); 이렇게 해서 String 타입만 넣을 수 있게 한다.
제너릭은 실행 시점에 지정한다.

* Generic(제너릭) : class에서 사용할 type을 class작성시 지정하는 것이 아니라 사용시점에 지정하는 것.
구문 :  class선언
public class ClassName<E>{
public void go(E e){
}

사용
ClassName<String> c1 = new ClassNAme<String>();
ClassName<Human> c2 = new ClassName<Human>();

c1.go(String s);//(O)
c1.go(Integer i);//(X)


* Generic파라미터는 static 멤버에서는 사용 불가능 하다.

ArrayList<String> list = new ArrayList<String>();
list.add("aaa");
String str = list.get(0);
//list.add(new Human());//(X)

* 2012-3-22

* Enumeration enu;

while(enu.hasMoreElements()){
Object obj = enu.nextElement();
}

'프로그래밍 > JAVA프로그래밍' 카테고리의 다른 글

제너릭  (0) 2012.07.29
collection값 빼오기  (0) 2012.07.28
ArrayList실습  (0) 2012.07.28
5개의 로또번호 출력하기 - collection실습  (0) 2012.07.28
컬렉션(collection)  (0) 2012.07.28
Posted by 조은성
,