Map和Collection接口是平级关系
HashMap是Map接口中最常见的实现类。
存储一组成对的键-值对象,提供key(键)到value(值)的映射,通过key来索引
--key不允许重复
--value允许重复
添加的对象将转换为Object类型
Map接口常用方法及遍历:
package com.hpe.collection;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.junit.Test;
/*
* Map接口
* --HashMap:主要实现类
* --LinkedHashMap
* --TreeHashMap
* --Hashtable:线程安全的(了解)
* --Properties:常用来处理属性文件,键和值都是String。(应用)
*
* Map常用方法:
* 1.添加删除操作
* Object put(key,value);
* Object remove(key);根据key删除key-value对
* void putAll(Map t)
* void clear()
* 2.元素查询操作
* Object get(key):获取key对应的value值,若没有,则返回null
* boolean contrainsKey(key):是否包含指定的key,包含返回true,反之false
* boolean contrainsValue(value)
* int size()
* boolean isEmpty()
* boolean equals(Object obj)
* 3.元视图操作方法
* Set keySet()
* Collection value()
* HashMap:
* 1.key是用Set存放,不可重复;
* 2.value是Collection存放,可重复;
* 3.一个key-value对,就是一个Enty,所有的enty是用Set来存放,不可重复
* 4.HashMap中添加元素,会调用key所在的equals方法,判断两个key是否相同,若相同则只添加后面的元素
*
*/
public class TestMap {
@Test
public void test1() {
Map map = new HashMap();
map.put("A", 123);
map.put("B", 456);
map.put(123, "C");
map.put(null, null);
map.put(new Person("D", 20),90);
map.put(new Person("D",20), 90);
System.out.println(map.size());
System.out.println(map);
map.remove("B");
System.out.println(map.size());
Object obj = map.get(123);
System.out.println(obj);
boolean b1 = map.containsKey("B");
System.out.println(b1);
}
@Test
public void test2() {
//遍历
Map map = new HashMap();
map.put("A", 123);
map.put("B", 456);
map.put(123, "C");
map.put(null, null);
map.put(new Person("D", 20),90);
//1.遍历key
Set set = map.keySet();
for(Object obj : set) {
System.out.println(obj);
}
//2.遍历value
Collection values = map.values();
Iterator iterator = values.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
//3.遍历key-value对
//3.1
Set set1 = map.keySet();
for(Object obj : set) {
System.out.println(obj+":"+map.get(obj));
}
//3.2
Set set2 = map.entrySet();
for(Object object : set2) {
Map.Entry enty = (Map.Entry)object;
System.out.println(enty.getKey()+":"+enty.getValue());
}
}
@Test
public void test3() throws FileNotFoundException, IOException {
//Properties是Hashtable的子类,谁调用谁处理异常
Properties properties = new Properties();
properties.load(new FileInputStream(new File("jdbc.properties")));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
System.out.println("用户名:"+user+"\n密码"+password);
}
}
HashMap 和 Hashtable 都是 Map 接口的实现类 区别:
Hashtable 是一个古老的 Map 实现类,不建议使用
Hashtable 是一个线程安全的 Map 实现,但 HashMap 是线程不安全的。
Hashtable 不允许使用 null 作为 key 和 value,而 HashMap 可以
TreeMap
TreeMap 存储 Key-Value 对时,需要根据 Key 对 key-value 对进行排序。
TreeMap 可以保证所有的 Key-Value 对处于有序状态。
TreeMap 的 Key 的排序: 自然排序 ,定制排序
Properties
Properties 类是 Hashtable 的子类,该对象用于处理属性文件
由于属性文件里的 key、value 都是字符串类型,所以 Properties 里的 key 和 value 都是字符串类型
存取数据时,建议使用setProperty(String key,String value)方法和getProperty(String key)方法
Properties pros = new Properties();
pros.load(new FileInputStream("jdbc.properties"));
String user = pros.getProperty("user");
System.out.println(user);