重写了equals,hashcode方法后,前端传入user[0],user[1]两个元素进来,又会报index>size的错误了。因为set在初始化时,添加的两个元素new User()相同,导致size=1
Set需要先初始化,且往里面添加元素(如2,这样可以满足前端传入索引为0,1的两个元素过来)但是如果直接传入下标为20的,一样会报index超出size的异常。添加第一个user[0]不会报错,添加user[20]才会触发异常
一般在判断重复的时候用到set,如判断姓名和email如果同时一样,则这两个对象判断为相同,同时修改hashcode方法
set、list作为入参会不一样,set需要初始化
List链表绑定数据不需要初始化大小
Set集合绑定数据要初始化大小
SpringMVC——Set的数据绑定
案例:Set应用场景,抽象一个Student对象,有一个name属性和一个Email属性,提交信息时候,需要把学生1和学生2的name和Email同时绑定到后台,Set和List还是有一些区别的,它需要先初始化Set(也就是Set集合的长度要大于0,这里在提供集合的类里对Set初始化,添加若干元素),而List是不需要的,而且Set数据绑定在实际应用中,经常用作对象的重复判断,或者排除重复,例如:Student对象有一个name和Email,如果name和Email都相等时,那么这个对象是重复的,会重写hashcode方法和equals方法,然后在里面写重复判断的逻辑,SpringMVC对于Set集合的绑定,如果学生1和学生2传来的name和Email是一样的就会绑定到一个对象上。
访问地址:
SpringMVC对Set类型数据绑定支持不够好
如果实体类Student重写了equals和hashcode方法,那么再次绑定就会绑定一个对象,也就是集合中只有一个对象,如图一,当我我们在url中通过http://localhost:8080/setParam?set[0].name=Tom&set[1].name=Tom传参数时,会报错,对于集合绑定优先使用List进行绑定。
在SpringMVC中绑定Set数据类型,接口的参数形式和绑定list是类似的,都是通过索引。但是不同的在于,Set必须初始化,如图必须先包含了初始化对象,也即是说必须提前手动分配好空间,才能进行赋值,而使用List则没有这个要求。
另外的一个坑在于,初始化Set时需要留意对象的equals方法,假如我们在提前分配两个对象空间时,两个对象通过equals方法判断为相同,则我们期望的Set的size为2,最后实际因为去重变成了1,导致在数据绑定时很容易出现数组越界的异常。
Set我们一般用来排重 使用Set的时候需要先进行初始化 要使用Set的排重功能必须在对象中覆写hashcode和equals方法。 SpringMVC对Set支持并不太好,初始化进行排重时会导致size变小,致使无法接受更多的数据而抛出异常,所以我们开发一般优先使用List。
set也一样,应该先复习一下集合再来回顾这三个内容
在SpringMVC中绑定Set数据类型,接口的参数形式和绑定list是类似的,都是通过索引。但是不同的在于,Set必须初始化,如图必须先包含了初始化对象,也即是说必须提前手动分配好空间,才能进行赋值,而使用List则没有这个要求。
另外的一个坑在于,初始化Set时需要留意对象的equals方法,假如我们在提前分配两个对象空间时,两个对象通过equals方法判断为相同,则我们期望的Set的size为2,最后实际因为去重变成了1,导致在数据绑定时很容易出现数组越界的异常。
List、Set的区别
复习hash和eques方法