Map接口(集合续)
概述
-
将键映射到值的对象
-
一个映射不能包含重复的键
-
每个键最多只能映射到一个值
HashMap:
HashMap中元素的key值不能重复,即彼此调用equals方法,返回为false。排列顺序是不固定的。
特点:
键不能重复,值可以重复(如果键重复,那么后面的键的值将会覆盖掉前面键的值)
一个键对应一个值
允许有一个键为null
键去重复的方法:hashcode方法和equals方法
Mapa接口常用方法:
V put(K key,V value)
V remove(Object key)
void clear()
boolean containsKey(Object key)
boolean containsValue(Object value)
boolean isEmpty()
int size()
V get(Object key)
Set keySet()
Collection values()
Set<Map.Entry<K,V>> entrySet()
package day4;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapDemo {
/*
Map;双列存储 键----值
键不能重复,值可以重复的
HashMap
TreeMap
HashTable
*/
public static void main(String[] args) {
/*
键去重复: hashcode() equals()
如果有重复的键,后面键的值会覆盖已经添加进去的值
允许有一个为 null 的键
*/
Map<String,String> map=new HashMap<>();
map.put("a","1");
map.put("a","2");
map.put("c","3");
map.put("d","4");
map.put("w","5");
//map.put(null,"a");
//map.clear();
//map.remove("a");
/*System.out.println(map.get("c"));
System.out.println(map.containsKey("a"));
System.out.println(map.size());
System.out.println(map.isEmpty());
System.out.println(map.containsValue("a"));*/
Collection<String> values =map.values();
System.out.println(values);
/*
遍历1
Set<String> keySet =map.keySet();
for( String s:keySet){
System.out.println(s);
}*/
/*
遍历2
Set<Map.Entry<String,String>> set=map.entrySet();
for( Map.Entry<String,String> entry:set) {
System.out.println(entry.getValue()+"=="+entry.getKey());
}
*/
System.out.println(map);
}
}
TreeMap:
TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
特点:
-
适用于按自然顺序或自定义顺序遍历键(key)。
-
TreeMap根据key值排序,key值需要实现Comparable接口, 重写compareTo方法。TreeMap根据compareTo的逻辑,对 key进行排序。
-
键是红黑树结构,可以保证键的排序和唯一性
package day4;
import java.util.TreeMap;
public class TreeMapDemo {
public static void main(String[] args) {
TreeMap<String,String> map = new TreeMap<>();
map.put("a","1");
map.put("f","4");
map.put("e","3");
map.put("x","5");
map.put("b","2");
System.out.println(map);
}
}
TreeMap中所有的元素都保持着某种固定的顺序,如果需要得到一个有序的Map就应该使用TreeMap,key值所在类必须实现Comparable接口。
HashTable:
实现了同步。
package day4;
import javafx.scene.control.TreeTableView;
import java.util.Hashtable;
public class TreeTableDemo {
public static void main(String[] args) {
Hashtable<String, String> tmap = new Hashtable<>();
tmap.put("a","1");
tmap.put("f","5");
tmap.put("e","4");
tmap.put("b","2");
tmap.put("c","3");
System.out.println(tmap);
}
}
Map集合遍历
- 根据键找值
获取所有键的集合
遍历键的集合,获取到每一个键
根据键找值
- 根据键值对对象找键和值
获取所有键值对对象的集合
遍历键值对对象的集合,获取到每一个键值对对象
根据键值对对象找键和值
package day4;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
Collection<String> values =map.values();
System.out.println(values);
//遍历1
Set<String> keySet =map.keySet();
for( String s:keySet){
System.out.println(s);
}
//遍历2
Set<Map.Entry<String,String>> set=map.entrySet();
for( Map.Entry<String,String> entry:set) {
System.out.println(entry.getValue()+"=="+entry.getKey());
}
System.out.println(map);
}
}