我是 Java 集合的新手。我有三个类,即 MyData、Initializer 和 SetBasics
我创建了一个 HashSet 和一个 TreeSet。现在的问题是 HashSet 工作正常但 TreeSet 只存储一个值。
这是我的类(class)
类 MyData
`包collectionsWorkUp.setDemos;
公共(public)类 MyData 实现 Comparable{
MyData(){
}
MyData(String n, String p, String eM, long mn, char s){
name = n;
profession = p;
email = eM;
mobileNo = mn;
sex = s;
}
private String name;
private String profession;
private String email;
private long mobileNo;
private char sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getProfession() {
return profession;
}
public void setProfession(String profession) {
this.profession = profession;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getMobileNo() {
return mobileNo;
}
public void setMobileNo(long mobileNo) {
this.mobileNo = mobileNo;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public int compareTo(MyData o) {
// TODO Auto-generated method stub
return 0;
}
} `
类初始化器
封装collectionsWorkUp.setDemos;
公共(public)类初始化器{
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("Initializing");
SetBasics operate = new SetBasics();
operate.DataInSet();
operate.printDataInSet(operate.getUsersInHash());
System.out.println("\n\nPrinting Data in Tree Set--------------------");
operate.printDataInSet(operate.getUsersInTree());
System.out.println("\n\n--------Program Terminated----------");
}
类 SetBasics
封装collectionsWorkUp.setDemos;
导入java.util.HashSet; 导入java.util.Set; 导入 java.util.TreeSet;
公共(public)类 SetBasics{
private Set<MyData> usersInHash = new HashSet<MyData>();
private Set<MyData> usersInTree = new TreeSet<MyData>();
MyData d1= new MyData(d1's data -data include name, #, profession etc check MyData Class);
MyData d2= new MyData(d2's data);
MyData d3= new MyData(d3's data);
MyData d4= new MyData(d4's data);
MyData d5= new MyData(d5's data);
MyData d6= new MyData(d6's data);
MyData d7= new MyData(d7's data);
MyData nullUser = null;
public Set<MyData> getUsersInHash() {
return usersInHash;
}
public Set<MyData> getUsersInTree() {
return usersInTree;
}
public SetBasics(){ }
public void DataInSet(){
{
System.out.println("Adding Data in HashSet");
System.out.println("Data in HashSet Before Adding Element:" + usersInHash.size());
setDataInSet(nullUser);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d7);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d6);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d5);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d4);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d3);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d2);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(d1);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
setDataInSet(null);
System.out.println("Data in HashSet After Adding Element:" + usersInHash.size());
}
{
System.out.println("Adding Data in TreeSet");
System.out.println("Users in Tree after Before Data:"+usersInTree.size());
setDataInTreeSet(d7);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
setDataInTreeSet(d6);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
setDataInTreeSet(d5);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
setDataInTreeSet(d4);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
setDataInTreeSet(d3);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
setDataInTreeSet(d2);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
setDataInTreeSet(d1);
System.out.println("Users in Tree after Adding Data:"+usersInTree.size());
printDataInSet(usersInTree);
}
}
public void setDataInSet(MyData userDetails){
System.out.println("Setting Data in HashSet");
usersInHash.add(userDetails);
}
public void setDataInTreeSet(MyData userDetails){
System.out.println("Setting Data in TreeSet");
usersInTree.add(userDetails);
}
public void printDataInSet(Set<MyData> s){
System.out.println("Printing Data");
System.out.println("Size of the Set:"+s.size());
for(MyData itorator: s){
try{
System.out.println("User Details:______");
System.out.println("Name:"+itorator.getName());
System.out.println("Mobile Number:"+itorator.getMobileNo());
System.out.println("eMail:"+itorator.getEmail());
System.out.println("Profession:"+itorator.getProfession());
System.out.println("Sex:"+itorator.getSex());
}catch(NullPointerException npe){
System.out.println(npe.getMessage());
npe.getStackTrace();
}finally{
System.out.println("EOD_____\n");
}
}
}
现在问题出在 TreeSet 中,我只能看到 d7 的数据,没有其他任何东西被添加到 TreeSet
最佳答案
TreeSet
将使用您的 MyData.compareTo
实现来比较元素。但是您还没有实现它 - 它总是返回 0
。因此,就 TreeSet
而言,所有 MyData
对象都是相等的。查看compareTo
javadoc 获取更多信息。
请注意 HashSet
可以正常工作,因为它使用了 hashCode
和 equals
.与 compareTo
不同,它们在 Object
类中有默认实现,它们基于引用相等性。我建议您重写这两个方法并将它们基于 MyData
字段。实际上,两个具有相同数据的不同 MyData
对象不会被视为相等。 (大多数 IDE 可以根据指定字段自动生成良好的 hashCode
和 equals
覆盖。)
关于java - TreeSet 只加一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22086153/