Map和Collection类似,都是接口,
* 而且都是集合框架的顶层接口。
*
* 整个集合框架一共分为2大类
* Collection
* 存放单值(单个对象)的容器。
* List
* ArrayList
* LinkedList
* Vector
* Set
* HashSet----hashcode和equals
* LinkedHashSet----hashcode和equals
* TreeSet----compareTo/compare
* Map
* 存放键值对的容器。
* 在Map里,键类似于数组的下标(整数),只不过,
* 键可以是多种数据类型,比如:String、Student等
* 键必须是唯一的,不能重复,一旦键相同了,认为是
* 同一个对象。
*
* Map里值是可以重复的,因为值是跟键关联的,我们
* 找数据是通过键去找的。
*
* Map与Collection的区别是:
* Map找元素快,Collection找元素慢。
* Map拿空间换时间,费空间省时间
* Collection是拿时间换空间,省空间费时间。
Map 是集合框架另一个顶级接口。
它是一种双列集合,它是一种存放键值对的集合。
Map的特点:1、存放键值对。2、键唯一,值可以重复。3、无序的集合。
底层是依靠一个HashTable(哈希表)来完成数据的存放。实际上是有一个很大的数组,
把key的hashcode作为数组的下标,把Value存放对应的下标里。因此Map查找元素快,占用
的内存空间大。Collection是查找慢,占的空间小。
Map接口规定了哪些方法呢?
1、添加元素
put(key,value)
putAll(Map)
2、删除元素
clear()
remove(key)
3、修改元素
put(key,value)
4、获取元素
get(key)
keySet()
values()
entrySet()
5、判断包含
containsKey(key)
containsValue(value)
6、元素个数
size()
Map的常见实现类:
HashMap:普通map(不重复,无序)
TreeMap:内容有序的map(key有序)
LinkedHashMap:存放顺序有序
如何选择使用哪种集合框架?
看项目的需求,是保存单值还是键值对
单值:使用Colletion
能否重复?
能:List
增删多还是查询多?
增删多:LinkedList
查询多:ArrayList
不知道:ArrayList
是否在多线程下访问?
是:Vector
否:ArrayList或LinkedList
不知道:ArrayList
不能:Set
是否需要保持添加顺序?
否:HashSet
是:LinkedHashSet
不知道:HashSet
是否对内容排序?
是:TreeSet(内部比较器–元素实现了Comparable接口(compareTo(T)),外部比较器–使用匿名类实现了Comparator接口(compare(T,T)))
否:HashSet或LinkedHashSet
不知道:HashSet
不知道:
ArrayList
键值对:使用Map
是否保持添加顺序?
否:HashMap
是:LinkeHashMap
不知道:HashMap
是否保持内容有序?
是:TreeMap
否:HashMap或LinkedHashMap
不知道:HashMap
是否多线程下访问?
是:HashTable
否:HashMap
不知道:HashMap
//在map里,键是唯一的。Map也是无序。
package com.lanou3g.demo1;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class MapBianLi {
public static void main(String[] args) {
Person p1 = new Person("jinsaisai",25);
Person p2 = new Person("guyunjie",23);
Person p3 = new Person("hujintao",22);
Person p4 = new Person("zhanghao",22);
Map<String,Person> map = new HashMap<String,Person>();
map.put(p1.getName(), p1);
map.put(p2.getName(), p2);
map.put(p3.getName(), p3);
map.put(p4.getName(), p4);
System.out.println(map);
//如何遍历map。找到key和value
//第一种:通过键值对集进行遍历
// Set<Map.Entry<String,Person>> set = map.entrySet();
// Iterator<Map.Entry<String,Person>> it = set.iterator();
// while(it.hasNext()) {
// Map.Entry<String,Person> entry = it.next();
// Person person = entry.getValue();
// String name = entry.getKey();
// System.out.println(name+"="+person.getAge());
// }
//第二种 获取所有的key,遍历key,并通过key获取value
// Set<String> keys = map.keySet();
// for (String k : keys) {
// System.out.println(k+"="+map.get(k));
// }
}
}