022 Java查询表

1.Map接口

1.1Map接口

Map接口定义的集合称为查询表,用于存储键值对(hey-value)形式存储数据的数据结构,

可以把Map看成多行两列的表格,第一列存储Key,第二列存储Value

注意:key值不能重复,是指Map中不能包含任意两个equals为true的值

1.2put方法

是指将key-value的值存入Map中,若key 的值已经存在,则将对应value覆盖,返回值为替换的元素。若key不存在,返回值为null。

1.3get方法

是指返回集合中的元素,通过给定的key,返回对应的value

若Map中没有给定的key,返回值为null

1.4 containsKey

是指用于判断Map中是否包含指定的key

检查是否包含指定的key用equals方法进行笔记

以上几个方法的代码如下:

         /*
	 * 统计各空气质量站点的PM2.5最高的值
	 */
	@Test
	public void test1(){
		String pm25="农展馆=423,东四=378,丰台花园=406,天坛=322,海淀区万柳=398,"
				+ "官园=406,通州=366,昌平镇=248,怀柔镇=306,定陵=231,前门=422,"
				+ "永乐店=368,古城=268,昌平镇=423,怀柔镇=267,定陵=377,前门=299,"
				+ "永乐店=285,秀水街=277,农展馆=348,东四=356,丰台花园=179,天坛=277,"
				+ "海淀区万柳=270,官园=268,通州=315";
		String[]arr=pm25.split("[,=]");
		System.out.println(Arrays.toString(arr));
		System.out.println();
		Map<String,Integer> map =new HashMap<String,Integer>();
		for(int i=0;i<arr.length;i+=2){
			if(!map.containsKey(arr[i])||Integer.parseInt(arr[i+1])>map.get(arr[i])){
				map.put(arr[i],Integer.parseInt(arr[i+1]));
			}
		}
		System.out.println(map);
				
	}
2.HashMap

2.1Hash表原理

HashMap是Map一个常用子类的实现,是通过散列算法实现的。

HashMap中有一个散列数组,我们成为散列桶,当向Map添加一个键值对,HashMap首先获得key这个对象的HashCode方法,然后使用该值的散列算法,获得一个数值,这个数字就是这个键值对的散列数组下标位置,得知下标位置时,还要查看是否当前散列数组包含该元素。通过equals比较,若相等,则进行替换。若不相等,则进行存入。

2.2HashCode方法

HashMap的存取依赖于key的HashCode返回值。而HashCode方法是在Object中定义的。因此要重写该方法。

HashCode注意事项:

1.若一个类重写了equals方法,那么就应该重写HashCode方法。

2.若两个对象的equals比较值为true,那么他们应该有相同的HashCode值。

3.对一个对象而言,在内容没有改变的情况下,多次调用HashCode方法,其值不变

4.对于两个对象equals方法不同的对象,我们不要求其HashCode值必须不相同,但尽量保证不同,以提高散列性能

2.3装载因子以及HashMap优化,有以下几点

Capacity容量:hash表中同单位数量,既是散列数组大小

Initial Capacity:初始容量,默认为16,可以特定的指定容量。

Size:散列中存储数据的数量;

load factor:装载因子,默认值为0.75,如果Size/Capacity>=0.75,则会发生扩容,并重新散列(rehash)

3.有序Map

3.1LinkedHashMap实现有序Map

LinkedHashMap通过一个双向的循环链表,该循环链表定义了元素的迭代顺序,指存放元素的先后位置。

4.Map的遍历

4.1使用keyset方法:是通过key值进行遍历。代码如下

/*
	 * 使用迭代key的方式遍历map集合
	 */
	@Test
	public void test2(){
		String pm25="农展馆=423,东四=378,丰台花园=406,天坛=322,海淀区万柳=398,"
				+ "官园=406,通州=366,昌平镇=248,怀柔镇=306,定陵=231,前门=422,"
				+ "永乐店=368,古城=268,昌平镇=423,怀柔镇=267,定陵=377,前门=299,"
				+ "永乐店=285,秀水街=277,农展馆=348,东四=356,丰台花园=179,天坛=277,"
				+ "海淀区万柳=270,官园=268,通州=315";
		String[]arr=pm25.split("[,=]");
		System.out.println(Arrays.toString(arr));
		System.out.println();
		Map<String,Integer> map =new HashMap<String,Integer>();
		for(int i=0;i<arr.length;i+=2){
			if(!map.containsKey(arr[i])||Integer.parseInt(arr[i+1])>map.get(arr[i])){
				map.put(arr[i],Integer.parseInt(arr[i+1]));
			}
		}
		System.out.println(map);
		
		Set<String>keys=map.keySet();
		for(String str:keys){
			System.out.print(str+":"+map.get(str)+" ");
		}
	}
4.2使用entryset方法进行遍历,只通过键值对(key-value)进行遍历Map,代码如下:

/*
	 * 使用迭代entry的方式遍历map集合
	 */

	public void test3(){
		String pm25="农展馆=423,东四=378,丰台花园=406,天坛=322,海淀区万柳=398,"
				+ "官园=406,通州=366,昌平镇=248,怀柔镇=306,定陵=231,前门=422,"
				+ "永乐店=368,古城=268,昌平镇=423,怀柔镇=267,定陵=377,前门=299,"
				+ "永乐店=285,秀水街=277,农展馆=348,东四=356,丰台花园=179,天坛=277,"
				+ "海淀区万柳=270,官园=268,通州=315";
		String[]arr=pm25.split("[,=]");
		System.out.println(Arrays.toString(arr));
		System.out.println();
		Map<String,Integer> map =new HashMap<String,Integer>();
		for(int i=0;i<arr.length;i+=2){
			if(!map.containsKey(arr[i])||Integer.parseInt(arr[i+1])>map.get(arr[i])){
				map.put(arr[i],Integer.parseInt(arr[i+1]));
			}
		}
		System.out.println(map);
		Set<Map.Entry<String,Integer>>set=map.entrySet();
		for(Map.Entry<String,Integer>entry:set){
			System.out.println(entry.getKey()+","+entry.getValue()+"  ");
		}
	}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值