转载自http://blog.csdn.net/itlwc/article/details/10155669
Map层次结构
Map
- 实现类
- HashMap,LinkedHashMap,Hashtable
- 子接口
- SortedMap
- 实现类
- TreeMap
- 映射集,键值集合
- Map增加对象时,如果key值在Map已经存在,将会替换原先value值
- Map里面的key值是不能重复的,value值可以重复
- Map的泛型不可以是基本数据类型,比如Map<int,int>报错
实现类
HashMap,LinkedHashMap,Hashtable
子接口
SortedMap
实现类
TreeMap
映射集,键值集合
Map增加对象时,如果key值在Map已经存在,将会替换原先value值
Map里面的key值是不能重复的,value值可以重复
Map的泛型不可以是基本数据类型,比如Map<int,int>报错
Map常用方法
- package com.itlwc;
- import java.util.HashMap;
- import java.util.Map;
- public class Test {
- public static void main(String[] args) {
- Map map = new HashMap();
- // 从此映射中移除所有映射关系
- map.clear();
- // 将指定的值与此映射中的指定键相关联
- map.put("a", "lwc");
- map.put("b", "nxj");
- // 从指定映射中将所有映射关系复制到此映射中
- map.putAll(new HashMap());
- // 如果存在此键的映射关系,则将其从映射中移除
- map.remove("b");
- // 返回此映射中的键-值映射关系数
- map.size();
- // 如果此映射未包含键-值映射关系,则返回 true
- map.isEmpty();
- // 返回此映射中映射到指定键的值
- map.get("a");
- // 如果此映射包含指定键的映射关系,则返回 true
- map.containsKey("a");
- // 如果此映射为指定值映射一个或多个键,则返回 true
- map.containsValue("nxj");
- // 返回此映射中包含的映射关系的 set 视图
- map.entrySet();
- // 返回此映射中包含的键的 set 视图
- map.keySet();
- // 比较指定的对象与此映射是否相等
- map.equals(new HashMap());
- // 返回此映射的哈希码值
- map.hashCode();
- // 返回此映射中包含的值的 collection 视图
- map.values();
- }
- }
package com.itlwc;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
Map map = new HashMap();
// 从此映射中移除所有映射关系
map.clear();
// 将指定的值与此映射中的指定键相关联
map.put("a", "lwc");
map.put("b", "nxj");
// 从指定映射中将所有映射关系复制到此映射中
map.putAll(new HashMap());
// 如果存在此键的映射关系,则将其从映射中移除
map.remove("b");
// 返回此映射中的键-值映射关系数
map.size();
// 如果此映射未包含键-值映射关系,则返回 true
map.isEmpty();
// 返回此映射中映射到指定键的值
map.get("a");
// 如果此映射包含指定键的映射关系,则返回 true
map.containsKey("a");
// 如果此映射为指定值映射一个或多个键,则返回 true
map.containsValue("nxj");
// 返回此映射中包含的映射关系的 set 视图
map.entrySet();
// 返回此映射中包含的键的 set 视图
map.keySet();
// 比较指定的对象与此映射是否相等
map.equals(new HashMap());
// 返回此映射的哈希码值
map.hashCode();
// 返回此映射中包含的值的 collection 视图
map.values();
}
}
遍历Map 获取Map值的方法
- package com.itlwc;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- public class Test {
- public static void main(String[] args) {
- Map map = new HashMap();
- map.put("a", "lwc");
- map.put("b", "nxj");
- // 方法一:
- Set set = map.keySet();
- Iterator ite1 = set.iterator();
- while (ite1.hasNext()) {
- String key = (String) ite1.next();
- String value = (String) map.get(key);
- System.out.println(key + ":" + value);
- }
- // 方法二:
- Set<Map.Entry> set1 = map.entrySet();
- Iterator<Map.Entry> ite2 = set1.iterator();
- while (ite2.hasNext()) {
- Map.Entry entry = (Map.Entry) ite2.next();
- String key = (String) entry.getKey();
- String value = (String) entry.getValue();
- System.out.println(key + ":" + value);
- }
- // 获取map中所有值对象的Collection集合
- Collection collection = map.values();
- for (Object c : collection) {
- String value = (String) c;
- System.out.println("值为: " + value + ",长度为 " + value.length());
- }
- }
- }
- /*
- 打印结果:
- b:nxj
- a:lwc
- b:nxj
- a:lwc
- 值为: nxj,长度为 3
- 值为: lwc,长度为 3
- */
package com.itlwc;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Map map = new HashMap();
map.put("a", "lwc");
map.put("b", "nxj");
// 方法一:
Set set = map.keySet();
Iterator ite1 = set.iterator();
while (ite1.hasNext()) {
String key = (String) ite1.next();
String value = (String) map.get(key);
System.out.println(key + ":" + value);
}
// 方法二:
Set<Map.Entry> set1 = map.entrySet();
Iterator<Map.Entry> ite2 = set1.iterator();
while (ite2.hasNext()) {
Map.Entry entry = (Map.Entry) ite2.next();
String key = (String) entry.getKey();
String value = (String) entry.getValue();
System.out.println(key + ":" + value);
}
// 获取map中所有值对象的Collection集合
Collection collection = map.values();
for (Object c : collection) {
String value = (String) c;
System.out.println("值为: " + value + ",长度为 " + value.length());
}
}
}
/*
打印结果:
b:nxj
a:lwc
b:nxj
a:lwc
值为: nxj,长度为 3
值为: lwc,长度为 3
*/
HashMap
- HashMap和ArrayList是一个时代的产物
- 既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,
- 不保证键的存储顺序,HashMap允许键值为null,但只能出现一次
- 构造方法
- public HashMap()
- 初始容量为16
- public HashMap(Map m)
HashMap和ArrayList是一个时代的产物
既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,
不保证键的存储顺序,HashMap允许键值为null,但只能出现一次
构造方法
public HashMap()
初始容量为16
public HashMap(Map m)
Hashtable
- HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,
- 同一时刻只能有一个线程访问,没有特殊需求不使用
- 不允许null键的存在
- 构造方法
- public Hashtable()
- 初始容量为11
- public Hashtable(Map m)
HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,
同一时刻只能有一个线程访问,没有特殊需求不使用
不允许null键的存在
构造方法
public Hashtable()
初始容量为11
public Hashtable(Map m)
Properties
- HashTable的一个子类,开发中经常使用
- Properties键和值都是字符串,开发中经常会用在配置文件,properties文件(属性文件)
- 一般通过文件读取的方式把key读入内存中,再使用getProperty()得到值
HashTable的一个子类,开发中经常使用
Properties键和值都是字符串,开发中经常会用在配置文件,properties文件(属性文件)
一般通过文件读取的方式把key读入内存中,再使用getProperty()得到值
案例
- package com.itlwc;
- import java.util.Iterator;
- import java.util.Properties;
- import java.util.Set;
- public class Test {
- public static void main(String[] args) {
- Properties p = new Properties();
- p.setProperty("1", "a");
- p.setProperty("2", "b");
- p.setProperty("3", "c");
- Set<Object> set = p.keySet();
- Iterator<Object> ite = set.iterator();
- while (ite.hasNext()) {
- String key = (String) ite.next();
- String value = p.getProperty(key);
- System.out.println(key + "=" + value);
- }
- }
- }
- /*
- 打印结果:
- 3=c
- 2=b
- 1=a
- */
package com.itlwc;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
public class Test {
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("1", "a");
p.setProperty("2", "b");
p.setProperty("3", "c");
Set<Object> set = p.keySet();
Iterator<Object> ite = set.iterator();
while (ite.hasNext()) {
String key = (String) ite.next();
String value = p.getProperty(key);
System.out.println(key + "=" + value);
}
}
}
/*
打印结果:
3=c
2=b
1=a
*/
LinkedHashMap
- LinkedHashMap是Ordered,采用双链表实现的
- 有固定顺序,也就是插入顺序
- 构造方法
- public LinkedHashMap()
- 初始容量为16
- public LinkedHashMap(int initialCapacity)
- public LinkedHashMap(Map m)
LinkedHashMap是Ordered,采用双链表实现的
有固定顺序,也就是插入顺序
构造方法
public LinkedHashMap()
初始容量为16
public LinkedHashMap(int initialCapacity)
public LinkedHashMap(Map m)
SortedMap接口
- 保证按照键的升序排列的映射,天然顺序
保证按照键的升序排列的映射,天然顺序
SortedMap常用方法
- Object firstKey()
- 返回有序映射中当前第一个(最小的)键
- Object lastKey()
- 返回有序映射中当前最后一个(最大的)键
- SortedMap headSet(Object toKey)
- 返回此有序映射的部分视图,其键值严格小于toKey
- SortedMap tailSet(Object fromKey)
- 返回此有序映射的部分视图,其键大于或等于fromKey
- SortedMap subSet(Object fromKey,Object toKey)
- 返回此有序映射的部分视图,其键值从fromKey(包括)到toKey(不包括)
- Comparator comparator()
- 返回与此有序映射关联的比较器,如果使用键的自然顺序,则返回null
Object firstKey()
返回有序映射中当前第一个(最小的)键
Object lastKey()
返回有序映射中当前最后一个(最大的)键
SortedMap headSet(Object toKey)
返回此有序映射的部分视图,其键值严格小于toKey
SortedMap tailSet(Object fromKey)
返回此有序映射的部分视图,其键大于或等于fromKey
SortedMap subSet(Object fromKey,Object toKey)
返回此有序映射的部分视图,其键值从fromKey(包括)到toKey(不包括)
Comparator comparator()
返回与此有序映射关联的比较器,如果使用键的自然顺序,则返回null
TreeMap
- TreeMap是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历
- 构造方法
- public TreeMap()
- public TreeMap(SortedMap s)
- public TreeMap(Map m)
- public TreeMap(Comparator c)
- c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器
- 因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则
TreeMap是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历
构造方法
public TreeMap()
public TreeMap(SortedMap s)
public TreeMap(Map m)
public TreeMap(Comparator c)
c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器
因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则
TreeMap排序规则Comparator案例
- package com.itlwc;
- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.Set;
- import java.util.TreeMap;
- public class Test {
- public static void main(String[] args) {
- TreeMap map = new TreeMap(new PersonComparator());
- map.put(new Person("lwc", 80), "1");
- map.put(new Person("nxj", 70), "3");
- map.put(new Person("lp", 60), "2");
- map.put(new Person("fy", 75), "4");
- Set set = map.keySet();
- Iterator ite = set.iterator();
- while (ite.hasNext()) {
- Person key = (Person) ite.next();
- String value = (String) map.get(key);
- System.out.println("编号:" + value + "\t姓名:" + key.name + "\t分数为:"
- + key.score);
- }
- }
- }
- class Person {
- String name;
- int score;
- public Person(String name, int score) {
- this.name = name;
- this.score = score;
- }
- }
- class PersonComparator implements Comparator {
- public int compare(Object o1, Object o2) {
- Person p1 = (Person) o1;
- Person p2 = (Person) o2;
- return p1.score - p2.score;
- }
- }
- /*
- 打印结果:
- 编号:2 姓名:lp 分数为:60
- 编号:3 姓名:nxj 分数为:70
- 编号:4 姓名:fy 分数为:75
- 编号:1 姓名:lwc 分数为:80
- */