Map 接口是一种双列集合,它的每个元素都包含一个键对象 Key 和值对象 Value,键和值之间存在一种对应关系,成为映射。Map 中的映射关系是一对一的,一个键 Key 对应唯一的值 value,键和值可以是任意的数据类型,而且键 Key 不允许重复,在访问 Map 集合中的元素时,只要指定了 Key,就能找到对应的 value。
方法声明 | 功能描述 |
---|---|
void put(Object key, Object value) | 向Map集合中添加指定键值映射的元素,键值重复时,覆盖之前已经存在的简直元素 |
int size() | 返回 Map集合键值对映射的个数 |
Object get(Object key) | 返回指定键所映射的值,如果此映射不包含该键的映射关系,返回null |
boolean containsKey(Object key) | 查看Map集合中是否存在指定的键Key |
boolean containsValue(Object value) | 查看Map集合中是否存在指定的值value |
Object remove(Object key) | 删除并返回Map集合中指定键key的键值映射元素 |
void clear() | 清空整个Map集合中的键值映射元素 |
Collection values() | 以Collection集合的形式返回Map集合中所有的值Value |
HashMap 集合是 Map 接口的一个实现类,用于存储键值映射关系,该集合的键和值允许为空,但是键不可重复,且集合中的元素是无序的。HashMap 底层是由哈希表结构组成,就是"数组 + 链表"的组合体,这种方式,使得HashMap集合对于元素的增删改查的效率高。
public static void main(String[] args) {
//创建 HashMap 对象
HashMap<String,String> map = new HashMap<String, String>();
//向Map中存入数据
map.put("1","Jack");
map.put("2","Rose");
map.put("3","Lucy");
map.put("4","Lucy");
map.put("1","Tom");
System.out.println(map);
//查看键是否存在
System.out.println(map.containsKey("1"));
//获取指定键对应的值
System.out.println(map.get("1"));
//获取集合中的键和值集合
System.out.println(map.keySet());
System.out.println(map.values());
//替换指定键对应的值
map.replace("1","tom");
System.out.println(map);
//删除指定键对应的值
map.remove("1");
System.out.println(map);
}
------------------------------
{1=Tom, 2=Rose, 3=Lucy, 4=Lucy}
true
Tom
[1, 2, 3, 4]
[Tom, Rose, Lucy, Lucy]
{1=tom, 2=Rose, 3=Lucy, 4=Lucy}
{2=Rose, 3=Lucy, 4=Lucy}
Hashtable 也是 Map 集合的一个实现类,它和 HashMap 集合类似,也有一些区别
Hashtable 有一个子类 Properties,它主要用来存储字符串类型的键和值,在开发中,经常使用 Properties 来用于配置文件的读取。
TreeMap 集合用来存储简直映射关系的,不允许出现重复的键,内部通过二叉树的原理保证键的唯一。因为 TreeMap 内部实现了 SortedMap 接口,会默认按照自然顺序对 Key 进行排序。
public static void main(String[] args) {
TreeMap map = new TreeMap();
map.put("2","Rose");
map.put("1","Jack");
map.put("3","Luck");
System.out.println(map);
}
---------------------------
{1=Jack, 2=Rose, 3=Luck}
方法声明 | 功能描述 |
---|---|
Set keySet() | 以Set集合的形式返回Map集合中所有的键Key |
Collection value | 以Collection集合的形式返回Map集合中所有的值Value |
Set |
将Map集合转换为存储元素类型为Map的Set集合 |
public class Demo2 {
public static void main(String[] args) {
//所有键
Set<String> keySet = Country.countries.keySet();
for(String k : keySet) {
//System.out.println(k);
}
//所有值
Collection<String> values = Country.countries.values();
for(String v : values) {
//System.out.println(v);
}
//值 + 键
Set<Map.Entry<String, String>> entries = Country.countries.entrySet();
for(Map.Entry<String,String> s : entries) {
System.out.println(s.getKey() + "=" + s.getValue());
}
}
}
class Country{
public static final Map<String,String> countries = new HashMap<String,String>();
static{
countries.put("CN","中华人民共和国");
countries.put("US","美国");
countries.put("KR","韩国");
countries.put("IT","意大利");
countries.put("JP","日本");
}
}