* 전체적으로 조회하는 것은 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 |