set中不能存储相同的对象,这里的相同判断的依据是equals方法,如a.equals(b)返回true,则a和b相同。
虽然判断的依据是equals方法,但是这里有一个问题,如果set中原来就有1000个元素,则如果要存入新的数据,为了保证不同的元素,就要调用1000此equals方法,显然效率太低,为了提高效率,哈希码(可以通过hashcode方法得到)就在这里产生作用了,它根据对象的哈希码,找到对应的地址,如果这个地址上没有元素,则直接存储,如果已经有元素了,则调用equals方法,如果返回true,则不存储,如果返回false,则散列其它的地址。
Java对于eqauls方法和hashCode方法是这样规定的:
如果两个对象相同,那么它们的hashCode值一定要相同;2、如果两个对象的 hashCode相同,它们并不一定相同。
两个String相同,算重复
set容器模版需要3个泛型参数,如下:templateclassset第一个T是元素类型,必选;第二个C指定元素比较方式,缺省为Less,即使用<符号比较;第三个A指定空间分配对象,一般使用默认类型。因此:(1)如果第2个泛型参数你使用默认值的话,你的自定义元素类型需要重载<运算 *** 作;(2)如果你第2个泛型参数不使用默认值的话,则比较对象必须具有() *** 作,即:booloperator()(constT&a,constT&b)以上。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)