public static void main(String[] args) {
// HashMap Map = new HashMap(); // 定义方法一
Map<Integer, String> map = new HashMap<Integer, String>(); // 定义方法二
// map没有add方法
map.put(1, "LiHua");
map.put(2, "zhanghua");
map.put(3, "huanghuan");
System.out.println(map);
/*{1=LiHua, 2=zhanghua, 3=huanghuan}*/
}
put()与remove()
public static void main(String[] args) {
// HashMap Map = new HashMap(); // 定义方法一
Map<Integer, String> map = new HashMap<Integer, String>();
// map没有add方法
map.put(1, "LiHua");
map.put(2, "zhanghua");
map.put(3, "huanghuan");
System.out.println(map);
/*{1=LiHua, 2=zhanghua, 3=huanghuan}*/
map.remove(1);
map.remove(100);
System.out.println(map);
/*{2=zhanghua, 3=huanghuan}*/
}
containsKey()与containsValue()
public static void main(String[] args) {
// HashMap Map = new HashMap(); // 定义方法一
Map<Integer, String> map = new HashMap<Integer, String>();
// map没有add方法
map.put(1, "LiHua");
map.put(2, "zhanghua");
map.put(3, "huanghuan");
System.out.println(map);
/*{1=LiHua, 2=zhanghua, 3=huanghuan}*/
System.out.println(map.containsKey(2));
/*true*/
map.remove(1);
map.remove(100);
System.out.println(map);
/*{2=zhanghua, 3=huanghuan}*/
System.out.println(map.containsValue("LiHua"));
/*false*/
}
V get(Key) 与 V getOrDefault(Key, DefaultValue)
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
// get() 方法通过key值来获取value值
System.out.println(map.get(1));/*Lihua*/
// getOrDefault() 如果没有找到key 那么返回的value值就用第二个参数代替
System.out.println(map.getOrDefault(4, "hahaha"));/*hahaha*/
}
Set keySet
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
// keySet() 返回key值的集合
System.out.println(map.keySet());
/*[1, 2, 3]*/
}
Collection values() 返回此字典中包含的Collection视图
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(50, "zhangsan");
tmap.put(66, "zhangming");
System.out.println(tmap);
System.out.println(tmap.values());
/*{1=dagu, 2=xiaolong, 45=xidong, 50=zhangsan, 66=zhangming, 100=liming}*/
/*[dagu, xiaolong, xidong, zhangsan, zhangming, liming]*/
}
**V remove(Oject key) ** 返回删除的key对应的value
boolean remove(Object key, Object value) 删除成功的话返回true
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
System.out.println(map.remove(1));
/*Lihua*/
System.out.println(map.remove(1));
/*null*/
System.out.println(map.remove(2, "Zhanghua"));
/*true*/
System.out.println(map.remove(2, "Zhanghua"));
/*false*/
}
V replace(K key, V value) 把key对应的value换成新的
boolean replace(K key, V oldValue, V newValue)
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
System.out.println(map.replace(1, "xiaolizi"));
/*Lihua*/
System.out.println(map);
/*{1=xiaolizi, 2=Zhanghua, 3=xiaozhang}*/
System.out.println(map.replace(2, "Zhanghua", "daxiong"));
/*true*/
System.out.println(map.replace(2, "Zhanghua", "daxiong"));
/*false*/ // 这里这个value指定错误 然后就不可以换成功
System.out.println(map);
/*{1=xiaolizi, 2=daxiong, 3=xiaozhang}*/
}
Set
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
System.out.println(map.entrySet()); // 这里返回的是一个Set集合
// 类型是Set>
/*[1=Lihua, 2=Zhanghua, 3=xiaozhang]*/
}
方式一
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
for(Integer i : map.keySet())
{
System.out.println(i + " " + map.get(i));
}
/*
1 Lihua
2 Zhanghua
3 xiaozhang
*/
}
方式二
public static void main(String[] args) {
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "Lihua");
map.put(2, "Zhanghua");
map.put(3, "xiaozhang");
for (Map.Entry<Integer, String> me: map.entrySet())
{
System.out.println(me.getKey() + " " + me.getValue());
}
/*
* 1 Lihua
2 Zhanghua
3 xiaozhang
* */
}
public static void main(String[] args) {
Map<Integer, String> linkmap = new LinkedHashMap<>();
linkmap.put(1, "lihua");
linkmap.put(2, "zhanghua");
linkmap.put(3, "xiaobizhaizi");
System.out.println(linkmap);
/*{1=lihua, 2=zhanghua, 3=xiaobizhaizi}*/
}
和HashMap一样
和HashMap一样
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
// 默认按照key升序排列
System.out.println(tmap);
/*{1=dagu, 2=xiaolong, 100=liming}*/
}
**在HashMap的基础上多一些 **
Map.Entry
K firstKey()
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
System.out.println(tmap.firstEntry()); // 返回最小key对应的映射
/*1=dagu*/
System.out.println(tmap.firstKey()); // 返回第一个key
/*1*/
}
Map.Entry
K floorKey(K key) 返回小于或等于指定key的最大的key
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
System.out.println(tmap.floorEntry(3));
/*2=xiaolong*/
System.out.println(tmap.floorKey(3));
/*2*/
}
Map.Entry
K ceilingKey(K key) 返回大于或等于指定key的key
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
System.out.println(tmap.ceilingEntry(3));
/*45=xidong*/
System.out.println(tmap.ceilingKey(3));
/*45*/
}
Map.Entry
K firstKey() 返回第一个key对应的value
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
System.out.println(tmap.firstEntry());
/*1=dagu*/
System.out.println(tmap.firstKey());
/*1*/
}
Map.Entry
K lastKey() 返回最后一个key对应的value
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
System.out.println(tmap.lastEntry());
/*100=liming*/
System.out.println(tmap.lastKey());
/*100*/
}
SortedMap
NavigableMap
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(66, "zhangming");
System.out.println(tmap.headMap(45));
/*{1=dagu, 2=xiaolong}*/
System.out.println(tmap.headMap(45, true)); // 包含等于的情况
/*{1=dagu, 2=xiaolong, 45=xidong}*/
}
SortedMap
NavigableMap
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(66, "zhangming");
System.out.println(tmap.tailMap(2));
/*{2=xiaolong, 45=xidong, 66=zhangming, 100=liming}*/
System.out.println(tmap.tailMap(2, false));
/*{45=xidong, 66=zhangming, 100=liming}*/
}
Map.Entry
K higherKey(K key) 返回大于指定key的最小一个key 如果没有返回null
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(50, "zhangsan");
tmap.put(66, "zhangming");
System.out.println(tmap);
/*{1=dagu, 2=xiaolong, 45=xidong, 50=zhangsan, 66=zhangming, 100=liming}*/
System.out.println(tmap.higherEntry(45)); // 返回大于指定key的最小的一个映射
/*50=zhangsan*/
System.out.println(tmap.higherKey(45)); // 返回大于指定key的最小的一个key
/*50*/
}
Map.Entry
K lowerKey(K key) 返回小于这个key的最大一个key
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(50, "zhangsan");
tmap.put(66, "zhangming");
System.out.println(tmap);
/*{1=dagu, 2=xiaolong, 45=xidong, 50=zhangsan, 66=zhangming, 100=liming}*/
System.out.println(tmap.lowerEntry(50)); // 返回小于这个key的最大的一个映射
/*45=xidong*/
System.out.println(tmap.lowerKey(50)); // 返回小于这个key的最大一个key
/*45*/
}
Map.Entry
Map.Entry
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(66, "zhangming");
System.out.println(tmap.pollFirstEntry());
/*1=dagu*/
System.out.println(tmap);
/*{2=xiaolong, 45=xidong, 66=zhangming, 100=liming}*/
System.out.println(tmap.pollLastEntry());
/*100=liming*/
System.out.println(tmap);
/*{2=xiaolong, 45=xidong, 66=zhangming}*/
}
V remove(Object key) 从此TreeMap中删除此key对应的映射(如果存在)
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(66, "zhangming");
System.out.println(tmap);
/*{1=dagu, 2=xiaolong, 45=xidong, 66=zhangming, 100=liming}*/
tmap.remove(2);
System.out.println(tmap);
/*{1=dagu, 45=xidong, 66=zhangming, 100=liming}*/
}
NavigableMap
SortedMap
public static void main(String[] args) {
TreeMap<Integer, String> tmap = new TreeMap<>();
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(50, "zhangsan");
tmap.put(66, "zhangming");
System.out.println(tmap);
/*{1=dagu, 2=xiaolong, 45=xidong, 50=zhangsan, 66=zhangming, 100=liming}*/
System.out.println(tmap.subMap(2, 66)); // 只包含左边界
/*{2=xiaolong, 45=xidong, 50=zhangsan}*/
System.out.println(tmap.subMap(2, true, 66, true)); // 可以设置是否包含左右边界
/*{2=xiaolong, 45=xidong, 50=zhangsan, 66=zhangming}*/
}
和HashMap一样
因为Map数据结构的特殊性质 导致使用Comparator()需要一些技巧
Comparator()只能对key值排序 所以如果想要对Key和Value都排序 可以自定义Pair类 把Key和Value封装在一起
然后把Key值设置为Pair类型 这个时候的Value随便什么都可以
public static void main(String[] args) {
// 按照Key值从大到小排序
TreeMap<Integer, String> tmap = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
int num = 0;
if (o1 > o2) num = -1;
else num = 1;
return num;
}
});
tmap.put(100, "liming");
tmap.put(1, "dagu");
tmap.put(2, "xiaolong");
tmap.put(45, "xidong");
tmap.put(50, "zhangsan");
tmap.put(66, "zhangming");
System.out.println(tmap);
/*{100=liming, 66=zhangming, 50=zhangsan, 45=xidong, 2=xiaolong, 1=dagu}*/
}