黑马程序员技术交流社区
标题:
Collections工具类的replaceAll()方法替换问题!
[打印本页]
作者:
中关村阿旺
时间:
2013-10-17 15:37
标题:
Collections工具类的replaceAll()方法替换问题!
本帖最后由 中关村阿旺 于 2013-10-19 20:44 编辑
package demo3;
import java.util.*;
class Student implements Comparable<Student>
{
public int compareTo(Student s)
{
int num=name.compareTo(s.name);
if(num==0)
return new Integer(id).compareTo(new Integer(s.id));
return num;
}
private String id;
private String name;
public String getId()
{
return id;
}
public String getName()
{
return name;
}
Student(String id,String name)
{
this.id=id;
this.name=name;
}
public String toString()
{
return id+"→→→"+name;
}
}
class NewComparator implements Comparator<Student>
{
public int compare(Student s1,Student s2)
{
int num=new Integer(s1.getId()).compareTo(new Integer(s2.getId()));
if(num==0)
return s1.getName().compareTo(s2.getName());
return num;
}
}
class CollectionsDemo3
{
public static void print(List<Student> list)
{
for (Iterator<Student> it=list.iterator();it.hasNext() ; )
{
Student s=it.next();
System.out.println(s);
}
System.out.println("========================================");
}
public static void main(String[] args)
{
List<Student> list=new ArrayList<Student>();
list.add(new Student("02","lisi"));
list.add(new Student("03","wangwu"));
list.add(new Student("01","zhangsan"));
list.add(new Student("03","wangwu"));
list.add(new Student("04","zhaoliu"));
list.add(new Student("05","zhangsan"));
System.out.println("原集合是:");
print(list);
//使用另一个值替换列表中出现的所有某一指定值。
Student s1=new Student("03","wangwu");
Student s2=new Student("06","tianqi");
boolean replace=Collections.replaceAll(list,s1,s2);
System.out.println("是否成功替换:"+replace);
System.out.println("现集合是:");
print(list);
System.out.println("*************************************");
List<String> list2=new ArrayList<String>();
list2.add("abcd");
list2.add("ahter");
list2.add("sfqag");
list2.add("adgw");
list2.add("abcd");
list2.add("gfjf");
System.out.println("原集合是:"+list2);
Collections.replaceAll(list2,"abcd","haha");
System.out.println("替换后的集合是:"+list2);
}
}
复制代码
为什么String类型的数据可以替换成功,而我写的Student类就是不行呢?!!
有问题.png
(69.64 KB, 下载次数: 45)
下载附件
2013-10-17 15:34 上传
为什么就是替换不了呢?
作者:
The_Wizard
时间:
2013-10-17 23:01
你的Student类没有覆盖 equals方法啊,其实集合中并没有你后边新建的s1。添加一个 equals方法就行了,最好同时添加 hashCode方法。
作者:
周学彬
时间:
2013-10-18 20:55
List集合判断元素是否相同,或者删除指定的元素,依据的是元素的equals方法。如果向List容器中添加类对象,判断集合内的元素是否相同,即判断传入容器的对象用equals方法比较是否相同。如果用默认的equals方法,则判断对象创建时的哈希值。如果要按照指定的判断方式,需要重写类内的equals方法。所以你只需要复写一个equals方法就行啦。
我给你添加一个:
这样就能得出正确的结果啦。
import java.util.*;
class Student implements Comparable<Student>
{
public int compareTo(Student s)
{
int num=name.compareTo(s.name);
if(num==0)
return new Integer(id).compareTo(new Integer(s.id));
return num;
}
private String id;
private String name;
public String getId()
{
return id;
}
public String getName()
{
return name;
}
Student(String id,String name)
{
this.id=id;
this.name=name;
}
public String toString()
{
return id+"→→→"+name;
}
public boolean equals(Object obj) {
if (!(obj instanceof Student))
return false;
Student p = (Student) obj;
if ((this.id == p.id) && (this.name.equals(p.name)))
return true;
return false;
}
}
class NewComparator implements Comparator<Student>
{
public int compare(Student s1,Student s2)
{
int num=new Integer(s1.getId()).compareTo(new Integer(s2.getId()));
if(num==0)
return s1.getName().compareTo(s2.getName());
return num;
}
}
class CollectionsDemo3
{
public static void print(List<Student> list)
{
for (Iterator<Student> it=list.iterator();it.hasNext() ; )
{
Student s=it.next();
System.out.println(s);
}
System.out.println("========================================");
}
public static void main(String[] args)
{
List<Student> list=new ArrayList<Student>();
list.add(new Student("02","lisi"));
list.add(new Student("03","wangwu"));
list.add(new Student("01","zhangsan"));
list.add(new Student("03","wangwu"));
list.add(new Student("04","zhaoliu"));
list.add(new Student("05","zhangsan"));
System.out.println("原集合是:");
print(list);
//使用另一个值替换列表中出现的所有某一指定值。
Student s1=new Student("03","wangwu");
Student s2=new Student("06","tianqi");
boolean replace=Collections.replaceAll(list,s1,s2);
System.out.println("是否成功替换:"+replace);
System.out.println("现集合是:");
print(list);
System.out.println("*************************************");
List<String> list2=new ArrayList<String>();
list2.add("abcd");
list2.add("ahter");
list2.add("sfqag");
list2.add("adgw");
list2.add("abcd");
list2.add("gfjf");
System.out.println("原集合是:"+list2);
Collections.replaceAll(list2,"abcd","haha");
System.out.println("替换后的集合是:"+list2);
}
}
复制代码
作者:
中关村阿旺
时间:
2013-10-19 20:00
谢谢你的回复。{:soso_e113:}
作者:
Hi-UU
时间:
2019-8-17 22:38
记住一点:遇到集合,元素为自定义类型,不管用不用的到,重写equals和HashCode()方法就是了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2