1.map集合常用方法
package Map;
import java.util.*;
import java.util.stream.Collectors;
public class MapDemo {
/*
* Map集合存储的是一个个的 键值对 数据
* Map的键(key)不能重复
*
* HashSet、TreeSet、LinkedHashSet这三个set集合的内部都使用了Map集合,set集合使用Map集合的键来实现自己
* 内容的不可重复
*/
public static void main(String[] args) {
// 三者操作方法相同
HashMap<Integer, String> hashMap = new HashMap<>();
TreeMap<Integer, String> treeMap = new TreeMap<>();
LinkedHashMap<Integer,String> linkedHashMap = new LinkedHashMap<>();
// 9 V put(K key,V value) 向集合中增加内容,如果键已经存在,那么就会用新值替换旧值,并将旧值返回回来,
// 如果没有产生替换,返回null
System.out.println(hashMap.put(0,"零"));
System.out.println(hashMap.put(0,"零"));
System.out.println(hashMap.put(1,"一"));
System.out.println(hashMap.put(2,"二"));
System.out.println(hashMap.put(3,"三"));
// 10 void putAll(Map<? extends K,? extends V> m) 增加一组集合
treeMap.put(1,"一");
treeMap.put(2,"二");
treeMap.put(3,"三");
hashMap.putAll(treeMap);
// 2.boolean containsKey(Object key) 判断集合中是否存在指定的key
System.out.println(hashMap.containsKey(1));
// 3.boolean containsValue(Object value) 判断集合中是否存在指定的value
System.out.println(hashMap.containsValue("二"));
// 4.Set<Map.Entry<K,V>> entrySet() 将Map接口变为Set集合
// 对Entry下面有讲
Set<Map.Entry<Integer, String>> set = hashMap.entrySet();
for(Map.Entry<Integer, String> i : set){
System.out.print(i.getKey()+","+i.getValue());
}
System.out.println();
// 5.V get(Object key) 根据key找到其对应的value
System.out.println(hashMap.get(3));
// 6.boolean isEmpty() 判断是否为空
System.out.println(hashMap.isEmpty());
// 7 Set<K> keySet() 将全部的key变为Set集合
System.out.println("-------------------------");
Set<Integer> set1 = hashMap.keySet();
for(Integer i : set1){
System.out.print(i+"-"+hashMap.get(i));
}
// 8 Collection<V> values() 将全部的 value 变为 Collection 集合,如果只想遍历值,可以使用此方法,
// 转换为collection集合之后在进行遍历输出,但是很少用
Collection<String> collection = hashMap.values();
for(String s : collection){
System.out.print(s);
}
System.out.println();
// 11 V remove(Object key) 根据key删除内容,也可以根据键和值删除,default boolean remove(Object key, Object value)
// 注意,根据键删除元素,如果删除成功返回被删除元素,否则返回null
hashMap.remove(3);
System.out.println("根据键和值删除元素,如果不对返回false:"+hashMap.remove(2,"er"));
System.out.println(hashMap.remove(2,"二"));
// 12.V replace(K key, V value) 根据键,替换值,并将被替换的旧值返回
System.out.println(hashMap.replace(1,"yi"));
for(Map.Entry<Integer, String> i : set){
System.out.println(i.getKey()+","+i.getValue());
}
// 13.boolean replace(K key, V oldValue, V newValue) 仅当前映射到指定值时,才替换指定键的条目。
System.out.println(hashMap.replace(1,"一"));
// 15.int size() 返回集合中键值对的数量。
System.out.println(hashMap.size());
for(Map.Entry<Integer, String> i : set){
System.out.println(i.getKey()+","+i.getValue());
}
// 1.void clear() 清空Map集合中的内容
hashMap.clear();
for(Map.Entry<Integer, String> i : set){
System.out.println(i.getKey()+","+i.getValue());
}
}
}
2.关于Map集合的输出
https://blog.csdn.net/qq_38679239/article/details/112357371
3.HashMap 与 Hashtable 的区别
Hashtable 是一个最早的 key-value 的操作类,本身是在 JDK 1.0 的时候推出的。其基本操作与 HashMap 是类似的,本身都是以 Map 为操作标准的,所以操作的结果形式都一样。
但是 Hashtable 中是不能向集合中插入 null 值的。
HashMap 本身是属于无序存放的。
HashMap(线程不安全,效率高)/Hashtable(线程安全,效率低)/ConcurrentHashMap(采用分段锁机制,保证线程安全,效率又比较高)
4.TreeMap
TreeMap 子类是允许 key 进行排序的操作子类,其本身在操作的时候将按照 key 进行排序,另外,key 中的内容可以 为任意的对象,但是要求对象所在的类必须实现 Comparable 接口。
从一般的开发角度来看,在使用 Map 接口的时候并不关心其是否排序,所以此类只需要知道其特点即可。