set集合中元素的修改
set集合区别于list集合,因为set没有下标,且无序,因此我们对set集合中的元素进行修改时,比list集合更加复杂。
大概思路
set集合没有下标,因此修改之前必须要先获取到对象,set集合获取对象使用增强for循环和迭代器实现,取出对象后再根据条件对需要修改的数据进行修改。
具体实现1——用增强for循环
存储的元素对象类
新建一个Animal的类,用于测试这个方法,注意需要去实现Comparable接口,并重写CompareTo方法。
public class Animal implements Comparable{
private String name;
private int age;
public Animal() {
}
public Animal(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Animal{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Animal animal = (Animal) o;
return age == animal.age &&
Objects.equals(name, animal.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
@Override
public int compareTo(Object object) {
if (object instanceof Animal){
Animal o=(Animal) object;
if (this.name.equals(o.getName())){
return this.age-o.getAge();
}
else {
return this.name.compareTo(o.getName());
}
}else {
throw new RuntimeException("传入的数据类型不一致");
}
}
}
测试程序
public class TreeSetUpdate {
public static void main(String[] args) {
// 创建对象
Animal animal1=new Animal("dog",13);
Animal animal2=new Animal("cat",9);
Animal animal3=new Animal("bird",6);
// 创建集合
TreeSet<Animal> animalTreeSet=new TreeSet<>();
// 往集合中添加数据
animalTreeSet.add(animal1);
animalTreeSet.add(animal2);
animalTreeSet.add(animal3);
// 此处我们将name="cat"的对象名字改为"Dog"
System.out.println("修改之前的集合元素");
for (Animal animal : animalTreeSet) {
System.out.println(animal);
}
// 使用增强for循环遍历获取对象,并对满足条件的对象进行操作
System.out.println("-----------------------------");
for (Animal animal : animalTreeSet) {
// 对满足条件的对象进行修改
if (animal.getName().equals("dog")){
animal.setName("Dog");
}
// 输出修改后的集合元素
System.out.println(animal);
}
}
}
运行结果
修改之前的集合元素
Animal{name=‘bird’, age=6}
Animal{name=‘cat’, age=9}
Animal{name=‘dog’, age=13}
修改之后的集合元素
Animal{name=‘bird’, age=6}
Animal{name=‘cat’, age=9}
Animal{name=‘Dog’, age=13}
分析
可以看见,成功将名字修改
具体实现2——用迭代器循环
其他部分都一样,就是修改部分不同,因此在此就提供迭代器的代码
迭代器代码
// 使用增强for循环遍历获取对象,并对满足条件的对象进行操作
Iterator<Animal> animalIterator= animalTreeSet.iterator();
while (animalIterator.hasNext()){
Animal animalTemp=animalIterator.next();
if (animalTemp.getName().equals("dog")){
animalTemp.setName("Dog");
}
}
System.out.println("修改之后的数据");
for (Animal animal : animalTreeSet) {
System.out.println(animal);
}
}
运行结果
修改之前的集合元素
Animal{name=‘bird’, age=6}
Animal{name=‘cat’, age=9}
Animal{name=‘dog’, age=13}
修改之后的数据
Animal{name=‘bird’, age=6}
Animal{name=‘cat’, age=9}
Animal{name=‘Dog’, age=13}
结果分析
可以看见,成功修改了数据