----------------------android开发、java培训、期待与您交流! ----------------------
黑马程序员-有关Map集合的总结
Map集合没有继承Collection接口,其提供的是key到value的映射。Map中不能包含相同的key只能映射一个value。Key还决定了存储对象在映射中的存储位置,但是鄙视由Key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射内部区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。
Map接口常用的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,由于HashMap类实现Map集和的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中映射关系存在一定的=顺序,如果希望Map集合的对象也存在一定的顺序,应使用TreeMap类实现Map集合。
HashMap类是基于哈希表的Map接口实现,此实现提供多有可选的映射操作,并允许使用快速查找。此类不保证映射顺序,特别是他不保证该顺序恒久不变。
TreeMap类不仅实现了Map接口,还是实现了java.util.SortedMap几口,因此,集合中的映射关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap比HashMap性能稍差。
由于TreeMap类实现Map集合中的映射关系是根据对象按照一定顺序排列的,因此不允许键对象是Null.
以下是课堂有关代码的笔记:
(1)-----------------------------------------------------------------
/*
Map集合:该集合存储键值对,要保证键的唯一性
1,添加。
put(K key,v value)
putAl1(Map<? extends K,? extends V>m)
2.删除
clear()
remove(Object key)
3,判断
containsValue(Object value)
containsKey(Object key)
isEmpty()
4,获取
get(Object key)
size()
values()
entrySet()
keySet()
Map
Hashtable:底层是哈希表数据结构,不可以存入Null作为键,作为值存在。该集合是线程同步的。
HashMap:底层是哈希表数据结构,可以存入Null作为键,作为值存在。该集合不是线程同步的。
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序。
和Set很像,Set集合底部使用map集合。
*/
import java.util.*;
class MapDemo
{
public static void main(String[] args)
{
Map<String,String> map=new HashMap<String,String>();
//当添加元素的时候,如果出现添加相同的键时,那么后添加的值会覆盖原来对应键的值,用put方法会返回被覆盖的值。
System.out.println("put:"+map.put("04","lisi"));
System.out.println("put:"+map.put("04","wangwu"));
System.out.println("put:"+map.put("04","zhangsan"));
//添加元素
map.put("01","ZhangSan1");
map.put("02","ZhangSan2");
map.put("03","ZhangSan3");
System.out.println("containsKey:"+map.containsKey("022"));
//System.out.println("remove:"+map.remove("02"));
System.out.println("get:"+map.get("02"));
//System.out.println(map);
map.put("04",null);
System.out.println("get:"+map.get("04"));
//可以通过Get方法的返回值来判断一个键是否存在,通过返回Null来判断
Collection<String> coll=map.values();
System.out.println(coll);
}
}
(2)-----------------------------------------------------------------
/*
map集合的两种取出方式:
1,返回值set<k> keySet:将map中所有的键存入set集合,因为set具备迭代器
所以可以用迭代的方法取出所有的键,根据get方法。获取每一个键对应的值。
Map集合的取出原理:将map集合转换成set集合,通过迭代器取出。
2,返回值Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,而这个关系的数据类型就是:MapEntry
*/
import java.util.*;
class MapDemo2
{
public static void main(String[] args)
{
Map<String,String> map=new HashMap<String,String>();
map.put("01","zhangsan1");
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
//将Map集合中的映射关系取出来。存入到set集合中
Set<Map.Entry<String,String>> entrySet=map.entrySet();
Iterator<Map.Entry<String,String>> it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry<String,String> me=it.next();
String key=me.getKey();
String value=me.getValue();
System.out.println(key+"......"+value);
}
/*
//先获取map集合中的所有键的Set集合,keySet()
Set<String> ks=map.keySet();
//有了set集合,就可以获取其迭代器了
Iterator<String> it=ks.iterator();
while(it.hasNext())
{
String key=it.next();
//有了键就可以通过map集合的get方法获取其对应的值。
String value=map.get(key);
System.out.println("key:"+key+",value:"+value);
}
*/
}
}
/*
Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口
*/
interface Map
{
public static interface Entry
{
public abstract Object getKey();
public abstract Object getValue();
}
}
class HashMap implements Map.Entry
{
}
(3)-----------------------------------------------------------------
/*
map扩展知识
map集合中被使用是因为具备映射关系
*/
import java.util.*;
class MapDemo3
{
public static void main(String[] args)
{
HashMap<String,HashMap<String,String>> czbk=new HashMap<String,HashMap<String,String>>();
//创建HashMap学校对象
HashMap<String,String> yure=new HashMap<String,String>();//创建预热班对象
HashMap<String,String> jiuye=new HashMap<String,String>();//创建就业班对象
czbk.put("yureban",yure);
czbk.put("jiuyeban",jiuye);
jiuye.put("01","zhaoliu");
jiuye.put("02","wangwu");
yure.put("01","zhangsan");
yure.put("02","lisi");
getStudentInfo(yure);
//遍历czbk集合,获取所有的教室
Iterator<String> it=czbk.keySet().iterator();//迭代器
while(it.hasNext())
{
String roomName=it.next();
HashMap<String,String> room=czbk.get(roomName);
System.out.println(roomName);
getStudentInfo(room);
}
}
public static void getStudentInfo(HashMap<String,String> roomMap)
{
Iterator<String> it=roomMap.keySet().iterator();
while(it.hasNext())//遍历班级
{
String id=it.next();
String name=roomMap.get(id);
System.out.println(id+":"+name);
}
}
}
----------------------android开发、java培训、期待与您交流! ----------------------