案例:宠物猫信息管理
需求:
--添加和显示宠物猫信息
--查找某只宠物猫信息并输出
--修改宠物猫信息
--删除宠物猫信息
类:
属性
--名字 name
--年龄 month
--品种 species
方法:
--构造方法
--获取设置属性方法
--其他方法
编程注意点:
1、输出时要在猫类中重写toString方法
2、由于自定义类,而且用到set,set会去调用hashcode 和 equals方法,
所以在猫类中要重写 hashcode 和 equals【重点】 方法
用到反射类,强转,比较
迭代器每次使用都要重新赋值。
猫类:
package com.imooc.set;
public class Cat {
private String name;
private int month;
private String species;
//构造方法
//构造方法
public Cat(String name, int month, String species) {
this.name = name;
this.month = month;
this.species = species;
}
//get set 方法
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 "[" +
"姓名:'" + name + '\'' +
", 年龄:" + month +
", 品种:" + species + '\'' +
']';
}
@Override
public boolean equals(Object obj) {
//如果对象相等,返回true,不用比较属性
if (this == obj)
return true;
//判断obj是否是cat类的对象
if (obj.getClass() == Cat.class) {
Cat cat = (Cat) obj;
return cat.getName().equals(name) &&
(cat.getMonth() == month) &&
(cat.getSpecies().equals(species));
}else
return false;
}
@Override
public int hashCode() {
int result = getName() != null ? getName().hashCode() : 0;
result = 31 * result + getMonth();
result = 31 * result + (getSpecies() != null ? getSpecies().hashCode() : 0);
return result;
}
}
主类:
package com.imooc.set;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatTest {
public static void main(String[] args) {
//define
Cat huahua = new Cat("花花", 12, "英国短毛猫");
Cat fanfan = new Cat("翻翻", 3, "中华田园猫");
//将宠物猫对象放入hashset
Set <Cat> set = new HashSet <Cat>();
set.add(huahua);
set.add(fanfan);
//显示宠物猫信息
Iterator <Cat> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//在添加一个与花花属性一样的猫
Cat huahua01 = new Cat("花花", 12, "英国短毛猫");
set.add(huahua01);
//显示宠物猫信息
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++++添加宠物猫后的输出+++++++++");
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//重新插入新的宠物猫信息
Cat huahua02 = new Cat("花花二代", 2, "英国短毛猫");
set.add(huahua02);
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++添加花花二代后宠物猫信息++++++");
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++通过对象查找花花信息++++++");
//在集合中查找花花的信息并输出
if (set.contains(huahua)) {
System.out.println("花花找到了!");
System.out.println(huahua);
} else {
System.out.println("花花没找到");
}
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++通过名字查找花花信息++++++");
//在集合中使用名字查找花花的信息
boolean flag = false;
Cat c = null;
it = set.iterator();
while (it.hasNext()) {
c = it.next();
if (c.getName().equals("花花")) {
flag = true;
break;
}
}
if (flag == true) {
System.out.println("花花找到了!");
System.out.println(c);
} else {
System.out.println("花花没找到");
}
/**
* 第一次判断,名字等于花花的
* 第一种核心思路是只有一个,唯一,匹配到后break
* 第二种是遍历,但是和set的size无关,然后直接删除某个元素,这种更通用,可以用多元素删除。。
*/
// //第一种方法
for (Cat cat : set) {
if ("花花".equals(cat.getName())) {
set.remove(cat);
//break;
}
}
//第二种方法
// it = set.iterator();
// while (it.hasNext()) {
// Cat d = it.next();
// if ("花花".equals(d.getName())) {
// it.remove();
// // System.out.println(c);
// }
// }
/**
* 第二次判断,删除年龄小于5的
* 核心思路是先做一个小集合,再用removeall去做集合减
*/
// Set<Cat> set1=new HashSet<Cat>();
// for (Cat cat : set) {
// if (cat.getMonth()<5) {
// set1.add(cat);
// }
// }
// set.removeAll(set1);
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("删除花花二代后的数据");
for (Cat cat : set) {
System.out.println(cat);
}
//删除集合中的所有宠物猫信息
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("删除所有宠物猫信息");
//第一种,用set.removeAll()返回的值去判断
boolean flag1 = set.removeAll(set);
// if(flag1){
// System.out.println("猫都不见了...");
for (Cat cat : set) {
System.out.println(cat);
}
// }else{
// System.out.println("猫还在");
// }
//第二种,删除后用isEmpty()方法去判断
if (set.isEmpty()) {
System.out.println("猫都不见了...");
// for (Cat cat : set) {
// System.out.println(cat);
// }
} else {
System.out.println("猫还在");
}
}
需求:
--添加和显示宠物猫信息
--查找某只宠物猫信息并输出
--修改宠物猫信息
--删除宠物猫信息
类:
属性
--名字 name
--年龄 month
--品种 species
方法:
--构造方法
--获取设置属性方法
--其他方法
编程注意点:
1、输出时要在猫类中重写toString方法
2、由于自定义类,而且用到set,set会去调用hashcode 和 equals方法,
所以在猫类中要重写 hashcode 和 equals【重点】 方法
用到反射类,强转,比较
迭代器每次使用都要重新赋值。
猫类:
package com.imooc.set;
public class Cat {
private String name;
private int month;
private String species;
//构造方法
//构造方法
public Cat(String name, int month, String species) {
this.name = name;
this.month = month;
this.species = species;
}
//get set 方法
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 "[" +
"姓名:'" + name + '\'' +
", 年龄:" + month +
", 品种:" + species + '\'' +
']';
}
@Override
public boolean equals(Object obj) {
//如果对象相等,返回true,不用比较属性
if (this == obj)
return true;
//判断obj是否是cat类的对象
if (obj.getClass() == Cat.class) {
Cat cat = (Cat) obj;
return cat.getName().equals(name) &&
(cat.getMonth() == month) &&
(cat.getSpecies().equals(species));
}else
return false;
}
@Override
public int hashCode() {
int result = getName() != null ? getName().hashCode() : 0;
result = 31 * result + getMonth();
result = 31 * result + (getSpecies() != null ? getSpecies().hashCode() : 0);
return result;
}
}
主类:
package com.imooc.set;
import org.omg.PortableInterceptor.SYSTEM_EXCEPTION;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class CatTest {
public static void main(String[] args) {
//define
Cat huahua = new Cat("花花", 12, "英国短毛猫");
Cat fanfan = new Cat("翻翻", 3, "中华田园猫");
//将宠物猫对象放入hashset
Set <Cat> set = new HashSet <Cat>();
set.add(huahua);
set.add(fanfan);
//显示宠物猫信息
Iterator <Cat> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//在添加一个与花花属性一样的猫
Cat huahua01 = new Cat("花花", 12, "英国短毛猫");
set.add(huahua01);
//显示宠物猫信息
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++++添加宠物猫后的输出+++++++++");
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
//重新插入新的宠物猫信息
Cat huahua02 = new Cat("花花二代", 2, "英国短毛猫");
set.add(huahua02);
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++添加花花二代后宠物猫信息++++++");
it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++通过对象查找花花信息++++++");
//在集合中查找花花的信息并输出
if (set.contains(huahua)) {
System.out.println("花花找到了!");
System.out.println(huahua);
} else {
System.out.println("花花没找到");
}
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("+++++通过名字查找花花信息++++++");
//在集合中使用名字查找花花的信息
boolean flag = false;
Cat c = null;
it = set.iterator();
while (it.hasNext()) {
c = it.next();
if (c.getName().equals("花花")) {
flag = true;
break;
}
}
if (flag == true) {
System.out.println("花花找到了!");
System.out.println(c);
} else {
System.out.println("花花没找到");
}
/**
* 第一次判断,名字等于花花的
* 第一种核心思路是只有一个,唯一,匹配到后break
* 第二种是遍历,但是和set的size无关,然后直接删除某个元素,这种更通用,可以用多元素删除。。
*/
// //第一种方法
for (Cat cat : set) {
if ("花花".equals(cat.getName())) {
set.remove(cat);
//break;
}
}
//第二种方法
// it = set.iterator();
// while (it.hasNext()) {
// Cat d = it.next();
// if ("花花".equals(d.getName())) {
// it.remove();
// // System.out.println(c);
// }
// }
/**
* 第二次判断,删除年龄小于5的
* 核心思路是先做一个小集合,再用removeall去做集合减
*/
// Set<Cat> set1=new HashSet<Cat>();
// for (Cat cat : set) {
// if (cat.getMonth()<5) {
// set1.add(cat);
// }
// }
// set.removeAll(set1);
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("删除花花二代后的数据");
for (Cat cat : set) {
System.out.println(cat);
}
//删除集合中的所有宠物猫信息
System.out.println("+++++++++++++++++++++++++++++++++");
System.out.println("删除所有宠物猫信息");
//第一种,用set.removeAll()返回的值去判断
boolean flag1 = set.removeAll(set);
// if(flag1){
// System.out.println("猫都不见了...");
for (Cat cat : set) {
System.out.println(cat);
}
// }else{
// System.out.println("猫还在");
// }
//第二种,删除后用isEmpty()方法去判断
if (set.isEmpty()) {
System.out.println("猫都不见了...");
// for (Cat cat : set) {
// System.out.println(cat);
// }
} else {
System.out.println("猫还在");
}
}
}
感谢慕课网!