• 1、map集合的理解:
  • 2、map集合的存放值方式
  • 3、根据迭代器取值
  • 5、map接口的实现类
  • 4、小结一下:map集合的特点


1、map集合的理解:

map是一个集合接口但他不像List,Set集合一样继承Collection接口,map中储存值的方式为key到value的映射,每一个key值映射一个value值,并且map中的key值不能重复,如果键位key值重复的话,则map集合的处理方式为覆盖,不为过滤;map集合包括map接口,及常用的实现类。

2、map集合的存放值方式

①:存值(注意在添加值的时候map集合的键位key以及值位value的类型,键值的类型只能为引用数据类型)

public static void main(String[] args) {
	//定义map集合
	Map<String, Object> map=new HashMap<String, Object>();
	//添加值
	map.put("zs","18");	
}

②:取值(如果需要用map集合里面的值要注意这个值位的类型)

public static void main(String[] args) {
	//定义map集合
	Map<String, Object> map=new HashMap<String, Object>();
	//添加值
	map.put("zs","18");
	//根据键位key值取到value值
	System.out.println(map.get("zs"));
}

3、根据迭代器取值

①:迭代所有的键位
②:迭代所以的值位
③:迭代所有的值位及键位
下面是依次取值方式的代码

//①:迭代所有的键位
public static void main(String[] args) {
	Map<String, Object> map=new HashMap<String, Object>();
	map.put("zs","18");
	map.put("ls","19");
	map.put("ww","20");
	map.put("zl","21");
	//得到键位key的集合
	Set<String> keySet = map.keySet();
	//迭代
	Iterator<String> it = keySet.iterator();
	//迭代取值
	while(it.hasNext()) {
		System.out.println(it.next());
	}
}

输出显示的结果为
ww
zl
ls
zs

//②:迭代所有的值位
public static void main(String[] args) {
	Map<String, Object> map=new HashMap<String, Object>();
	map.put("zs","18");
	map.put("ls","19");
	map.put("ww","20");
	map.put("zl","21");
	//得到值位value的集合
	Collection<Object> values = map.values();
	//迭代
	Iterator<Object> it = values.iterator();
	//迭代取值
	while(it.hasNext()) {
		System.out.println(it.next());
	}
}

输出显示的结果为
20
21
19
18s

//③:迭代所有的键值位
public static void main(String[] args) {
	Map<String, Object> map=new HashMap<String, Object>();
	map.put("zs","18");
	map.put("ls","19");
	map.put("ww","20");
	map.put("zl","21");
	//得到所有的键值位
	Set<Entry<String, Object>> entrySet = map.entrySet();
	//迭代
	Iterator<Entry<String, Object>> it = entrySet.iterator();
	//使用foreach取值
	for (Entry<String, Object> entry : entrySet) {
		System.out.print("姓名:"+entry.getKey());
		System.out.println("\t年龄:"+entry.getValue());
	}
}

输出显示的结果为
姓名:ww 年龄:20
姓名:zl 年龄:21
姓名:ls 年龄:19
姓名:zs 年龄:18

5、map接口的实现类

①HashMap:HashMap是map接口最常用的实现类,它是根据键位key值的HashCode存储数据的,大多数情况下能直接定位到它的值,HashMap的遍历顺序是无序的,没有默认的排序方式,并且它能放入null值;HashMap为非线程安全,即在同一时候允许多个线程写HashMap方法,这个主要是因为HashMap的方法没有继承synchronized,所以它的查询速度是较快的,但不太安全,如果需要满足线程的安全又要查询速度加快的话则可以使用ConcurrentHashMap。HashMap的使用实在jdk1.2之后出来的操作,所以HashTable的功能HashMap差不多都有。
②HashTable:HashTable是在jdk1.0的时候出来的,所以在jdk1.2的时候出来的HashMap中类中差不多都包含了HashTable的方法;HashTable所有的方法都有synchronized,以至于它的查询的速度是慢的,但它是最安全的,任一时间只有一个线程能写HashTable,在不需要考虑线程安全的情况下建议使用HashMap。需要注意的是HashTable不能放入null值,否则它会报java.lang.NullPointerException类型的异常。
③TreeMap:TreeMap是实现Sorted接口的,它在保存值的时候是根据自己默认的排序保存,在取出值的时候也会按照一定的顺序取出,默认的排序应该是根据加入键值的ASCII 码的大小来确定顺序的;在使用TreeMap时,键位key值的类必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。
④LinkedHashMap:LinkedHashMap继承于HashMap这个类,有一个HashMap没有的特点就是,LinkedHashMap会根据保存数据的顺序将这些值保存在集合中,但遍历的顺序较慢。

4、小结一下:map集合的特点

(1)、键位不允许重复,值位允许重复(如果键位允许重复,则为覆盖)
(2)、无序的,但是还会有自然排序
(3)、它没有继承Collection接口