黑马程序员技术交流社区
标题:
集合问题
[打印本页]
作者:
黄泉
时间:
2014-4-18 15:03
标题:
集合问题
今天复习集合!写了一个关于ArrayList去冲的代码!编译通过,就是出现了安全问题。
泛型该加的地方都加了,不知道哪里没加,请高手指点。
import java.util.*;
class Demo
{
public static void main(String[] args)
{
ArrayList<Student> al = new ArrayList<Student>();
al.add(new Student("sad1",20));
al.add(new Student("sad3",20));
al.add(new Student("sad1",20));
al.add(new Student("sad4",21));
al = quChong(al);
for(Student s : al)//高级for循环,和迭代一一样的
{
System.out.println(s.getName()+"-"+s.getAge());
}
}
public static ArrayList<Student> quChong(ArrayList<Student> al)
{
ArrayList<Student> newAl = new ArrayList<Student>();
for(Iterator<Student> it = al.iterator() ; it.hasNext();)
{
Student s = it.next();
if(!(newAl.contains(s)))
{
newAl.add(s);
}
}
return newAl;
}
}
class Student
{
private String name;
private int age;
Student(String name ,int age)
{
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new RuntimeException("数据类型错误");
Student s = (Student)obj;
return s.name.equals(this.name) && s.age == this.age;
}
}
复制代码
作者:
杨庆雷
时间:
2014-4-18 15:22
在我这 没有安全问题啊
作者:
SyouRai_Tsk
时间:
2014-4-18 15:32
此代码没有安全隐患.
作者:
闯天涯
时间:
2014-4-18 21:51
我觉得你的安全隐患处在equals的重写上,
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (age != other.age)
return false;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
这样子写就可以减少比较方面的安全隐患.个人见解不一定完全正确
作者:
向日葵的曙光
时间:
2014-4-19 01:00
public static ArrayList<Student> quChong(ArrayList<Student> al)
{
ArrayList<Student> newAl = new ArrayList<Student>();
for(Iterator<Student> it = al.iterator() ; it.hasNext();)
{
Student s = it.next();
if(!(newAl.contains(s)))
{
newAl.add(s);
}
}
return newAl;
}
这个程序中的这条语句有问题 Student s = it.next();
it.next();返回的是一个Object类型,而你这传的是Student类型,所以类型需要将Object类型转换成Student类型
代码如下:Student s = (Student)it.next();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2