HashMap的几个知识点
1. HashMap 是以key–value对的形式存储的,key值是唯一的,一个key只能对应着一个value,但是value是可以重复的
2. HashMap 如果再次添加相同的key值,它会覆盖key值所对应的内容,这也是与HashSet不同的一点,Set通过add添加相同的对象,不会再添加到Set中去
3. HashMap 提供了get方法,通过key值取对应的value值,但是HashSet只能通过迭代器Iterator来遍历数据,找对象
HashMap hashMap =new HashMap();
// HashMap 是以key--value对的形式存储的,key值是唯一的,一个key只能对应着一个value,但是value是可以重复的
hashMap.put(1,"aaa");
hashMap.put(2,"bbb");
hashMap.put(3,"ccc");
//HashMap 如果再次添加相同的key值,它会覆盖key值所对应的内容,
// 这也是与HashSet不同的一点,Set通过add添加相同的对象,不会再添加到Set中去
hashMap.put(1,"ddd");
// get方法,通过key值取对应的value值
System.out.println(hashMap.get(1)); // 输出为 ddd
HashMap 提供了两种方法来遍历集合中的所有对象,
第一种: keySet() 方法,通过取得所有的Key值来获取对象
//HashMap取所有元素的第一种你方法
// keySet() 方法,返回类型为Set, 是所有key值的集合,Set 遍历所有元素是通过 Iterator 实现的
Set set=hashMap.keySet();
for(Iterator iter=set.iterator();iter.hasNext();){
int i=(int)iter.next();
System.out.println(i);
System.out.println(hashMap.get(i));
}
第二种: entrySet()方法,通过获取所有的Map.Entry对象来获得key-value对, 这两种方式在底层的实现其实是一致的,第一种先取得key 然后 再取得value, 第二种是把key和value的值一次全拿到,但其实都是对Entry的操作,Entry是Map的一个内部类,数据的存放都是以Entry为单位进行存放的
// HashMap遍历元素的第二种方式: entrySet(), 比较简单,,
// 这两种方式在底层的实现其实是一致的,第一种先取得key 然后 再取得value,
// 第二种是把key和value的值一次全拿到,但其实都是对Entry的操作
Set set2 = hashMap.entrySet();
// 在这种方式中,Set中维护的是一个Entry, 它是Map的一个内部类,提供了getkey
// 和getValue 方法
for(Iterator iter=set.iterator();iter.hasNext();){
Map.Entry entry = (Map.Entry) iter.next();
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
keySet() 和values() 的区别:
keySet() 是获得key的集合, values是获得所有values的集合,而且他们的返回类型也不一致, Values()方法,返回类型为 Collection,但是 keySet()方法,返回类型为 Set
这是由于它们所具备的不同特性决定的:
每一个key值都是唯一的,Set中不存在重复元素,
而value值却有可能有重复元素,所以只能返回一个Collection
一个利用HashMap 实现小功能的例子,(统计一个数组中每个元素出现的个数)
思路: 将值作为key ,将出现的次数作为value
// 利用HashMap 实现统计数组,集合中每个元素出现的次数, 将值作为key ,将出现的次数作为value
String[] array= new String[6];
array[0]="aa";
array[1]="aa";
array[2]="bb";
array[3]="cc";
array[4]="cc";
array[5]="cc";
HashMap map = new HashMap();
for (int i=0; i<array.length;i++){
if(map.get(array[i]) == null){
map.put(array[i],1);
}else {
map.put(array[i], (int)map.get(array[i])+1);
}
}
Set arraySet = map.keySet();
for(Iterator iter=arraySet.iterator();iter.hasNext();){
System.out.print("输出值: ");
String s1=(String)iter.next();
System.out.print(s1+" 其次数为: ");
System.out.println(map.get(s1));
}
小知识讲解:内部类
// 内部类, 调用的时候 A.B(), 以后专门补充内部类的一些情况
/*
* 形式如
* class A{
* class B{
* }
* }
*/
// 访问权限的问题, public private 默认,protected