今天复习到最近复习到容器部分,学过数据结构,知道哈希表,哈希函数,哈希查找,但是一直都没有实现过,也不知道怎么用的,今天看了一下视频,跟着写了一下hashmap的操作,读了一下hashmap的源码。也算是加强一下理解吧。
package com.map;import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;public class HashMapDemo {public static void main(String[] args) {// TODO Auto-generated method stub//这里两个类型分别是建和值的类型、//HashMap<String,String> map=new HashMap<String,String>();//也按下面方法写,接口Map的引用变量可以指向是实现类HashMap的对象//道理和前面的linkedList是一样的Map<String,String> map=new HashMap<String,String>();//这里注意,键是唯一的,不能重复。下面添加一个重复的,会被后来添加的覆盖掉。map.put("Jay", "周杰伦");map.put("halin", "庾澄庆");map.put("Jay", "张三");map.put("Rose", "螺丝");map.put("Mary", "玛丽");System.out.println(map);
// //获取map中所有的键
// Set<String> keys=map.keySet();
// //Set集合也是继承了Iterator。只要是继承了Iterator都可以用迭代器或者增强for循环
// for(String key:keys){
// System.out.println(key);
// }//获取map当中所有的值//Collection集合也是继承了Iterator。只要是继承了Iterator都可以用迭代器或者增强for循环 Collection<String> values = map.values();for(String value:values){System.out.println(value);}//得到key的同事得到key对应的值Set<String> keys=map.keySet();for(String key:keys){System.out.println(key+"-----"+map.get(key));}/*当我们调用put(key,value)方法的时候* 首先会把key和value封装到entry静态内部类对象当中* 然后把entry放到数组里面。所以我们想获取map中的键值对* 我们只需要获取数组中的entry对象。* 调用entry对象中的getKey和getValue方法* * entrySet就是从数组中取出entry对象放到Set里面* *///想输出hashmap里面所有的键值对的时候,基本上都用这种方法。Set<Entry<String, String>> entrys = map.entrySet();for(Entry<String,String> entry:entrys){System.out.println(entry.getKey()+"----"+entry.getValue());}/*hashMap调用默认构造方法,会产生一个底层长度为16的entry数组*entry是一个静态内部类***hashmap内部结构是一个数组链表结构 既有数组又有链表*因为不同的Key有可能算出相同的散列值,根据散列值存放到数组的下标会冲突*这个时候有两种情况 1 若建和值是一样的直接覆盖掉* 2 键值不一样,就会在数组上该下标的地方形成链表。把有冲突的地方链起来* * * */}}