Java 集合--Map、HashMap、HashTable、TreeMap
1. Map基础
Map接口提供3种集合的视图:
map的key不能够重复,value可以
(1)key-value映射集合 — entrySet() 返回包含映射的Set视图。Set中的每个元素都是一个Map.Entry对象,可以使用 getKey()和getValue()方法(还有一个setValue() 方法)访问后者的键元素和值元素
(2)key集合 — keySet() 包含键的 Set 视图。删除 Set 中的元素还将删除 Map 中相应的映射(键和值)
(3)value集合,values() 是值的 Collection 视图。删除 Collection 中的元素还将删除 Map 中相应的映射(键和值)
我们还必须获得一个Iterator对象,进而取得相应的key-value映射、key和value。
Iterator keyValuePairs = aMap.entrySet().iterator();
Iterator keys = aMap.keySet().iterator();//keys.remove();删除当前键值对
Iterator values = aMap.values().iterator();//values.remove();删除当前键值对
Map增删方法
clear() 从 Map 中删除所有映射
remove(Object key) 从 Map 中删除键和关联的值
put(Object key, Object value) 将指定值与指定键相关联
Map访问方法
get(Object key) 返回与指定键关联的值
containsKey(Object key) 如果 Map 包含指定键的映射,则返回true
containsValue(Object value) 如果此 Map 将一个或多个键映射到指定值,则返回 true
isEmpty() 如果 Map 不包含键-值映射,则返回 true
size() 返回 Map 中的键-值映射的数目
2. HashMap和HashTable的区别
Hashtable继承自Dictionary类, size()表示包含了多少元素;isEmpty()判断是否包含了元素;put(Object key, Object value)添加一个值;get(Object key)获得与某个键对应的值;而remove(Object Key)从列表中删除“键-值”对。还可以使用枚举技术:keys()产生对键的一个枚举(Enumeration);而elements()产生对所有值的一个枚举。这便是一个Dictionary(字典)的全部。
(1) 继承和实现区别
Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
(2) 线程安全不同
HashTable的方法是同步的,HashMap是未同步,所以在多线程场合要手动同步HashMap。HashMap效率高
(3) 对null的处理不同
HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。
HashTable 不允许null值,编译期不会检查,运行期会出现空指针异常。HashMap允许 null值是指可以有一个或多个键所对应的值为null。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
(4) 方法不同
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。
(5)
HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。
HashTable
public static void hashTableTest(){
Hashtable hash = new Hashtable();
hash.put("abc", "1");
hash.put("ddd", "1");
hash.put("asdf", "2");
// hash.put("asdfsad", null); NullPointerException
System.out.println("迭代方法1:entrySet");
Set entrySet = hash.entrySet();
for(Iterator i=entrySet.iterator();i.hasNext();){
Entry entry = (Entry)i.next();
System.out.println("key:"+entry.getKey()+",value:"+entry.getValue());
}
Set set = hash.keySet();
System.out.println("迭代方法2:keySet");
for(Iterator i=set.iterator();i.hasNext();){
String key = (String)i.next();
System.out.println("key:"+key+",value:"+hash.get(key));
}
System.out.println("迭代方法3: values");
Collection values = hash.values();
for(Iterator i=values.iterator();i.hasNext();){
System.out.println("value:"+i.next());
}
System.out.println("迭代方法4: keys");
Enumeration enumkey = hash.keys();
while (enumkey.hasMoreElements()) {
String str = (String) enumkey.nextElement();
System.out.println(str + " --- " + hash.get(str));
if ("1".equals(hash.get(str)))
hash.remove(str);
}
System.out.println("asdf:" + hash.get("asdf"));
enumkey = hash.elements();
while (enumkey.hasMoreElements()) {
String str = (String) enumkey.nextElement();
System.out.println(str );
}
}
2. Map排序
Map排序,可以按key排序,也可以按value排序,示例代码如下:
public static void main(String[] args) {
Map<String, Integer> maps = new HashMap<String, Integer>();
maps.put("boy", 8);
maps.put("cat", 7);
maps.put("dog", 1);
maps.put("apple", 5);
//排序前的输出
Iterator i = maps.entrySet().iterator();
while (i.hasNext()) {
Map.Entry<String, Integer> entry1 = (Map.Entry<String, Integer>) i.next();
System.out.println(entry1.getKey() + "-------->" + entry1.getValue());
}
System.out.println("排序后的输出:");
List<Map.Entry<String, Integer>> info = new ArrayList<Map.Entry<String, Integer>>(maps
.entrySet());
Collections.sort(info, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> obj1, Map.Entry<String, Integer> obj2) {
return obj1.getKey().compareTo(obj2.getKey());//按key排序
//return obj2.getValue() - obj1.getValue(); //按value排序
}
});
for (int j = 0; j < info.size(); j++) {
System.out.println(info.get(j).getKey() + "------->" + info.get(j).getValue());
}
}
3. Map遍历
public static void iterationTest() {
Map<String, Integer> tempMap = new HashMap<String, Integer>();
tempMap.put("a", 1);
tempMap.put("b", 2);
tempMap.put("c", 3);
// JDK1.4中
// 遍历方法一 hashmap entrySet() 遍历
System.out.println("方法一");
Iterator it = tempMap.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println("key=" + key + " value=" + value);
}
System.out.println("");
// JDK1.5中,应用新特性For-Each循环
// 遍历方法二
System.out.println("方法二");
for (Map.Entry<String, Integer> entry : tempMap.entrySet()) {
String key = entry.getKey().toString();
String value = entry.getValue().toString();
System.out.println("key=" + key + " value=" + value);
}
System.out.println("");
// 遍历方法三 hashmap keySet() 遍历
System.out.println("方法三");
for (Iterator i = tempMap.keySet().iterator(); i.hasNext();) {
Object obj = i.next();
System.out.println(obj);// 循环输出key
System.out.println("key=" + obj + " value=" + tempMap.get(obj));
}
for (Iterator i = tempMap.values().iterator(); i.hasNext();) {
Object obj = i.next();
System.out.println(obj);// 循环输出value
}
System.out.println("");
// 遍历方法四 treemap keySet()遍历
System.out.println("方法四");
for (Object o : tempMap.keySet()) {
System.out.println("key=" + o + " value=" + tempMap.get(o));
}
System.out.println("11111");
// java如何遍历Map <String, ArrayList> map = new HashMap <String,ArrayList>();
Map<String, ArrayList> map = new HashMap<String, ArrayList>();
Set<String> keys = map.keySet();
Iterator<String> iterator = keys.iterator();
while (iterator.hasNext()) {
String key = iterator.next();
ArrayList arrayList = map.get(key);
for (Object o : arrayList) {
System.out.println(o + "遍历过程");
}
}
System.out.println("2222");
Map<String, List> mapList = new HashMap<String, List>();
for (Map.Entry entry : mapList.entrySet()) {
String key = entry.getKey().toString();
List<String> values = (List) entry.getValue();
for (String value : values) {
System.out.println(key + " --> " + value);
}
}
}
上一篇: PHP实现的通过参数生成MYSQL语句类完整实例_PHP
下一篇: 页面显示:页面错误!请稍后再试
推荐阅读
-
java语法ArrayList、LinkedList、HashSet、HashMap、HashTable、Collection、Collections详解
-
对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解
-
java中集合(LinkedList、HashSet、HashMap、HashTable、Collection、Collections)
-
java中Hashtable和HashMap的区别分析
-
Java8增强的Map集合
-
Java 遍历取出Map集合key-value数据的4种方法
-
Java中HashMap和TreeMap的区别深入理解
-
java中集合(LinkedList、HashSet、HashMap、HashTable、Collection、Collections)
-
java语法ArrayList、LinkedList、HashSet、HashMap、HashTable、Collection、Collections详解
-
走进Java Map家族 (1) - HashMap实现原理分析