2019-03-14 22:12:26 卢浮宫 版权声明:本文为站长原创文章,转载请写明出处
今天看到一个关于hashmap的代码段,觉得内容虽少但是触及的知识点比较多,所以又加工了下。
这里的话就最终的代码贴出来记录下。
public class xa {
public static void main(String[] args) {
Map<Long,String> map = new HashMap();
String vKeyValTmp = "";
for(int i=0;i<10;i++){
Long key = (long) (i + 1);
map.put(key, i+"-"+1);
if(i == 2){
vKeyValTmp = (i+"-"+1);
}
}
map.put((long)2,"asdf");
System.out.println(map.toString());
System.out.println(map.get(2));
System.out.println(map.get((long)2));
System.out.println(vKeyValTmp.hashCode() == map.get((long)2).hashCode());
System.out.println(vKeyValTmp.equals(map.get((long)2).toString()));
System.out.println("asdf".equals("asdf"));
System.out.println("asdf".hashCode() == "asdf".hashCode());
}
}
输出结果为:
{1=0-1, 2=asdf, 3=2-1, 4=3-1, 5=4-1, 6=5-1, 7=6-1, 8=7-1, 9=8-1, 10=9-1}
null
asdf
false
false
true
true
1、类型转换:在jdk5引入了装箱和拆箱的概念,解决了基本数据类型和派生类型之间的转换。但是在不同的基本数据类型之间还是能进行一个自动转换的。
这时我们就需要用到强制类型转换了:Long vKey = (long)(i+1);
2、hashmap的实现原理:hashmap是使用key-value来实现的一个键值对数据集,并通过put(key,value)来进行数据的写入。
3、泛型:上面的map在定义时声明了Map(Long,String),这样做的好处是数据规范性,也就是说当你试图插入一个map.put(1,"str")时就会编译报错。
4、map.get():当我们取map的数据时是通过map.get(key)来进行的,同样因为我们声明了Map的键值类型,在取数据时也要按照这个规范。
5、map数据写入:当我们在使用map.put来进行数据写入时,如果之前的key已经存在,那么是覆盖对应的value。
6、map在插入数据时的检测机制:map在写入数据时是先获取key然后拿到其value的,当检测到已存在对应的value时就会比较当前写入数与旧数据,如果重复
就进行覆盖,而这个检测是使用hashCode()和equals()来进行对比的。