注意:Map系列集合的特点都是由键决定的,值只是一个附属品,值是不做要求的
方法名称 | 说明 |
---|---|
public V put (K key,V value) | 添加元素 |
public int size() | 获取集合大小 |
public void clear() | 清空集合 |
public boolean isEmpty() | 判断集合是否为空,为空返回true,反之 |
public V get(Object key) | 根据键值获取对应值 |
public V remove(Object key) | 根据键删去对应值 |
public boolean containsKey(Object key) | 判断是否包含某个键 |
public boolean containsValue(Object value) | 判断是否包含某个值 |
public Set keySet() | 获取全部键的集合 |
public Collectionvalues() | 获取Map集合的全部值 |
import java.util.HashMap;
import java.util.Map;
public class MapTest2 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("手表",100);
map.put("手表", 200);
map.put("手机", 2);
map.put("java", 2);
map.put(null,null);
System.out.println(map);
//获取集合大小
map.size();
//清空集合
//map.clear();
//判断集合是否为空,为空返回true反之
map.isEmpty();
//根据键获取对应值
map.get("手表");
//根据键删除整个元素
map.remove("java");
//判断是否包含某个键
map.containsKey("手机");
//判断是否包含某个值
map.containsValue(100);
//获取全部键的集合
map.keySet();
//获取Map集合的全部值
map.values();
//扩展:把把其他Map集合中的数据倾倒入自己的集合中去
Map<Integer,Integer> C1 = new HashMap<>();
Map<Integer,Integer> C2 = new HashMap<>();
C1.put(12, 12);
C1.put(13, 13);
C2.put(14, 14);
C2.put(15, 15);
//使用putAll可将同类型的Map集合中的数据相互倾倒
C1.putAll(C2);
}
}
先获取Map集合全部的键,再通过遍历键来找值
方法名称 | 说明 |
---|---|
public Set keySet() | 或取对应的所有键值 |
public V get(Object key) | 根据键获取对应的值 |
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class a {
public static void main(String[] args) {
Map<String,Double> map = new HashMap<>();
map.put("张三",162.5);
map.put("张三",169.8);
map.put("赵四",165.8);
map.put("王五",169.5);
System.out.println(map);
//1.获取Map集合的全部键
Set<String> keys = map.keySet();
System.out.println(keys);
//2.遍历全部的键,根据键获取对应值
for (String key : keys){
double value = map.get(key);
System.out.println(key + "===>" + value);
}
}
}
把“键值对”看成一个整体进行遍历
Map提供的方法 | 说明 |
---|---|
Set |
获取所有“键值对”集合 |
Map.Entry提供的方法 | 说明 |
K getKey() | 获取键 |
V getValue | 获取值 |
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class a {
public static void main(String[] args) {
Map<String,Double> map = new HashMap<>();
map.put("张三",162.5);
map.put("张三",169.8);
map.put("赵四",165.8);
map.put("王五",169.5);
System.out.println(map);
//1、调用Map集合提供entrySet方法,把Map集合转换成键值对类型的Set集合
Set<Map.Entry<String,Double>> entries = map.entrySet();
for (Map.Entry<String,Double>entry : entries){
String key = entry.getKey();
double value = entry.getValue();
System.out.println(key + "--->"+ value);
}
}
}
方法名称 | 说明 |
---|---|
default void forEach(BiConsumer super K, ? super V> action) | 结合lambda便利Map几何 |
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
public class a {
public static void main(String[] args) {
Map<String,Double> map = new HashMap<>();
map.put("张三",162.5);
map.put("张三",169.8);
map.put("赵四",165.8);
map.put("王五",169.5);
System.out.println(map);
map.forEach(new BiConsumer<String, Double>() {
@Override
public void accept(String s, Double v) {
System.out.println(s +"----->" + v);
}
});
}
}
1.HashMap的底层原理:跟HashSet的底层原理是一模一样的,都是基于哈希表实现的。
2.哈希表:
3.HashMap底层是基于哈希表实现的
4.HashMap如何实现键的唯一性
```java
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Friend friend = (Friend) o;
return Double.compare(friend.height, height) == 0 && age == friend.age && Objects.equals(name, friend.name);
}
@Override
public int hashCode() {
return Objects.hash(name, height, age);
}
原理:底层数据结构依然是基于哈希表实现的,只是每个键值对元素又额外的多了一个双链表机制记录元素顺序
1.原理:TreeMap跟TreeSet集合的底层原理是一样的,都是基于红黑树实现的排序。
2.TreeMap集合同样也支持两种方式来指定排序规则
@Override
public int compareTo(Student o) {
return Double.compare(this.age, o.age);
}
@Override
public int compare(Student o1,Student o2) {
return Double.compare(o2.getheight(), o1.getheight());
}