🐷
プログラミング自主学習 DAY68 Map
Map
keyとvalueに構成されたEntry(エントリー) というオブジェクトを保存する。
keyはvalueを区別するものであるため、中腹を許さないが、valueは中腹保存ができる。
配列の場合は、一つのindexuに一つの値しかこめないが、keyは異なるイメージだ。
https://slideplayer.com/slide/6125273/
Mapを具象したクラスは、HashMap, HashTable, LinkedHashMap, Properties, TreeMapなどがある。
機能 | メソッド | 説明 |
---|---|---|
Create & Update | put(K key, V value) | keyとvalueを追加し、valueをリターン |
Read | boolean containsKey(Object o) | 指定したkeyがあるかをチェック |
boolean containsValue(Object o) | 指定したvalueがあるかをチェック | |
Set<Map.Entry<K,V>>entrySet | Keyとvalueに構成されたすべてのMap.entryオブジェクトをSetに込めてリターン | |
V get(object key) | 指定したkeyのvalueをリターン | |
Set<K>keySet | 全てのkeyをSetに込めてリターン | |
boolean isEmpty() | コレクションが空いているかをチェック | |
int size() | 保存されたkeyの総数をリターン | |
Collection<V>values() | 保存されたすべてのvalueをCollectionに込めてリターン | |
Delete | void clear() | 保存されたすべてのMap.Entryを削除する |
V remove(Object key) | 指定したkeyと一致したMap.Entryを削除、削除ができれば、valueをリターン |
HashMap
HashSetのように、HashCode()と戻り値が同じで、equals()がtrueであれば、同じkeyとしてみなされ、重複保存はされない。
Map<String, Integer> map = new HashMap<String, Integer>();
Map<String, Integer> map = new HashMap<>();
HashMapExample
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Iterator;
import java.util.Set;
public class HashMapExample {
public static void main(String[] args) {
//Key: String value:Integer
Map<String, Integer> map = new HashMap<>();
map.put("jack", 85);
map.put("Adam", 50);
map.put("Nick", 50);
map.put("jack", 50); //"jack" 80 -> 50
System.out.println("total Entry:" + map.size());
System.out.println();
//get value from key
String key = "jack";
int value = map.get(key);
System.out.println(key + ": " + value);
System.out.println();
//get keys from Set and get value from key
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while(keyIterator.hasNext()) {
String k = keyIterator.next();
Integer v = map.get(k);
System.out.println(k +" :" +v);
}
System.out.println();
//get entry from Set and get key and value from iterate
Set<Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Entry<String, Integer>> entryIterator = entrySet.iterator();
while(entryIterator.hasNext()) {
Entry<String, Integer> entry = entryIterator.next();
String k = entry.getKey();
Integer v = entry.getValue();
System.out.println(k +" :" +v);
}
System.out.println();
map.remove("jack");
System.out.println("total Entry:" + map.size());
System.out.println();
}
}
total Entry:3
jack: 50
Adam :50
Nick :50
jack :50
Adam :50
Nick :50
jack :50
total Entry:2
HashTable
通常は、HashMapの方が効率が良い方だが、
マルチスレッド環境では、HashTableが安全にデーターを処理する。
HashtableExample
import java.util.Hashtable;
import java.util.Map;
public class HashTableExample {
public static void main(String[] args) {
Map<String,Integer> map = new Hashtable<>();
Thread threadA = new Thread() {
@Override
public void run() {
for(int i=1; i<=1000; i++) {
map.put(String.valueOf(i), i);
}
}
};
Thread threadB = new Thread() {
@Override
public void run() {
for(int i=1001; i<=2000; i++) {
map.put(String.valueOf(i), i);
}
}
};
threadA.start();
threadB.start();
try {
threadA.join();
threadB.join();
} catch (Exception e) {
}
int size = map.size();
System.out.println("Total entry: " + size);
System.out.println();
}
}
Total entry: 2000
Vectorのように、無事に作業が終わった。
Properties
PropertiesはHashTableのサブクラスで、KeyとvalueがStringに制限されている。
.properties
というファイルを読み取る際に使用するクラスだ。
Properties ファイルは、基本的にはISO 8859-1にエンコーディングされる。
しかし、韓国語はUnicodeに保存されるため、読みにくい。
driver=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=tiger
admin=\uD64D\uAE38\uB3D9 //<-韓国語はUnicodeに表現される
この場合は、Propertiesクラスのオブジェクトを生成し、コンソールから読み取ることができる。Propertiesの場合、固有のメソッド load() があるため、アップキャストをせずに、直接インスタンス化する。
Properties properties = new Properties();<br>
Properties.load(Xxx.class.getResourseAsStream("database.properties");
PropertiesExample
import java.util.Properties;
public class PropertiesExample {
public static void main(String[] args) throws Exception {
Properties properties = new Properties();
properties.load(PropertiesExample.class.getResourceAsStream("database.properties"));
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
String admin = properties.getProperty("admin");
System.out.println("driver : " + driver );
System.out.println("url : " + url );
System.out.println("username : " + username );
System.out.println("password : " + password );
System.out.println("admin : " + admin );
}
}
driver : oracle.jdbc.OracleDriver
url : jdbc:oracle:thin:@localhost:1521:orcl
username : scott
password : tiger
admin : エンジニア
Discussion