赞
踩
目录
这里还是以宠物猫为例
总结一下HashSet中查找和删除数据的方法
先说一下总体思路:
这里还是以宠物猫为例,(不是为了水文章,因为可能全部放在一起的话,一是自己不好查找知识点,另外还有就是放在一篇blog中显得过于冗长)
在HashSet中存储了宠物猫的信息
查找需要进行查询操作的宠物猫信息
查找的方式:第一种,通过对象名查找
不过谁能知道对象名啊!一般都是使用宠物猫的名字进行查找
所以第二种就是通过宠物猫的名字进行查找
通过对象名查找,使用到的方法是HashSet中的contain方法
通过宠物猫的名字进行查找的方法是获取元素
然后得到元素中的名字,再使用equals方法进行比较
- /*
- * 属性包括名字、年龄、种类
- *方法包括:get和set,还有构造方法
- */
- public class Cat {
- public String name;
- public int month;
- public String species;
- public Cat(String name, int month, String species) {
- super();
- this.name = name;
- this.month = month;
- this.species = species;
- }
-
-
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public int getMonth() {
- return month;
- }
- public void setMonth(int month) {
- this.month = month;
- }
- public String getSpecies() {
- return species;
- }
- public void setSpecies(String species) {
- this.species = species;
- }
-
-
- @Override
- public String toString() {
- return "Cat [name=" + name + ", month=" + month + ", species=" + species + "]";
- }
-
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + month;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result + ((species == null) ? 0 : species.hashCode());
- return result;
- }
-
-
- @Override
- public boolean equals(Object obj) {
- if(this==obj) {
- return true;
- }
- if(obj.getClass()==Cat.class) {
- Cat c=(Cat)obj;
- return c.getName().equals(name)&&(c.getMonth()==month)&&c.getSpecies().equals(species);
- }
- return false;
- }
-
-
-
- }
- import java.util.HashSet;
- import java.util.Iterator;
-
- public class CatTest {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cat one=new Cat("一一", 5, "中华田园猫");
- Cat two=new Cat("二二", 7, "英国短毛猫");
-
- HashSet<Cat> s=new HashSet<Cat>();
- s.add(one);
- s.add(two);
-
- Iterator<Cat> it=s.iterator();
- while(it.hasNext()) {
- System.out.println(it.next());
-
- }
- //寻找对象名为one的对象是否存在于s中
- if(s.contains(one)) {
- System.out.println("找到了");
- }
-
- //寻找宠物猫名字为一一的小猫是否存在
- it=s.iterator();
- while(it.hasNext()) {
- Cat c=it.next();
- if(c.getName().equals("一一")) {
- System.out.println("小猫一一找到了");
- break;
- }
- }
-
- }
-
- }
这里有一个小提示:就是一个迭代器只能使用一次
如果一个迭代器已经使用过一次了,你还想再次使用迭代器的功能
只能够再创建一个新的迭代器,因为上一个迭代器已经迭代结束了
当你再次使用hasNext方法判断是否存在下一个元素的时候
返回的值永远都适合false
上面通过名字查找宠物猫的时候,没有用之前创建的迭代器
而是自己又创建了一个迭代器
对HashSet中的对象进行删除操作
要用到的方法是remove或者想要删除某一类具有特征的对象,就要用removeAll
在HashSet中,不仅可以用迭代器对集合进行遍历,也可以使用增强型for循环
对某一个对象进行删除,首先要找到它,然后remove即可
- import java.util.HashSet;
- import java.util.Iterator;
-
- public class CatTest {
-
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- Cat one=new Cat("一一", 5, "中华田园猫");
- Cat two=new Cat("二二", 7, "英国短毛猫");
-
- HashSet<Cat> s=new HashSet<Cat>();
- s.add(one);
- s.add(two);
-
- Iterator<Cat> it=s.iterator();
- while(it.hasNext()) {
- System.out.println(it.next());
-
- }
- //寻找对象名为one的对象是否存在于s中
- if(s.contains(one)) {
- System.out.println("找到了");
- }
-
- //寻找宠物猫名字为一一的小猫是否存在
- it=s.iterator();
- while(it.hasNext()) {
- Cat c=it.next();
- if(c.getName().equals("一一")) {
- System.out.println("小猫一一找到了");
- break;
- }
- }
- //删除一一
- for(Cat cat:s) {
- if(cat.getName().equals("一一")) {
- s.remove(cat);
- break;
- }
- }
-
- System.out.println("************************");
- //删除一一之后
- for(Cat cat:s) {
- System.out.println(cat);
- }
-
- HashSet<Cat> ht=new HashSet<Cat>();
- //删除具有某一类特征的宠物猫,比如月份小于9的
- for(Cat cat:s) {
- if(cat.getMonth()<9) {
- ht.add(cat);
- }
- }
-
- s.removeAll(ht);//对月份小于9的宠物猫进行删除
- //删除月份小于9的
- if(s.isEmpty()) {
- System.out.println("删除成功");
- }else {
- System.out.println("删除失败");
- }
- }
-
- }
这里要记住一个问题,如果对集合进行了删除操作
那就不能继续对其进行遍历,就要终止遍历操作
只能进行下一次遍历
如果是最后一个元素的话,那就没有关系
这里可以试验一下,先删除一一不加break语句
如果删除二二,不加break语句呢?答案是不会抛出异常
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。