首先直接回答你的问题:运行期,遇到B元素会报错。即类型转换错误。泛型的出现就是为了预防这类错误。因为默认你存的object对象,可以强制类型转换,但在运行期,电脑会发现强制类型转换错误。故报错。
最好指定泛型。原因如下:
第一、不确定泛型,首先会有黄色的叹号,我一般不会让代码出现。
第二、什么样的元素都可以提取出相同的继承类型。常用的有serialize,object等。
最后,把你发的图的问题也解决了:
String的hashcode方法和object不同,api中如此解释:
public int hashCode()
返回此字符串的哈希码。String 对象的哈希码根据以下公式计算:
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希值为 0。)
所以字符串的hashcode只和字符串的内容相关,和其他的无关。故上述的hashcode都相等。