当前位置:   article > 正文

Java语言:Java集合之HashSet查找和删除数据_hashset查找元素

hashset查找元素

目录

查找

删除


这里还是以宠物猫为例

总结一下HashSet中查找和删除数据的方法

 

查找

 

先说一下总体思路:

这里还是以宠物猫为例,(不是为了水文章,因为可能全部放在一起的话,一是自己不好查找知识点,另外还有就是放在一篇blog中显得过于冗长)

在HashSet中存储了宠物猫的信息

查找需要进行查询操作的宠物猫信息

 

查找的方式:第一种,通过对象名查找

不过谁能知道对象名啊!一般都是使用宠物猫的名字进行查找

所以第二种就是通过宠物猫的名字进行查找

 

通过对象名查找,使用到的方法是HashSet中的contain方法

通过宠物猫的名字进行查找的方法是获取元素

然后得到元素中的名字,再使用equals方法进行比较

 

上代码

宠物猫类

  1. /*
  2. * 属性包括名字、年龄、种类
  3. *方法包括:get和set,还有构造方法
  4. */
  5. public class Cat {
  6. public String name;
  7. public int month;
  8. public String species;
  9. public Cat(String name, int month, String species) {
  10. super();
  11. this.name = name;
  12. this.month = month;
  13. this.species = species;
  14. }
  15. public String getName() {
  16. return name;
  17. }
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21. public int getMonth() {
  22. return month;
  23. }
  24. public void setMonth(int month) {
  25. this.month = month;
  26. }
  27. public String getSpecies() {
  28. return species;
  29. }
  30. public void setSpecies(String species) {
  31. this.species = species;
  32. }
  33. @Override
  34. public String toString() {
  35. return "Cat [name=" + name + ", month=" + month + ", species=" + species + "]";
  36. }
  37. @Override
  38. public int hashCode() {
  39. final int prime = 31;
  40. int result = 1;
  41. result = prime * result + month;
  42. result = prime * result + ((name == null) ? 0 : name.hashCode());
  43. result = prime * result + ((species == null) ? 0 : species.hashCode());
  44. return result;
  45. }
  46. @Override
  47. public boolean equals(Object obj) {
  48. if(this==obj) {
  49. return true;
  50. }
  51. if(obj.getClass()==Cat.class) {
  52. Cat c=(Cat)obj;
  53. return c.getName().equals(name)&&(c.getMonth()==month)&&c.getSpecies().equals(species);
  54. }
  55. return false;
  56. }
  57. }

测试类

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. public class CatTest {
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. Cat one=new Cat("一一", 5, "中华田园猫");
  7. Cat two=new Cat("二二", 7, "英国短毛猫");
  8. HashSet<Cat> s=new HashSet<Cat>();
  9. s.add(one);
  10. s.add(two);
  11. Iterator<Cat> it=s.iterator();
  12. while(it.hasNext()) {
  13. System.out.println(it.next());
  14. }
  15. //寻找对象名为one的对象是否存在于s中
  16. if(s.contains(one)) {
  17. System.out.println("找到了");
  18. }
  19. //寻找宠物猫名字为一一的小猫是否存在
  20. it=s.iterator();
  21. while(it.hasNext()) {
  22. Cat c=it.next();
  23. if(c.getName().equals("一一")) {
  24. System.out.println("小猫一一找到了");
  25. break;
  26. }
  27. }
  28. }
  29. }

运行结果如下

这里有一个小提示:就是一个迭代器只能使用一次

如果一个迭代器已经使用过一次了,你还想再次使用迭代器的功能

只能够再创建一个新的迭代器,因为上一个迭代器已经迭代结束了

当你再次使用hasNext方法判断是否存在下一个元素的时候

返回的值永远都适合false

上面通过名字查找宠物猫的时候,没有用之前创建的迭代器

而是自己又创建了一个迭代器

 

删除

对HashSet中的对象进行删除操作

要用到的方法是remove或者想要删除某一类具有特征的对象,就要用removeAll

在HashSet中,不仅可以用迭代器对集合进行遍历,也可以使用增强型for循环

对某一个对象进行删除,首先要找到它,然后remove即可

上代码

  1. import java.util.HashSet;
  2. import java.util.Iterator;
  3. public class CatTest {
  4. public static void main(String[] args) {
  5. // TODO Auto-generated method stub
  6. Cat one=new Cat("一一", 5, "中华田园猫");
  7. Cat two=new Cat("二二", 7, "英国短毛猫");
  8. HashSet<Cat> s=new HashSet<Cat>();
  9. s.add(one);
  10. s.add(two);
  11. Iterator<Cat> it=s.iterator();
  12. while(it.hasNext()) {
  13. System.out.println(it.next());
  14. }
  15. //寻找对象名为one的对象是否存在于s中
  16. if(s.contains(one)) {
  17. System.out.println("找到了");
  18. }
  19. //寻找宠物猫名字为一一的小猫是否存在
  20. it=s.iterator();
  21. while(it.hasNext()) {
  22. Cat c=it.next();
  23. if(c.getName().equals("一一")) {
  24. System.out.println("小猫一一找到了");
  25. break;
  26. }
  27. }
  28. //删除一一
  29. for(Cat cat:s) {
  30. if(cat.getName().equals("一一")) {
  31. s.remove(cat);
  32. break;
  33. }
  34. }
  35. System.out.println("************************");
  36. //删除一一之后
  37. for(Cat cat:s) {
  38. System.out.println(cat);
  39. }
  40. HashSet<Cat> ht=new HashSet<Cat>();
  41. //删除具有某一类特征的宠物猫,比如月份小于9
  42. for(Cat cat:s) {
  43. if(cat.getMonth()<9) {
  44. ht.add(cat);
  45. }
  46. }
  47. s.removeAll(ht);//对月份小于9的宠物猫进行删除
  48. //删除月份小于9
  49. if(s.isEmpty()) {
  50. System.out.println("删除成功");
  51. }else {
  52. System.out.println("删除失败");
  53. }
  54. }
  55. }

 

这里要记住一个问题,如果对集合进行了删除操作

那就不能继续对其进行遍历,就要终止遍历操作

只能进行下一次遍历

如果是最后一个元素的话,那就没有关系

这里可以试验一下,先删除一一不加break语句

 

如果删除二二,不加break语句呢?答案是不会抛出异常

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号