Map
意义:用来保存键值对的数据。
特点:创建一个键到值的对象,一个键对应一个对象,在集合中不能存在相同的键,但是可以存在相同的值,如果出现了相同的键,后面一条赋值语句会覆盖前面一条赋值语句的值。Map集合中的数据结构都是由键值决定的。
格式 Map<K,V>
其中K是对象的键,V是对象的值。
Map接口和Collection接口的区别:
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
Map集合的常用功能:
(1)添加功能:V put(K key,V value)(v就是键映射的值的类型)使用这个方法时,如果键是第一次存储,就直接存储元素, 返回null,但是如果键不是第一次存储,就用现在的值替换以前的值,返回以前的值。
import java.util.HashMap;
import java.util.Set;
public class Sec {
public static void main(String[] args) {
HashMap<String,String> hm=new HashMap<>();
hm.put("YU","12");
hm.put("xue","22");
hm.put("YIng","21");
System.out.println(hm.toString());
}
}
(2)删除功能:void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把被删除的值返回
import java.util.HashMap;
public class Sec {
public static void main(String[] args) {
HashMap<String,String> hm=new HashMap<>();
hm.put("YU","12");
hm.put("xue","22");
hm.put("YIng","21");
System.out.println(hm.toString());
String st= hm.remove("YU");
System.out.println(st);
hm.clear();
System.out.println(hm.toString());
}
}
结果是:
(3)判断功能:boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
(4)获取功能:Set<Map.Entry<K,V>> entrySet(): 返回一个键值对的Set集合
V get(Object key):根据键获取值
Set<K> keySet():获取集合中所有键的集合
Collection<V> values():获取集合中所有值的集合
我们可以通过获取方法来对Map集合进行遍历
遍历有两种方法:
a、通过键找值:
获取所有键的集合,然后遍历键的集合,获取到每一个键,接着根据键找值
package Jan_th;
import java.util.HashMap;
import java.util.Set;
public class Test {
public static void main(String[] args) {
HashMap<Integer, String> hm=new HashMap<>();
hm.put(1, "YU");
hm.put(2,"xue");
hm.put(3, "ying");
Set<Integer> keys=hm.keySet();
for(Integer key:keys) {
String value=hm.get(key);
System.out.println(key+"-------"+value);
}
}
}
b、直接获取键值对对象:
获取所有的键值对对象的集合,遍历键值对对象的集合,获取到值。
Set<Map.Entry<Integer, String>> entires=hm.entrySet();
for(Map.Entry<Integer, String> en :entires) {
System.out.println(en.getKey()+"++++++++"+en.getValue());
}
(5)长度功能:int size():返回集合中的键值对的对数。
在Map接口下,最主要的实现类有:HashMap,TreeMap和LinkedHashMap.
HashMap:
包:
特点:元素唯一
LinkedHashMap
特点:是由哈希表和链表列表实现,具有可预知的迭代型,里面存储的元素有序且唯一。
唯一是由哈希表实现,有序是由链表实现。继承Map的所有特性。
为了做比较,我们看一下TreeMap
对于TreeMap:
由红黑树和二叉树实现,键排序且唯一
排序分为自然排序和比较器排序,线程不安全但是效率高。