import java.io.Serializable;//文件级别
public class FileLevel implements Serializable { /**
*
*/
private static final long serialVersionUID = 1L;
//文件名称
private String filename;
//文件级别
private String level;
public FileLevel(){};
public FileLevel(String filename,String level){
this.filename=filename;
this.level=level;
}
public String toString(){
return "文件:"+filename+"<-级别->"+level;
} public String getFilename() {
return filename;
} public void setFilename(String filename) {
this.filename = filename;
} public String getLevel() {
return level;
} public void setLevel(String level) {
this.level = level;
}
@Override
public boolean equals(Object obj) {
if(obj==null)return false;
if(obj instanceof FileLevel){
FileLevel fl = (FileLevel)obj;
if(fl.filename == this.filename&&fl.level == this.level){
return true;
}
}
return false;
}
}
测试代码如下:import java.util.ArrayList;
import java.util.List;public class testFileLevel {
public static void main(String[] args) {
List l = new ArrayList();
for (int i = 0; i <9; i++) {
FileLevel f = new FileLevel("C:\\TEST\\WM.TXT","t"+i);
l.add(f);
}
FileLevel f2 = new FileLevel("C:\\TEST\\WM.TXT","t5");
int k = l.indexOf(f2);
System.out.println(k);//返回-1
System.out.println(l.contains(f2));//放回FALSE
}
}
结果:
System.out.println(k);//返回-1
System.out.println(l.contains(f2));//放回FALSE
为什么会是-1?
如果我想得到结果为1,TRUE,改怎么修改代码?
public class FileLevel implements Serializable { /**
*
*/
private static final long serialVersionUID = 1L;
//文件名称
private String filename;
//文件级别
private String level;
public FileLevel(){};
public FileLevel(String filename,String level){
this.filename=filename;
this.level=level;
}
public String toString(){
return "文件:"+filename+"<-级别->"+level;
} public String getFilename() {
return filename;
} public void setFilename(String filename) {
this.filename = filename;
} public String getLevel() {
return level;
} public void setLevel(String level) {
this.level = level;
}
@Override
public boolean equals(Object obj) {
if(obj==null)return false;
if(obj instanceof FileLevel){
FileLevel fl = (FileLevel)obj;
if(fl.filename == this.filename&&fl.level == this.level){
return true;
}
}
return false;
}
}
测试代码如下:import java.util.ArrayList;
import java.util.List;public class testFileLevel {
public static void main(String[] args) {
List l = new ArrayList();
for (int i = 0; i <9; i++) {
FileLevel f = new FileLevel("C:\\TEST\\WM.TXT","t"+i);
l.add(f);
}
FileLevel f2 = new FileLevel("C:\\TEST\\WM.TXT","t5");
int k = l.indexOf(f2);
System.out.println(k);//返回-1
System.out.println(l.contains(f2));//放回FALSE
}
}
结果:
System.out.println(k);//返回-1
System.out.println(l.contains(f2));//放回FALSE
为什么会是-1?
如果我想得到结果为1,TRUE,改怎么修改代码?
解决方案 »
- 请问 提取文本框中的输入数字到自己的算法中怎么总有错误
- 类似windows的文件路径选择的对话框在java如何实现
- 关于windows的问题.(JAVA如何关闭一个windows进程,如何修改windows设置)
- 祝大家圣诞快乐!!帮我看看这道题吧
- 我快要疯了!!一个最简单的JAVA程序居然有问题!?
- 请问:我有一个已编译好的class文件,运行它最少需要那些文件?谢谢!
- 小弟下了JDK1.4,安装好了,怎样才能设置执行路径阿,小弟的环境的是WINME
- 菜菜请教VJ6下的两个初级问题(有关button)。有分哦
- 一个关于内部类继承时候的初始化问题
- 能有高手诠释一下 SUNONE 吗?
- 高手看看了
- 怎么用JavaSpeech生成声音?
ArrayList中可以怎么解决这个问题?
public boolean equals(Object obj) {
if (obj == null) {
return false;
}
if (obj instanceof FileLevel) {
FileLevel fl = (FileLevel) obj;
if (fl.filename.equals(this.filename) && fl.level.equals(this.level)) {
return true;
}
}
return false;
}
你要实现hashcode的。不是这个问题吧,ArrayList不使用hashCode
楼上正解,我没看仔细。:-)
import java.util.List;public class testFileLevel {
public static void main(String[] args) {
List l = new ArrayList();
for (int i = 0; i <9; i++) {
FileLevel f = new FileLevel("C:\\TEST\\WM.TXT","t"+i);
System.out.println(i+"--->"+f.hashCode());
l.add(f);
}
System.out.println("-----------------------------------");
FileLevel f2 = new FileLevel("C:\\TEST\\WM.TXT","t5");
System.out.println("5"+"--->"+f2.hashCode());
int k = l.indexOf(f2);
System.out.println(k);
System.out.println(l.contains(f2));
}
}
测试结果:
0--->3657
1--->3658
2--->3659
3--->3660
4--->3661
5--->3662
6--->3663
7--->3664
8--->3665
-----------------------------------
5--->3662
-1
false
hashcode的值一样
不过一般情况下hashcode和equals都是要成对实现的(好习惯)。