Map集合是一种双列集合,每个元素包含两个数据
每个元素格式:key=value (键值对元素)
Map集合也成键值对集合
Map集合的键是无序、不重复的,值不做要求
Map集合后面重复的键对应的值会覆盖前面重复键的值
Map集合键值对的值都可以为null
使用场景eg:购物车系统(每个商品对应一个购买数量)
Map API:
V put(K key,V value) 添加元素
V remove(Object key) 根据键删除键值对元素
void clear() 移除所有键值对元素
boolean containsKey(Object key) 判断集合是否包含指定的键
boolean containsValue(Object value) 判断集合是否包含指定的值
boolean isEmpty() 判断集合是否为空
int size() 集合长度
map1.putAll(map2) 把map2的元素拷贝一份到map1中
public Set<K> keySet() 获取全部键的集合
Collection<V> values() 获取全部值的集合
Set<String> key = maps1.keySet(); //用Set是因为无序不重复无索引 System.out.println(key); System.out.println("============"); //获取全部值的集合Collection<V> values() Collection<Integer> value = maps1.values(); //Collection是因为值可以重复 System.out.println(value);
Map集合实现类特点:
HashMap:元素的键 无序无索引、不重复,值不做要求(与Map体系一致)
特点:底层用的是哈希表结构;依赖hashCode方法和equals方法来保证键的唯一;如果键存储的是自定义类型,hashCode和equals方法要重写,如果要输出内容,toString也要重写
package Map;
import java.util.HashMap;
import java.util.Map;
public class Demo01 {
public static void main(String[] args) {
Map<String, Integer> maps= new HashMap<>();
maps.put("购物车中的苹果15",1);
maps.put("购物车中的零食",1);
maps.put("购物车中的苹果13",1);
maps.put("购物车中的苹果15",4); //覆盖前面的苹果15
System.out.println(maps);
}
}
Map集合遍历方式
- 键找值
public class Map遍历一_键找值 {
public static void main(String[] args) {
Map<String ,Integer> maps = new HashMap<>();
maps.put("购物车中的00",1);
maps.put("购物车中的11",1);
maps.put("购物车中的22",1);
maps.put("购物车中的33",1);
Set<String> keys = maps.keySet();
for (String key:keys) {
int value = maps.get(key); //拿出对应的值 int可以接Iteger
System.out.println(key+"---->"+value);
}
}
}
- 键值对遍历
通过将Map集合转换为Set集合再分别拿出对应的两种数据
- Lambda表达式遍历
public static void main(String[] args) {
Map<String,Integer> maps = new HashMap<>();
maps.put("购物车中的00",1);
maps.put("购物车中的11",1);
maps.put("购物车中的22",1);
maps.put("购物车中的33",1);
maps.forEach(new BiConsumer<String, Integer>() {
@Override
public void accept(String s, Integer integer) {
System.out.println(s+"---->"+integer);
}
});
}
1.获取Map集合全部键的Set集合
2.遍历键的Set集合,然后通过键提取对应值
LinkedHashMap:元素的键 有序无索引、不重复,值不做要求
底层基于哈希表,但每个键值对元素多了一个双链表,使他可以保证有序
TreeMap: 对键排序(可以通过自带的比较器制定比较规则)、无索引、不重复
Map<Key,Value> maps = new TreeMap(new Comparator<Key>(){
public int comparator(Key o1,Key o2){
return 0; //0是比较规则,自己制定
}
});