GVKun编程网logo

具有Null键和Null值的HashMap(null有hashcode吗)

24

本文将分享具有Null键和Null值的HashMap的详细内容,并且还将对null有hashcode吗进行详尽解释,此外,我们还将为大家带来关于ArrayList,HashMap,HashSet中放n

本文将分享具有Null键和Null值的HashMap的详细内容,并且还将对null有hashcode吗进行详尽解释,此外,我们还将为大家带来关于ArrayList ,HashMap ,HashSet中放null、c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8、fastjson 处理null值,对象为null时返回{},数字为null返回[]的相关知识,希望对你有所帮助。

本文目录一览:

具有Null键和Null值的HashMap(null有hashcode吗)

具有Null键和Null值的HashMap(null有hashcode吗)

考虑以下代码:

import java.util.*;class Employee {    String name;    public Employee(String nm) {        this.name=nm;    }}public class HashMapKeyNullValue {    Employee e1;    public void display(){        Employee e2=null;        Map map=new HashMap();        map.put(e2, "25");        System.out.println("Getting the Value When e2 is set as KEY");        System.out.println("e2 : "+map.get(e2));        System.out.println("e1 : "+map.get(e1));        System.out.println("null : "+map.get(null));        map.put(e1, "");        System.out.println("Getting the Value when e1 is set as KEY");        System.out.println("e2 : "+map.get(e2));        System.out.println("e1 : "+map.get(e1));        System.out.println("null : "+map.get(null));        map.put(null, null);   // null as key and null as value        System.out.println("Getting the Value when setting null as KEY and null as value");        System.out.println("e2 : "+map.get(e2));        System.out.println("e1 : "+map.get(e1));        System.out.println("null : "+map.get(null));        map.put(null, "30");        System.out.println("Getting the Value when setting only null as KEY");        System.out.println("e2 : "+map.get(e2));        System.out.println("e1 : "+map.get(e1));        System.out.println("null : "+map.get(null));    }    public static void main(String[] args) {        new HashMapKeyNullValue().display();    }}

程序的输出为:

Getting the Value When e2 is set as KEYe2 : 25e1 : 25null : 25Getting the Value when e1 is set as KEYe2 : e1 : null : Getting the Value when setting null as KEY and null as valuee2 : nulle1 : nullnull : nullGetting the Value when setting only null as KEYe2 : 30e1 : 30null : 30

这里e1, e2, and null,键如何相互关联。是否所有三个都分配给相同的哈希码?如果是,为什么?

由于这三个值看起来都不同,因此一个值的更改会更改另一个值。这是否意味着只将一个密钥项输入HashMap 到任一密钥中,e1, e2, ornull因为所有密钥项都被视为相同的密钥。

答案1

小编典典

HashMap 当将 null 作为键传递并且null作为特殊情况处理时,不会调用哈希码。

放置方法

HashMapnull 键放在存储区 0中, 并将 null
作为键映射到传递的值。HashMap通过链表数据结构来实现。HashMap在内部使用链接列表数据结构。

HashMap (中的静态类HashMap.java)使用的链接列表数据结构

static class Entry<K,V> implements Map.Entry<K,V> {        final K key;        V value;        Entry<K,V> next;        final int hash;}

在Entry类中,将 K 设置为 null, 并将值映射到put方法中传递的值。

获取方法

Hashmap get方法中,检查key是否作为 null 传递。存储区 0 中空 键的搜索值。 __

因此,在一个中只能有一个空键 __hashmap 目的。

ArrayList ,HashMap ,HashSet中放null

ArrayList ,HashMap ,HashSet中放null

list可以,hashmap的key 和vaule都可以放null ,hashset可以

对于Map里面的键和值是否可以为空的问题,答案是:不一定。对于HashMap来说,可以存放null键和null值,而HashTable则不可以。

            map.put(0, "0");
            map.put(1, null);
            map.put(null, "2");
            map.put(3, "");
            map.put(null, "4");

api上set定义:
一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对
e1 和 e2,并且最多包含一个 null 元素。

 s.add(null);
s.add(null);
System.out.println(s.size());   -------------1

c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value

c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value

我有一个可以为空的DateTime变量.我想把它写到sql DB.当我尝试插入时:

如果变量有值,则没有问题.

但如果它没有值,则插入中断错误.

我想问:我们如何通过DbCommand参数将可空的DateTime插入sql?

(P.S.:sql列也可以为空.)

DateTime? myDate = null;
DbCommand dbCommand = new DbCommand();
dbCommand.Parameters.Add("NullablesqlDateField",DbType.DateTime,myDate);

解决方法

试试 null coalescing operator:

dbCommand.Parameters.Add("NullablesqlDateField",(object) myDate ?? dbnull.Value);

failed to parse: {

failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8

IDEA整合springboot与neo4j时出现这个问题

fastjson 处理null值,对象为null时返回{},数字为null返回[]

fastjson 处理null值,对象为null时返回{},数字为null返回[]

针对这一情况。

我用的json转换工具是fastjson,网上查知fastjson 有ValueFilter接口可以实现自定义过滤

packagecom.alibaba.fastjson.serializer;

publicinterfaceValueFilterextendsSerializefilter{

Objectprocess(Objectobject,Stringname,Objectvalue);
}

知道接口后就简单了。

process(Objectobject,Objectvalue)//三个参数,object为要转成json的对象,name是对象的get/is方法的名字(去掉get或is前缀并首字母小写),value就是对应的get值

//思路就是通过object和name反射方法得出其return的类型。针对value==null的基础数据类型的或者list的类型的做出不同处理
//实现的部分代码(PS:时间类型我也算到基础类型了。)
	privatestaticString[]types={"java.lang.Integer","java.lang.Double","java.lang.Float","java.lang.Long","java.lang.Short","java.lang.Byte","java.lang.Boolean","java.lang.Char","java.lang.String","java.util.Date","int","double","long","short","byte","boolean","char","float"};
	
	
	privatestaticStringfirst2Up(Stringstr){
		returnstr.substring(0,1).toupperCase()+str.substring(1);
	}
	
	privatestaticValueFilternullValueFilter=newValueFilter(){
		@Override
		publicObjectprocess(Objectobject,Objectvalue){
			if(value==null){
			try{
				Methodmethod=object.getClass().getDeclaredMethod("get"+first2Up(name));
				
				for(Stringtype:types){
					if(method.getReturnType().getName().equals(type)){
							return"";
						}
				}
				
				if(method.getReturnType().isAssignableFrom(List.class)&&
						!method.getReturnType().getName().equals("java.lang.Object")){
					returnnewint[0];
					}
				
				returnnewObject();
					
				}catch(SecurityException|NoSuchMethodExceptione){
					e.printstacktrace();
					returnvalue;
				}
		}
		returnvalue;
		}
		
	};

	privatestaticStringdateFormat="yyyy-MM-ddHH:mm:ss";
	privatestaticSerializeConfigmapping=newSerializeConfig();
	static{
		mapping.put(Date.class,newSimpleDateFormatSerializer(dateFormat));
	}
//只是部分代码,有些数字类型,也需要加上引号过滤的对象是notNullValueFilter,原理一样,就不贴出来了,mapping是对日期的格式化方法
	publicstaticStringtoJsonString(Objectobj){
		Serializefilter[]filters={nullValueFilter,notNullValueFilter};
		returnjsON.toJSONString(obj,mapping,filters);
	}


附上原先的json接口转换方法,希望能抛砖引玉

publicStringobject2Json(Objectobject)throwsIOException{
		if(!objectUtil.isNotEmpty(object)){
			return"";
		}
		ObjectMappermapper=JacksonMapper.getInstance();
		
		//字段和值都加引号
		mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES,true);

		//数字加引号
		mapper.configure(JsonGenerator.Feature.WRITE_NUMBERS_AS_STRINGS,true);
		mapper.configure(JsonGenerator.Feature.QUOTE_NON_NUMERIC_NUMBERS,true);
	
		
		mapper.getSerializerProvider().setNullValueSerializer(newJsonSerializer<Object>()
{
publicvoidserialize(
Objectvalue,JsonGeneratorjg,SerializerProvidersp)throwsIOException,JsonProcessingException
{
jg.writeString("");
}
});
		returnmapper.writeValueAsstring(object);
	}

今天的关于具有Null键和Null值的HashMapnull有hashcode吗的分享已经结束,谢谢您的关注,如果想了解更多关于ArrayList ,HashMap ,HashSet中放null、c# – 如何将Nullable DateTime变量的null值转换为DbNull.Value、failed to parse: {"row":[8,6,12,7,13,8,14],"meta":[null,null,null,null,null,null,null]}]} 11:46:29.8、fastjson 处理null值,对象为null时返回{},数字为null返回[]的相关知识,请在本站进行查询。

本文标签: