List,Set,Map的区别
- List 和 Set 继承 Collection接口 Map 不继承 Collection 接口
- List 有序(记录存储顺序) 可重复 Set 无序,不可重复 Map 存储 k-v(键值对) 格式的集合
Map
Collection (单列集合,单身) 一个元素
Map(双列集合,情侣) 元素成对出现 ,每个元素由 键 和 值 两个部分组成
Map存储是 键值对
键 key 不可以重复
值 value 可以重复
经过查看API,发现Map也有很多实现类,常见4个实现类:
1> HashMap<K,V> :底层采用哈希表+链表+红黑树实现
2> Hashtable<K,V>
3> LinkedHashMap<K,V>:是HashMap的子类,在HashMap基础上确保了元素的链式存储记录存储顺序
4> TreeMap<K,V>:需要对存储的数据进行自定义排序
注意: Map有两个泛型 <K,V> 在使用的时候需要为它们指定数据类型 K,V 数据类型可以一样,也可以不一样
Map接口中常用的方法
V get(Object key) 根据key获取对应的值
V put(K key, V value) 向map集合中存入值
V remove(Object key) 根据key删除键值对
default V replace(K key, V value) 使用新值替换指定key的值
int size() map集合中键值对的个数
boolean containsKey(Object key) 判断map中是否包含指定key
boolean containsValue(Object value) 判断map集合中是否包含指定的值
boolean isEmpty() 判断map是否为空集合,当前仅当 size()==0
遍历map集合中数据(把map集合中数据输出)
方式1: 先获取所有key,再调用get根据key获取值
Set<K> keySet() //这个方法就是获取map的所有key的值
方式2: 直接获取键值对
Set<Map.Entry<K,V>> entrySet() // 在Map接口,有一个内部接口 Entry 代表就是键值对
方式3: 不能获取key,只获取所有值的方法
Collection<V> values()
代码示例
//接口中不能创建对象所以用HashMap实现类
public class MapDemo {
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<>();
map.put(1, "松狮");
map.put(2, "哈士奇");
map.put(3, "泰迪"); // key重复的时候,后面key的值会覆盖掉前面相同key的值
map.put(2, "斗牛"); // 值可以重复
map.put(4, "泰迪");
System.out.println(map);
// V get(Object key) 根据key获取对应的值
String v1 = map.get(3);
System.out.println(v1);
// key存在则返回具体的值,若key不存在返回null
// map.clear(); 清楚集合中所有键值对
// 把key为4的值修改称为萨摩耶
map.replace(4, "萨摩耶");
System.out.println(map);
int size = map.size();
System.out.println(size);
// 判断map集合中是否包含key为1的键值对
boolean flag1 = map.containsKey(10);
System.out.println(flag1);
boolean flag2 = map.containsValue("萨摩耶");
System.out.println(flag2);
// 如何遍历map集合
// 方式1:先获取所有key在根据key获取
System.out.println("第1种遍历方式:");
Set<Integer> set = map.keySet();
for (Integer key : set) {
String value = map.get(key);
System.out.println(key + "=" + value);
}
// 方式2:不能获取key,只获取所有值的方法
// Collection<V> values()
System.out.println("第2种遍历方式:");
Collection<String> values = (Collection<String>) map.values();
System.out.println(values);
//方式3:直接获取键值对
//在Map接口中有一个内部接口 Entry键值对对象
// getKey()方法 和 getValue()方法
// Set<Map.Entry<K,V>> entrySet()
Set<Map.Entry<Integer, String>> set2=map.entrySet();
for(Map.Entry<Integer, String> entry:set2) {
// System.out.println(entry);
Integer key=entry.getKey();
String value=entry.getValue();
System.out.println(key+"---"+value);
}
//map不能直接使用迭代器进行遍历,需要转换成set再遍历
}
}