19.Java集合框架(三)
01.集合(Map概述)
我感觉就是C#中的字典Dictionary。
Map集合的基本特点:
该集合存储键值对,是一对一对往里存,而且要保证键的唯一性。
添加:
put(key,value)
putAll()
删除:
clear();
remove(Object obj);按键值删除
判断:
containsKey(Object obj)
containsValue(Object obj)
isEmpty()
获取:
get(Object obj)
size()
values();返回的是Collection<T>
entrySet()
keySet()
02.集合(Map子类对象特点)
Map:
HashTable:底层是Hash表数据结构,不可以存入null值和null键。该集合是线程同步的。jdk1.0.效率低。
HashMap:底层是hash表数据结构,允许使用null键和null值,该集合是不同步的。jkd1.2.效率高。
TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序。和Set很像,其实Set底层就是使用了Map集合。
03.集合(Map共性方法)
04.集合(Map-keySet)
Map集合的两种取出方式:
第一种keySet:将map中所有的键存入Set集合,因为Set具备迭代器,所有可以迭代方式取出所有的键,获取每一个键对应的值。
Map<String,String> map=new Map<String,String>();
map.put("02","zhangsan2");
map.put("03","zhangsan3");
map.put("04","zhangsan4");
map.put("05","zhangsan5");
Set<String> keySet=map.keySet();
Iterator<String> it=keySet.iterator();
while(it.hasNext())
{
String key=it.next();
String value=map.get(key);
输出键和值;
}
map集合的取出原理:将map集合转成set集合,再通过迭代器取出。
05.集合(Map-entrySet)
第二种entrySet:
Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到set集合中,而这个关系的数据类型就是:Map.Entry。
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.geyKey();
String value=me.getValue();
这样就取出来了;
}
Map.Entry其实Entry也是一个接口,它是Map接口中的一个内部接口。
interface Map
{
public static interface Entry
{
public abstract Object getKey();
public abstract Object getValue();
}
}
06.集合(Map练习)
需求:
没一个学生都有对应的归属地,学生Student,地址:String,学生属性:姓名,年龄
注意:姓名和年龄相同的视为同一学生,保证学生的唯一性。
思路:
1.描述学生。
2.定义map容器,将学生作为键,地址作为值,存入。
3.获取map集合中的元素。
以后创建类,这个类如果有多个对象且还有可能排序时,一定要实现Comparable接口,覆盖compareTo();hashCode();equals();三个方法。
07.集合(TreeMap练习)
需求:对学生对象的年龄进行排序。
因为数据是以键值对形式存在的,所以使用可以排序的map集合,TreeMap
08.集合(TreeMap练习--字母出现次数)
通过结果发现,每一个字母都有对应次数,说明字母和次数之间都有映射关系。
注意了:当发现有映射关系时,就要先想map集合。
思路:
1.将字符串转换成字符数组,因为要对每一个字母进行操作
2.定义一个map集合,因为打印结果的字母有序,所以使用treemap集合
3.遍历字符数组
将每一个字母作为键去查map集合
如果返回nulll,将该字母和1存到map集合
如果返回不是null,说明该字母在map集合已经存在并有对应次数,那么就获取该次数进行自增,然后将该字母和自增后的次数存入到map集合,覆盖原来键所对应的值
4.将map集合的数据变成指定的字符串形式返回。
09.集合(map扩展)
map集合被使用是因为具备映射关系。
HashMap<String,String> hm0=new HashMap<String,String>();
HashMap<String,HashMap<String,String>> hm1=new HashMap<String,HashMap<String,String>>();