Map与Collection 并列存在,用于保存具有映射关系的数据:Key-Value
Map中的Key和Value都可以是任何引用类型的数据
Map中的Key用Set存放,不允许重复,即同一个Map对象所对应的类,须重写HashCode()和equals()方法
常用String类作为Map的 "键"
Key和vlaue之间存在单项一对一关系,即通过指定的Key总能找到唯一的,确定的value
TestMap
package com.aff.coll; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.Collection; import java.util.Comparator; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.Map; import java.util.Properties; import java.util.Set; import java.util.TreeMap; import org.junit.Test; /* Collection接口 Map接口 |----HashMap:Map的主要实现类 |----LinkedHashMap:使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的 |----TreeMap: 按照添加进Map中的元素的 key 的指定属性进行排序,要求key必须是同一个类对象 自动排序 vs 定制排序 |----Hashtable :①古老的Map实现类,线程安全,不允许使用null作为key和value ②和HashMap一样不能保证其中key-value对的顺序 ③判断两个key相等,两个value相等的标准和HashMap一致 ④太古老,标识符的table还是小写的,不建议使用 |---- Properties :常用来处理属性文件。键和值都为String类型的 */ public class TestMap { //使用Properties处理属性文件 @Test public void testProperties() throws FileNotFoundException, IOException{ Properties pros = new Properties(); pros.load(new FileInputStream(new File("jdbc.properties"))); String user = pros.getProperty("user"); System.out.println(user);//root; String password = pros.getProperty("password"); System.out.println(password);//123ab; } /* Map常用方法: Object put(Objet key,Object value); 向Map中添加一个元素 Object remove(Object key); 按照指定的key删除此key-value void putAll(Map t); void clear(); 清空 Object get(Object key); 获取指定key的value值,若无此key,则返回null boolean ontainsKey(Object key); boolean containsValue(Object value); int size(); 返回集合的长度 boolean isEmpty(); boolean equals(Object obj); */ //HashMap /* 1.HashMap :key使用Set来存放的,不可重复,Value是用collection来存放的, 可重复的一个key-value对,是一个Entry.所有的Entry是用Set存放的,也是不可重复的。 2.向HashMap中添加元素时,会调用key所在的类的equals()方法,判断两个key是否相同, 若相同,则只能添加进后添加的那个元素 */ @Test public void testHashMap() { Map map = new HashMap(); map.put("AA", 12); map.put("BB", 143); map.put("BB", 4656); map.put(123, "VV"); map.put(null, null); System.out.println(map.size());//4 } //遍历Map @Test public void testHashMap2() { /* 如何遍历Map Set KeySet(); Collection values(); Set entrySet(); */ Map map = new HashMap(); map.put("AA", 12); map.put("BB", 143); map.put(123, "VV"); map.put(null, null); map.put(new Person("DD", 23), 46); //1.遍历key集 Set set = map.keySet(); for(Object obj: set){ System.out.println(obj); } System.out.println("----"); //2.遍历value集 Collection values = map.values(); Iterator iterator = values.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } //3.遍历key-value对 //方式一: Set set1 = map.keySet(); for(Object obj : set1){ //Object get(Object key); 获取指定key的value值,若无此key,则返回null System.out.println(obj+"----->"+map.get(obj)); } System.out.println("------"); //方式二: Set set2 = map.entrySet(); for(Object obj:set2){ Map.Entry entry = (Map.Entry)obj; System.out.println(entry.getKey()+"---->"+entry.getValue()); } } //LinkedHashMap 使用链表维护添加进 Map 中的顺序.故遍历map时,是按添加的顺序遍历的 @Test public void testLinkedHashMap(){ Map map = new LinkedHashMap(); map.put("AA", 12); map.put("BB", 143); map.put(123, "VV"); map.put(null, null); map.put(new Person("DD", 23), 46); System.out.println(map); } //TreeMap 的自然排序 @Test public void testTreeMap(){ Map map = new TreeMap(); map.put(new Person("AA", 23), 46); map.put(new Person("CC", 22), 68); map.put(new Person("GGG", 33), 26); map.put(new Person("BB", 14), 98); map.put(new Person("CC", 14), 98); // System.out.println(map); Set set1 = map.keySet(); for(Object obj : set1){ //Object get(Object key); 获取指定key的value值,若无此key,则返回null System.out.println(obj+"----->"+map.get(obj)); } } //TreeMap 的定制排序 @Test public void testTreeMap2(){ Comparator com = new Comparator() { @Override public int compare(Object o1, Object o2) { if(o1 instanceof Customer && o2 instanceof Customer){ Customer c1 = (Customer)o1; Customer c2 = (Customer)o2; int i = c1.getId().compareTo(c2.getId()); if(i == 0){ return c1.getName().compareTo(c2.getName()); } return i; } return 0; } }; Map map = new TreeMap(); map.put(new Person("AA", 23), 46); map.put(new Person("CC", 22), 68); map.put(new Person("GGG", 33), 26); map.put(new Person("BB", 14), 98); map.put(new Person("CC", 14), 98); // System.out.println(map); Set set1 = map.keySet(); for(Object obj : set1){ //Object get(Object key); 获取指定key的value值,若无此key,则返回null System.out.println(obj+"----->"+map.get(obj)); } } }
jdbc.properties
user=root;
password=123ab;
Customer, Person与上篇相同