Map集合
Map接口的特点:
- 用于存储任意键值对(Key-Value)
- 键:无序、无下标、不允许重复(唯一)
- 值:无序、无下标、允许重复
Map接口的常用方法
@Test
public void Test(){
Map<Integer,String> map =new HashMap<Integer, String>();
//put(),添加Key,和value元素
map.put(1,"张三");
map.put(2,"李四");
map.put(3,"王五");
//get(),根据key来获取value值
map.get(1);
//keySet(),返回一个set集合,实现集合遍历功能
for (Object key :map.keySet() ) {
System.out.println(key+map.get(key));
}
//entrySet(),这是Map接口中的内部接口也是返回一个Set集合,
//再使用Entry中的getKey和getValue方法取值
Set<Map.Entry<Integer,String>> entries = map.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
System.out.println(entry.getKey()+entry.getValue());
}
}
keySet()方法和Map.Entry都是返回Set集合;
但是keySet方法只是获取了Map集合中的Key ,想要获取Value还是得从Map中去拿。
Entry则是把整个键值对拿过来封装成Entry对象,可以直接获取Key和Value,所以Map.Entry效率高
HashMap(重点)
- HashMap底层结构为哈希表(数组+链表+红黑树),当链表长度大于8且数组长度大于等于64的时候,就会变成红黑树提高查询修改效率,如果链表长度缩小到6以下就会又变成数组链表形式
- HashMap允许用null作为Key或Value
- 线程不安全,但是运行效率快
HashTable
- 线程安全,运行效率慢
- 不允许用null作为Key或Value
Properties
是HashTable的子类,要求Key和Value的类型都是String,通常用于配置文件的读取