다잇소


[IT/트랜드] Java 기초 – ⑫ ( Collection)

2017.10.16
 


 20. Java Collection Framework



1.         개요


Java 1.2에서 도입


Collection과 Map으로 구분이 됨


Collection은 Set, List와 Queue로 구분이 됨
































Type



용도



하위 Class



Set



중복 data를 가질 수 없으나, 순서는 보장하지 않음



HashSet, LinkedSet, TreeSet(정렬됨)



List



중복 data를 가질 수 있고, 순서를 보장함



ArrayList,Vector,LinkedList



Queue



FIFO가 보장된 자료 구조



LinkedList, PriorityQueue



Map



Key와 value가 mapping 자료구조, Key의 유일성 보장



Hashtable, LinkedHashtable,HashMap,


TreeMap(정렬됨)



– Collection 구조


1506219642708


– Map 구조


1506219642711


 


2.         List<E>


– 입력 순서대로 순서가장됨


– 자료가 중복이 될 수가 있음


– index가 0부터 시작이 되며, index로 자료의 접근이 가능함


– Object로 자료를 찾을 때는 해당 object의 equals method를 이용


예제 20 – 1










package com.kds.java.basic.char06;


 


import java.util.ArrayList;


import java.util.Arrays;


import java.util.Collections;


import java.util.List;


 


public class ArrayListTest1 {


 


public static void main(String[] args) {


List<String> list = new ArrayList<String>();


list.add(“string1”);


list.add(“string2”);


list.add(“string3”);


list.add(“string4”);


System.out.println(list.size());



list.remove(3); // Or list.remove(“string4”);(equals())


System.out.println(list.size());


 


list.add(0, “string0”);


System.out.println(list.get(0));



list.set(3, “STRING3”);


System.out.println(list.get(3));



if( list.contains(“STRING3”)) {


System.out.println(“list contains STRING3.”);


}


else {


System.out.println(“list doesn’t contain STRING3.”);


}



for( String string : list) {


System.out.println(string);


}



Collections.sort(list);


String [] strAry = (String[]) list.toArray();


list = Arrays.asList(strAry);



list.clear();


}


}



– Vector는 Thread safe이고, ArrayList는 Thread safe가 아님


– LinkedList는 자료조작에 유리하고, ArrayList는 자료접근에 유리한 구조


 


3.         Map<Key, Value> or Map(K,V)


key와 value가 짝으로 자료가 저장이 됨


저장한 순서대로 순서를 보장하지 않음


key값은 중복을 허락하지 않음


– key 값을 찾을 때는 equals와 hashCode를 이용 함
예제 20 – 2










package com.kds.java.basic.char06;


 


import java.util.ArrayList;


import java.util.HashMap;


import java.util.Iterator;


import java.util.Map;


import java.util.Map.Entry;


import java.util.Set;


import java.util.TreeMap;


 


public class HashMapTest1 {


 


public static void main(String[] args) {


Map<String, Object> map = new HashMap<String, Object>();


map.put(“string1”, 10);


map.put(“string2”, 12.0);


map.put(“string3”, “string data”);


map.put(“string4”, new ArrayList<String>());


System.out.println(map.size());


 


map.remove(“string data”); // Or map.remove(3);(equals())


System.out.println(map.size());


 


Set<Entry<String, Object>> set = map.entrySet();


Iterator<Entry<String, Object>> iterator = set.iterator();


while (iterator.hasNext()) {


Map.Entry<String, Object> mentry = (Map.Entry<String, Object>) iterator.next();


System.out.print(“key is: “ + mentry.getKey() + ” & Value is: “ + mentry.getValue());


}


 


map.put(“string3”, “STRING DATA”);


System.out.println(map.get(“string3”));


 


if (map.containsKey(“string3”)) {


System.out.println(“map contains the key of string3.”);


} else {


System.out.println(“map doesn’t contain the key of string3.”);


}



map.remove(“string3”);


if (map.containsKey(“string3”)) {


System.out.println(“map contains the key of string3.”);


} else {


System.out.println(“map doesn’t contain the key of string3.”);


}



Map<String, Object> treeMap = new TreeMap<String, Object>(map);


Map.Entry<String, Object>[] mapEntry  = (Map.Entry<String, Object>[]) map.entrySet().toArray();



map.clear();


}


}



– Hashtable는 Thread safe이고, key나 value의 null을 허용치 않은 반면에, HaspMap은 Thread safe가 아니고 key나 value의 값이 null을 허용


LinkedHashMap의 입력한 순서를 보장하나, HashMap은 입력 순서를 보장하지 않음


– TreeMap은 오름차순으로 key가 정렬이 되나, HashMap은 정렬 순서 없음


 


4.         List<E>와 Map<K,V>의 조합 예제


– table형 data를 가져오기 구조를 가지고 있음


– Query 결과를 fetch 가져오는 데 유리한 구조를 만들 수 있음


– Map을 이용한 SQL parameter변수를 설정할 때 유리함
예제 20 – 3










package com.kds.java.basic.char06;


 


import java.sql.Connection;


import java.sql.DriverManager;


import java.sql.PreparedStatement;


import java.sql.ResultSet;


import java.sql.SQLException;


import java.sql.Statement;


import java.util.ArrayList;


import java.util.HashMap;


import java.util.Iterator;


import java.util.List;


import java.util.Map;


import java.util.Set;


import java.util.Map.Entry;


 


public class ListAndMapTest {


public static void main(String[] args) throws SQLException {


Map<String,String> paramMap = new HashMap<String, String>();


paramMap.put(“FR_AGE”, “11”);


paramMap.put(“TO_AGE”, “20”);



List<Map<String,Object>> fetchList = ListAndMapTest.getList(paramMap);


for(Map<String,Object> map : fetchList) {


Set<Entry<String, Object>> set = map.entrySet();


Iterator<Entry<String, Object>> iterator = set.iterator();


while (iterator.hasNext()) {


Map.Entry<String, Object> mentry = (Map.Entry<String, Object>) iterator.next();


System.out.print(“key is: “ + mentry.getKey() + ” & Value is: “ + mentry.getValue());


}


}


}



public static List<Map<String,Object>> getList(Map<String,String> paramMap) {


List<Map<String,Object>> fetchList = new ArrayList<Map<String,Object>>();


Connection conn = null;


try {


Class.forName(“com.mysql.jdbc.Driver”);


String url = “jdbc:mysql://localhost:3306/travel”;


conn = DriverManager.getConnection(url, “root”, “admin”);


String sql = “SELECT name,gender,address,age “


  + “FROM person “


  + “WHERE age between ? and ? “;



PreparedStatement pstmt = conn.prepareStatement(sql);


pstmt.setInt(1, Integer.parseInt(paramMap.get(“FR_AGE”)));


pstmt.setInt(2, Integer.parseInt(paramMap.get(“FR_TO”)));


ResultSet rset = pstmt.executeQuery();


Map<String,Object> map = null;


while( rset.next()) {


map = new HashMap<String,Object>();


map.put(“NAME”, rset.getString(“NAME”));


map.put(“GENDER”, rset.getString(“GENDER”));


map.put(“ADDRESS”, rset.getString(“ADDRESS”));


map.put(“AGE”, rset.getInt(“AGE”));


fetchList.add(map);


}


rset.close();


rset = null;


pstmt.close();


pstmt = null;



} catch (Exception e) {


e.printStackTrace();


}


finally {


try { conn.close(); } catch(Exception ignore) {}


}



return fetchList;


}


}



 




 




설정된 프로필 사진이 없습니다.
| Wise리더
관심분야 IT,여행,맛집

카테고리 레이어 닫기