Java 为什么我的集合没有添加所有元素?

Java 为什么我的集合没有添加所有元素?,java,set,Java,Set,我的文本文件中没有重复项,但当我打印出集合的大小时,它明显小于文本文件中的实际元素数……有没有关于如何修复此问题的想法 这是主要的方法 import java.util.*; import java.util.Collection; import java.io.*; import java.util.Scanner; import java.util.Set; import java.util.TreeSet; public class Schedule { public static v

我的文本文件中没有重复项,但当我打印出集合的大小时,它明显小于文本文件中的实际元素数……有没有关于如何修复此问题的想法

这是主要的方法

import java.util.*;
import java.util.Collection;
import java.io.*;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;
public class Schedule
{
  public static void main (String args[])throws IOException
  {
    Scanner sc=new Scanner(new File("Footballteams.txt"));
    ArrayList<Football>y=new ArrayList<Football>();

    for(int i=0;i<114;i++)
    {
        String team=sc.nextLine();
        Integer points=0;
        String[]a=team.split("\\|",9);
        String name=a[0];
        int wins=Integer.parseInt(a[1]);
        points+=wins;
        int finalRecord14=Integer.parseInt(a[2]);
        int finalRecord13=Integer.parseInt(a[3]);
        int finalRecord12=Integer.parseInt(a[4]);
        int finalRecord11=Integer.parseInt(a[5]);
        int bowlVictories=Integer.parseInt(a[6]);
        points=points+(bowlVictories*10);
        int bowlLosses=Integer.parseInt(a[7]);
        points=points-(bowlLosses*5);
        int ConferenceChamp=Integer.parseInt(a[8]);
        points=points+(ConferenceChamp*10);
        Football x=new Football(name,wins,finalRecord14,finalRecord13,finalRecord12,finalRecord11,bowlVictories,bowlLosses,ConferenceChamp,points);
        teams.add(x);
        y.add(x);

    }
    System.out.println(teams.size());
    System.out.println(y.size());
这是我从中读取的文件(我无法格式化它,但实际上每行1个团队)

这是足球课

 public int compareTo(Football o)
 {

    return getPoints().compareTo(o.getPoints());
 }'
public class Football implements Comparable<Football>
{
    public String name;
    public int wins,finalRecord14,finalRecord13,finalRecord12,finalRecord11,bowlVictories,bowlLosses,ConferenceChamps;
    public Integer points;

    public Football(String name,int wins,int finalRecord14,int finalRecord13,int finalRecord12,int finalRecord11,int bowlVictories,int bowlLosses,int ConferenceChamp,Integer points)
    {
           this.name=name;
           this.wins=wins;
           this.finalRecord14=finalRecord14;
           this.finalRecord13=finalRecord13;
           this.finalRecord12=finalRecord12;
           this.finalRecord11=finalRecord11;
           this.bowlVictories=bowlVictories;
           this.bowlLosses=bowlLosses;
           this.ConferenceChamps=ConferenceChamp;
           this.points=points;
    }
    public String getName()
    {
        return name;
    }
    public int getWins()
    {
        return wins;
    }
    public int getfinalRecord14()
    {
        return finalRecord14;
    }
    public int getfinalRecord13()
    {
        return finalRecord13;
    }
    public int getfinalRecord12()
    {
        return finalRecord12;
    }
    public int getfinalRecord11()
    {
        return finalRecord11;
    }
    public int getBowlVictories()
    {
        return bowlVictories;
    }
    public int getBowlLosses()
    {
        return bowlLosses;
    }
    public int getConferenceChamps()
    {
        return ConferenceChamps;
    }
    public Integer getPoints()
    {
        return points;
    }
    public int compareTo(Football o)
    {


        return getPoints().compareTo(o.getPoints());
    }
}
public class Football
{
公共字符串名称;
公众积分赢家、决赛记录14、决赛记录13、决赛记录12、决赛记录11、保龄球赢家、保龄球输家、会议冠军;
公共整数点;
公共足球(字符串名称、整数获胜、整数得分、整数得分、整数得分、整数得分)
{
this.name=name;
这个。赢=赢;
this.finalRecord14=finalRecord14;
this.finalRecord13=finalRecord13;
this.finalRecord12=finalRecord12;
this.finalRecord11=finalRecord11;
这个。保龄球胜利=保龄球胜利;
这个。保龄球损失=保龄球损失;
这个。ConferenceChamps=ConferenceChamps;
这个。点=点;
}
公共字符串getName()
{
返回名称;
}
public int getWins()
{
回归胜利;
}
public int getfinalRecord14()
{
返回最终报告14;
}
public int getfinalRecord13()
{
返回最终报告13;
}
public int getfinalRecord12()
{
返回最终报告12;
}
public int getfinalRecord11()
{
返回最终报告11;
}
公众胜利
{
重获胜利;
}
公共int GETBOWLLOSS()
{
收益损失;
}
公共int getConferenceChamps()
{
返回会议冠军;
}
公共整数getPoints()
{
返回点;
}
公共国际比较(足球o)
{
返回getPoints().compareTo(o.getPoints());
}
}

就java中的
哈希集而言,如果调用
object1.equals(object2)
,并且该方法返回true,则这两个对象是相同的。这两个对象之间是否有一百万个不同的字段并不重要,重要的是如何实现
equals
方法。我们已经知道,
Set
s不能有重复的元素

如果使用的是
TreeSet
,则还必须实现与
equals
方法一致的
compareTo
方法,即当两个对象实际上完全相同时,
compareTo
返回
0

Java不会为您带来任何魔力,比如对两个对象中的所有字节进行散列,或者序列化并比较它们(并非所有对象都是可序列化的!),或者诸如此类的事情。当两个对象实际上完全相同时,由您提供标准


由于您希望在您的集合中拥有唯一的足球队,因此您的
equals
方法应包括球队名称等的比较,而不仅仅是分数,因为多个球队可能拥有相同的分数。

我们必须查看
getPoints
方法,您的集合可能小于输入行数,因为对于
getPoints
多个条目具有相同的输出,getPoints方法仅返回点数@qwwqwwq@SarahSmith那么,如果两个足球比赛的分数相同,那么它们是相等的?这不是导致了很多重复吗?@qwwqwwq没有。重要的是
equals
hashcode
@Patricia Shanahan,那么我该如何解决这个问题呢?请再次阅读-它使用
equals
而不是
来比较
@导入中调用的alfasin
TreeSet
,是一个例外:@PatriciaShanahan这就是我要求完整代码的原因…:)
public class Football implements Comparable<Football>
{
    public String name;
    public int wins,finalRecord14,finalRecord13,finalRecord12,finalRecord11,bowlVictories,bowlLosses,ConferenceChamps;
    public Integer points;

    public Football(String name,int wins,int finalRecord14,int finalRecord13,int finalRecord12,int finalRecord11,int bowlVictories,int bowlLosses,int ConferenceChamp,Integer points)
    {
           this.name=name;
           this.wins=wins;
           this.finalRecord14=finalRecord14;
           this.finalRecord13=finalRecord13;
           this.finalRecord12=finalRecord12;
           this.finalRecord11=finalRecord11;
           this.bowlVictories=bowlVictories;
           this.bowlLosses=bowlLosses;
           this.ConferenceChamps=ConferenceChamp;
           this.points=points;
    }
    public String getName()
    {
        return name;
    }
    public int getWins()
    {
        return wins;
    }
    public int getfinalRecord14()
    {
        return finalRecord14;
    }
    public int getfinalRecord13()
    {
        return finalRecord13;
    }
    public int getfinalRecord12()
    {
        return finalRecord12;
    }
    public int getfinalRecord11()
    {
        return finalRecord11;
    }
    public int getBowlVictories()
    {
        return bowlVictories;
    }
    public int getBowlLosses()
    {
        return bowlLosses;
    }
    public int getConferenceChamps()
    {
        return ConferenceChamps;
    }
    public Integer getPoints()
    {
        return points;
    }
    public int compareTo(Football o)
    {


        return getPoints().compareTo(o.getPoints());
    }
}