Map集合(双列集合)
java.util.Map<K,V>将键映射到值的对象。键是唯一的,值可以重复。
特点:
1.Map集合是一个双列集合,一个元素包含两个值,<Key,Value>
2.key和value可以是不同类型元素
3.key唯一,value可以重复。
4.key和value一一对应。
一、Map常用子类
(一)HashMap
java.util.Hashmap集合,由key value组成,实现了Map接口
特点:
1.底层是哈希表,查询的速度非常快。(数组+单向链表/红黑树)
2.是一个无序的集合,存储和取出顺序可能不一致。
(二)LinkedHashMap
继承自HashMap
1.底层是hash表和链表
2.有序的集合。
二、Map集合中常用的方法
put(K key, V value)
在此映射中关联指定值与指定键。
V get(Object key)
返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
V remove(Object key)
从此映射中移除指定键的映射关系(如果存在)。
boolean containsKey(Object key)
如果此映射包含对于指定键的映射关系,则返回 true。
Set<Map.Entry<K,V>> entrySet()
返回此映射所包含的映射关系的 Set 视图。
Set<K> keySet()
返回此映射中所包含的键的 Set 视图。
public class DemoMap{
public static void main(String[] args){
}
private static void show1(){
Map<String,String> map = new HashMap<>();
String v1= map.put("李晨","范冰冰");
String v2= map.put("李晨","范冰冰1");
System.out.println(v2);//李晨,范冰冰1
}
private static void show2(){
Map<String,String> map = new HashMap<>();
String v1= map.put("李晨","范冰冰");
String v2= map.put("李晨","范冰冰1");
map.remove("李晨");//返回值就是被删除的元素的值。(键值对也被删除)
}
}
四、Map集合的遍历
1.通过keySet进行遍历。
把map集合中所有的key取出来放到set集合中,可以使用迭代器或者增强for循环遍历set集合。配合get(key)获取value.
public class DemoKeySet{
public static void main(String[] args){
Map<String,String> map = new HashMap<>();
map.put("李晨","范冰冰");
map.put("杨过","小龙女");
Set<String> set = map.keySet();
Iterator<String> it = set.iterator();
while(it.hasNext()){
String key = it.hasNext();
String value = map.get(key);
sysout(value);
}
}
}
2.Entry键值对对象遍历
public class DemoEntrySet{
//取出EntrySet对象,存到Set集合中
//遍历Set集合,获取每一个EntrySet对象
//使用Entryset中的getKey()和getValue()获取。
public static void main(String[] args){
Map<String,String> map = new HashMap<>();
map.put("李晨","范冰冰");
map.put("杨过","小龙女");
map.put("郭靖","黄蓉");
Set<String> set = map.entrySet();
Iterator<String,String> it = set.iterator();
while(it.hasNext()){
map.Entry<String,String> entry = it .next();
String key = entry.getKey();
String value = map.getValue();
}
}
}
五、存储自定义类型的键和值
HashMap需要保证键唯一,需要重写HashCode和equals方法。
public class DemoAddSelfType{
public static void main(String[] args){
HashMap<String,Person> map = new HashMap<>();
map.put("伤害",new Person("李四",12));
map.put("北京",new Person("张三",12));
map.put("广东",new Person("李四",12));
map.put("伤害",new Person("李四",13));//覆盖第一条
}
}
//自定义类作为key,类需要重写HashCode和equals方法
六、LinkedHashMap集合
继承了HashMap集合。有序,由哈希表(数组和链表)和链表组成。
public class DemoLinkedHashMap{
public static void main(String[] args){
LinkedHashMap<String,Person> map = new LinkedHashMap<>();
map.put("伤害",new Person("李四",12));
map.put("北京",new Person("张三",12));
map.put("广东",new Person("李四",12));
map.put("伤害",new Person("李四",13));//覆盖第一条
//存取顺序一致,key也是唯一的。
}
}
七、HashTable集合
底层也是哈希表,双列集合,不能存储null值。最早期的双列集合。线程安全的(单线程)所以比较慢。
和Vector集合一样在1.2之后被ArrayList和HashMap集合取代了。但是HashTable的子类Properties集合依旧在使用。
public class DemoHashTable{
public static void main(String[] args){
hashMap <String,String> map = new HashMap<>();
map.put(null,"a");
map.put("a",null);
HashTalbe<String,String> table = new HsahTable<>();
table.put(null,"a");//错误
}
}
250

被折叠的 条评论
为什么被折叠?



