Map(接口)
Map以Key和Value键值对的形式存放数据。
Map中的Key是无序,不可重复的。
Map的常用方法
- put(x,value)(存放元素)
- get(x)(获取key为x的元素)
- remove(x)(移除key为x元素)
- size()(返回元素个数)
- clear()(清空map)
- isEmpty()(判断map是否为空)
- values()(获取map的value)
- keySet()(获取map的key)
- entrySet()(获取map的key和value)
Map<Integer,String> map=new HashMap<>();
map.put(1,"张飞");//添加元素key和value
map.put(2,"赵云");
map.put(3,"关羽");
map.put(1,"李四");
map.put(4,"马超");
map.put(5,"黄忠");
map.put(6,"典韦");
map.put(null,null);
System.out.println(map.get(1));//李四 如果key相同,会覆盖原来的value
map.remove(2);//移除key为2的元素
System.out.println(map.size());//5
Collection values = map.values();//获取所有的value
//遍历value
for(Object i:values){
System.out.println(i);
}
//遍历map,方法一
Set set = map.keySet();//获取所有的key,存放在Set中,遍历Set
for (Object i:set) {
System.out.println(i+"="+map.get(i));//通过get方法获取value
}
System.out.println("===========");
//遍历map,方法二
Set<Map.Entry<Integer, String>> entries = map.entrySet();
//获取map中所有的key和value以 “key=value”的形式存放在Set中
Iterator<Map.Entry<Integer, String>> it = entries.iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> next = it.next();
System.out.println(next.getKey()+"="+next.getValue());
}
map.clear();//清空map
System.out.println(map.isEmpty());//true 判断是否为空
//null=null
//0=
//1=李四
//3=关羽
//4=马超
//5=黄忠
//6=典韦
//true
HashMap
底层是哈希表(数组加链表),线程不安全。
优点:查询快,增删快。
key和value都可以存放null。
初始大小为16,默认加载因子0.75。
扩容之后是原容量的2倍。
map.put(null,null);//可以
HashTable
底层是哈希表,线程安全。
key和value都不能存放null,否则在运行时会出现NullPointerException。
初始大小为11,扩容大小=原容量*2+1。
map.put(8,null);//不行
map.put(null,0);//不行
map.put(null,null);//不行
Properties
继承HashTable,线程安全。
key和value只能存放String类型的。否则在运行时会出现NullPointerException。
map.put(5,"黄忠");//不可以存放,会出错。必须是String类型的。
TreeMap
底层是二叉树。
TreeMap中key可以按照元素大小排序。
key不能存放null,value可以存放null。
map.put(8,null);//可以存放