Map

特点:
  • Map每个元素由键与值两部分组成,Map中的key和value 可以时任何引用类型的数据,会封装到HashMap$Node对象中
  • Map键不能重复,每个键对应一个值
  • 键和值可以为null
  • key不可用重复,value可重复,如果添加相同的key,则会覆盖原来的key-value(key不会更改,value会)
  • key可以为null,value也可以为null,注意key只能有一个null,value可以有多个null
  • 常用String类来作为key
  • key和value时一一对应的关系,通过指定的key总能找到对应的value
  • 无序,底层是哈希表实现的
常用方法:
  • put:添加元素
  • remove:删除键映射关系
  • get:根据键获取值
  • size获取元素个数
  • isEmpty:判断个数是否为0
  • clear:清空集合
  • containKey:查找键是否存在
Map的几大遍历方式:
  1. 增强for循环
//第一种,增强for循环 
//先取出所有的key
Set keyset = map.keySet();
for (Object key : keyset) {
    System.out.println(key+" "+map.get(key));
}
  1. 迭代器
//第二种迭代器
Set keyset = map.keySet();
Iterator iterator = keyset.iterator();
while (iterator.hasNext()) {
    Object key =  iterator.next();
    System.out.println(key+" "+map.get(key));
}
  1. 取出所有的value,进行value循环 增强for
//取出所有的value
Collection values = map.values();
//可使用2种遍历Collections的方式
 //增强for
for (Object value : values) {
    System.out.println(value);
}
  1. 迭代器 遍历value
Collection values = map.values();
Iterator iterator1 = values.iterator();
while (iterator1.hasNext()) {
    Object next =  iterator1.next();
    System.out.println(next);
}
  1. 通过EmtrySet 增强for

原理:Map中存放的是两种对象,一种称为key(键),一种称为value(值),它们在在Map中是一一对应关系,这一对对象又称做Map 中的一个Entry(项)。Entry将键值对的对应关系封装成了对象。即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。

Set entrySet = map.entrySet();
for (Object entry : entrySet) {
    //将entry转成Map.Entry
    Map.Entry m = (Map.Entry) entry; 
    System.out.println(m.getKey()+" "+m.getValue());
}
  1. 迭代器
//使用EntrySet
Set entrySet = map.entrySet();
Iterator iterator2 = entrySet.iterator();
while (iterator2.hasNext()) {
    Object entry =  iterator2.next();
    Map.Entry m = (Map.Entry) entry;
    System.out.println(m.getKey()+" "+m.getValue());
}

HashMap

特点:
  • Map接口常用的实现类:HashMap HashTable和Properties
  • HashMap时Map接口中使用频率最高的类
  • 没有实现同步,线程不安全

HashTable

特点:
  • 存放元素时键值对即:k-v
  • HashTable的键和值都不能为null,否则会抛出异常
  • HashTable是线程安全的
  • HashTable 的使用方法跟HashMap类似

Properties

特点:
  • Properties类继承HashTable类并且实现了Map接口,也是一种键值对的形式来保存数据,键值不能为null
  • 使用特点和HashTable类似
  • Properties还可以用于从xxx.properties文件中,加载数据到Properties类对象,并进行读取和修改
  • 说明:在实际工作中,xxx.properties文件通常作为配置文件。