203 01 Android 零基础入门 03 Java常用工具类 04 Java集合 03 Set集合 07 删除宠物猫信息数据(引入泛型知识点)
本文知识点:删除宠物猫信息数据(引入泛型知识点)
说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进行了截图记录,没有对截图步骤进行详细的文字说明(后面博主时间充裕了,会对目前的博客编辑修改,补充上详细的文字说明);有些步骤和相关知识点缺乏文字描述,可能会难以理解。读者如有不明之处,欢迎博客私信或者微信(本人微信在博客下方的“关于博主”处)与本人交流,共同进步。
泛型
使用泛型后,避免强制类型转换带来的潜在隐患潜在错误。(不使用泛型的情况下,可以强制类型转换,但是如果强制类型转换过程中转换错了类型,编译时是不报错的,运行时却会出错)。
但是使用泛型后,强制类型转换错了类型,就一定会报错。并且在引入泛型后,添加数据前类型就已经规定好了,数据类型在添加时就不出错,后续获取数据时也就不需要强制类型转换了。
泛型示例代码
集合和迭代器后都需要加入尖括号,尖括号中写上需要添加的元素对象的类型。
使用泛型后,添加元素的代码的黄色警告也会消失。
使用泛型后,强制类型转换时,类型转换出错时,编译时就会有错误提示:
实际上,引入泛型后,添加数据时没有错误的情况下,取数据时,根本也不需要强制类型转换,因为数据添加时的类型本来就是正确的:
删除宠物猫信息数据
删除花花二代的信息并重新输出集合中的元素:使用remove()方法
注:引入泛型后,除了迭代器外,还可以使用增强型for循环来遍历集合。
删除花花二代成功
删除集合中所有元素的信息:使用removeAll()方法
删除了整个set集合,宠物猫元素都被删除
也可以使用set集合的isEmpty()方法判断集合是否为空,即集合中是否没有元素(这里可以理解为:元素是否都被删除了)
删除花花,出现异常:
为什么删除花花二代时没有问题,但是删除花花时出现异常了呢?
这是因为集合在进行设计的时候,为了避免数据的不一致性做了一个限制:读取数据时,不允许对数据进行删除的。
这个问题比较好解决,添加一个break即可:只要找到满足条件的数据,就不再进行下一步的遍历。
添加break之后,输出结果就没有问题了
这时候,有了新问题,上面的例子中,是只有一个满足循环条件的数据(即花花满足)需要被删除,我们在增强型for循环遍历的过程中,通过添加break语句即可解决;如果我们想在循环中有多个满足条件的数据需要删除(即集合中我们想要移除多个元素),该怎么处理呢?
原来的需求:把名字为花花的这一个宠物猫元素删除
新需求:把月龄小于5个月的所有宠物猫元素都删除
注意:花花12个月、凡凡3个月、花花二代2个月
所以,此时满足提交的宠物猫元素有2个,凡凡和花花二代都小于5个月
这个时候,判断语句肯定不能break了,因为我们要找的不只是一个元素,不是有一个满足条件就要跳出循环,我们还要找第二个满足条件的……
又出现异常:
那么,这个异常如何解决呢?
有办法
set类中removeAll()方法,可以传入一个集合参数,就能删除整个集合。
那我们也能删除某个集合的子集,把某个集合中的一些满足条件需要删除的元素,重新组成一个新的集合(即原来集合的子集)
如下图:set1集合是set集合的子集,使用removeAll方法,删除set集合中的满足删除条件的元素构成的子集set1
删除成功,删除操作后,满足条件的小于5个月的凡凡和花花二代都被成功删除了,只剩下12个月的花花。
删除总结
1、只删除一个元素:
增强型for循环,删除后break跳出循环
2、删除多个元素
将需要删除的满足条件的元素添加到一个集合(子集)中,再使用removeAll()方法