一、HashMap
1、构造方法
示例:
package HashMapPack;
import java.util.*;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<Integer,String> hashmap=new HashMap<>();
int Sno[]={1,2,3,4,5};
String Name[]={"zhangsan","lisi","wangwu","zhaoliu","sunqi"};
for(int i=0;i<5;i++)
{
hashmap.put(Sno[i],Name[i]);
}
System.out.println("打印hashmap");
//遍历
for(Map.Entry<Integer,String> entry:hashmap.entrySet())
{
System.out.println(entry.getKey()+" "+entry.getValue());
}
//HashMap(Map<? extends K,? extends V> m) 初始化
HashMap<Integer,String> hashmap2=new HashMap(hashmap);
//遍历
System.out.println("打印hashmap2");
for(Map.Entry<Integer,String> entry:hashmap2.entrySet())
{
System.out.println(entry.getKey()+" "+entry.getValue());
}
System.out.println(hashmap==hashmap2); //false
}
}
运行结果:
2、基本方法
示例:
package HashMapPack;
import java.util.*;
public class HashMapDemo2 {
public static void main(String[] args) {
HashMap<Integer, String> hashmap = new HashMap<>();
int Sno[] = {1, 2, 3, 4, 5};
String Name[] = {"zhangsan", "lisi", "wangwu", "zhaoliu", "sunqi"};
for (int i = 0; i < 5; i++) {
hashmap.put(Sno[i], Name[i]);
}
//使用for each遍历,使用到Map.Entry<>和entrySet方法
for(Map.Entry<Integer,String> entry:hashmap.entrySet())
{
System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());
}
System.out.println(hashmap.containsKey(3)); //true
System.out.println(hashmap.containsKey(6)); //false
System.out.println(hashmap.isEmpty()); //false
System.out.println(hashmap.containsValue("lisi")); //true
System.out.println(hashmap.get(3)); //wangwu
System.out.println(hashmap.keySet()); //[1, 2, 3, 4, 5]
System.out.println(hashmap.values()); //[zhangsan, lisi, wangwu, zhaoliu, sunqi]
System.out.println(hashmap.remove(3)); //wangwu
//直接使用toString方法就能打印出内容,比遍历方便
//如果需要查看具体元素、进行什么操作的话,还是使用遍历
System.out.println(hashmap.toString());//{1=zhangsan, 2=lisi, 4=zhaoliu, 5=sunqi}
}
}
题目:两数之和
1、给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。
2、你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
3、 你可以按任意顺序返回答案。
class Solution {
public int[] twoSum(int[] nums, int target) {
HashMap<Integer,Integer> hashmap=new HashMap<>();
//由于题目的特殊性,不需要考虑值是否会重复的问题
int res[]={-1,-1};
for(int i=0;i<nums.length;i++)
{
if(!hashmap.isEmpty() && hashmap.containsKey(target-nums[i]))
{
res[0]=i;
res[1]=hashmap.get(target-nums[i]);
return res;
}
hashmap.put(nums[i],i);
}
return res;
}
}
3、HashMap的初始容量和加载因子
HashMap的实例有两个参数影响其性能:初始容量和加载因子。
初始容量
是哈希表在创建时的容量
加载因子
是哈希表在自动扩容前可以达到的容量的一个尺度
如初始容量为16,加载因子为0.75,那么在容量达到16*0.75=12时,哈希表就会调用rehash方法将容量翻倍,即变为32
通常,默认加载因子(0.75)在时间和空间成本上寻求的一种折中。加载因子过高减少了空间开销,但是增加了查询成本(get
和put
操作都反映出这点)。