JAVA容器系列专题
【JAVA容器概论】
【JAVA容器-List接口容器详解】
【JAVA容器-迭代器Iterator详解】
【JAVA容器-Set接口容器详解】
【JAVA容器-Map接口容器详解】
【JAVA容器演进及应用(含对Disruptor的浅解)】
Map接口容器关系图
Map接口常用方法
增加:put(K key, V value)
删除:clear() remove(Object key)
查看:entrySet() get(Object key) keySet() size() values()
判断:containsKey(Object key) containsValue(Object value) equals(Object o) isEmpty()
public class Test01 {
//这是main方法,程序的入口
public static void main(String[] args) {
//创建一个Map集合:无序,唯一
Map<String,Integer> map = new HashMap<>();
System.out.println(map.put("lili", 10101010));
map.put("nana",12345234);
map.put("feifei",34563465);
System.out.println(map.put("lili", 34565677));
map.put("mingming",12323);
/*map.clear();清空*/
/*map.remove("feifei");移除*/
System.out.println(map.size());
System.out.println(map);
System.out.println(map.containsKey("lili"));
System.out.println(map.containsValue(12323));
Map<String,Integer> map2 = new HashMap<>();
System.out.println(map2.put("lili", 10101010));
map2.put("nana",12345234);
map2.put("feifei",34563465);
System.out.println(map2.put("lili", 34565677));
map2.put("mingming2",12323);
System.out.println(map==map2);
System.out.println(map.equals(map2));//equals进行了重写,比较的是集合中的值是否一致
System.out.println("判断是否为空:"+map.isEmpty());
System.out.println(map.get("nana"));
System.out.println("-----------------------------------");
//keySet()对集合中的key进行遍历查看:
Set<String> set = map.keySet();
for(String s:set){
System.out.println(s);
}
System.out.println("-----------------------------------");
//values()对集合中的value进行遍历查看:
Collection<Integer> values = map.values();
for(Integer i:values){
System.out.println(i);
}
System.out.println("-----------------------------------");
//get(Object key) keySet()
Set<String> set2 = map.keySet();
for(String s:set2){
System.out.println(map.get(s));
}
System.out.println("-----------------------------------");
//entrySet()
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String, Integer> e:entries){
System.out.println(e.getKey()+"----"+e.getValue());
}
}
}
TreeMap
- TreeMap类似TreeSet也需要实现排序接口,因为TreeMap是键值对,所以只能对TreeMap中的key进行排序。
- TreeMap的比较器也可以TreeSet相同,分为内部比较器和外部比较器两种。
HashMap
- key唯一,无序(通过hash算法计算要保存到底层数组的位置,所以存储无序)
- 底层的key使用的【哈希表+链表】实现,相同的key只能存在一个,但相同key后者的value会覆盖前者。
- 元素存入集合前会调用key类的hashCode()和equals()确定底层数组中的保存位置。
LinkedHashMap
- 实现了双线链表 ,有固定的顺序,与插入的顺序一样。
- HashMap+LinkedList,它使用HashMap操作数据结构,又使用LinkedList维护插入元素的先后顺序。
removeEldestEntry方法的介绍
可重写并根据逻辑删除最老的一个元素。
Demo展示:
public static void main(String[] args) {
LinkedHashMap l = new LinkedHashMap(){
@Override
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > 2;
}
};
l.put("1","11");
l.put("2","22");
System.out.println(l);
l.put("3","33");
System.out.println(l);
}
返回数据: