Map接口概述
1、 实现Map接口的集合类用来存储“键-值”映射对。 //key value
2、 Map实现类中存储的“键-值”映射对是通过键来唯一标识,Map底层的“键”是用Set来存放的。
3、 映射Map每个元素含有两个部分:名称(key)和值(value)。其中key不得重复,所以它可以组成一个Set,而value部分可以重复可以组成一个List。
4、 如果将Key=Value看成一个复合对象,则Map变为了一个Set。
5、 常用的实现子类:
HashMap、LinkedHashMap
6、HashMap和TreeMap区别与HashSet与TreeSet的区别完全一致。
Map接口常用方法
Object put(Object key, Object value); //将指定的“键-值”对存入Map中
Object get(Object key); //返回指定键所映射的值
Object remove(Object key); //根据指定的键把此“键-值”对从Map中移除。
boolean containsKey(Object key); //判断此Map是否包含指定键的“键-值”对。
boolean containsValue(Object value); //判断此Map是否包含指定值的“键-值”对。
boolean isEmpty(); //判断此Map中是否有元素。
int size(); //获得些Map中“键-值”对的数量。
void clear(); //清空Map中的所有“键-值”对。
Set keySet(); //返回此Map中包含的键的Set集。
Collection values(); //返回此Map中包含的值的Collection集。
Map常用实现类
HashMap
使用频率最高的一种Map集合
HashMap内部对“键”用Set进行散列存放。所以根据“键”去取“值”的效率很高。
HashMapDemo.java
public class HashMapDemo {
public static void main(String[] args) {
// key 不能重复
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "小明");
map.put(2, "小黄");
map.put(3, "小白");
map.put(4, "小黄");// 一个value可以对应多个key
// 返回所有values组成的collection集合
Collection<String> values = map.values();
for (String v : values) {
System.out.println(v);
}
String oldvalue = map.put(1, "小黑");// 替换了旧的值,返回旧的值
System.out.println(oldvalue);
map.remove(1);// 移除
// map.keySet();// 返回所有的key组成的set集合
Set<Integer> keys = map.keySet();
Iterator<Integer> iterator = keys.iterator();
// 遍历key
while (iterator.hasNext()) {
int key = iterator.next();
String value = map.get(key);// 返回key对应的value
System.out.println(key + " " + value);
}
}
}
HashTable
HashTable用法与HastMap集合基本相同,只是HashTable是比较老的类集,是线程安全的,所以效率较低。 vector也是古老的
Properties是HashTable的一个子类,一般用于在从简单配置文件中读取数据的时候用到。学习IO时再学习此类。
LinkedHashMap
底层使用链表来记住了key的插入的顺序
Map.Entry
Map.Entry是Map中内部定义的一个接口,专门用来保存key-value的内容。
可以通过map集合的entrySet()方法来获得所有的Map.Entry组成的set集合。
Demo2.java
public class Demo2 {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("a", "aa");
map.put("b", "bb");
map.put("c", "cc");
map.put("d", "dd");
// 返回所有的键值对的Map.Entry 理解成结婚证
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String key = entry.getKey();
// entry.setValue("aaa");// 把当前的value更换成新的值
String value = entry.getValue();
System.out.println(key + " " + value);
}
System.out.println("-------------------------------");
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, String> next = iterator.next();
String key = next.getKey();
String value = next.getValue();
System.out.println(key + " " + value);
}
}
}
Collections
对List集合操作的工具类
Demo3.java
/*
* 自然排序
* 使用元素的compareTo方法进行排序
*/
public class Demo3 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(4);
list.add(3);
list.add(5);
list.add(1);
/*
* Collections.sort(list);
* System.out.println(list);
* int index = Collections.binarySearch(list, 1);
*/
Collections.sort(list, new MyComparetor());
System.out.println(list);
}
//用来比较
public static class MyComparetor implements Comparator<Integer> {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
}
}
Demo4.java
public class Demo4 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(2);
list.add(4);
list.add(3);
list.add(5);
list.add(1);
// Collections.rotate(list, 1);// 轮转
// Collections.shuffle(list);// 打乱,洗牌
Collections.swap(list, 0, 1);// 交换顺序
System.out.println(list);
}
}