java - 将我的对象返回到 HashSet 中

标签 java collections

我几乎完全失明了,我正在努力学习Java。我告诉你这些是因为由于我的残疾,我很难很好地理解概念。

我的问题: 在这个特定的类中,我返回一个对象,我希望将其存储在某个位置以便稍后调用。我不熟悉Collections,但我相信(我认为?)HashSet是我想在这里实现的Set类型。我是否能够做到这一点,并在创建后从不同的类中调用该对象集合?

我对 Java 很陌生,所以我不太确定我是否有效地解释了我的问题。请随时要求澄清!

重要提示:我不允许 airCode 出现任何重复,HashSet 会以某种方式处理这个问题吗?

public class A8AirlineAircraftData {


private String airName; //these are all showing a warning saying 'Field ____ can be final'
private String airCode;
private String airCraft;
private int firstClass;
private int busiClass;
private int econClass;
//public String toStringAirLine(){return "airname is:" + airName + ", aircode is: "+airCode;}


public A8AirlineAircraftData(String airName, String airCode, String airCraft, int firstClass, int busiClass, int econClass) {
    this.airName = airName;
    this.airCode = airCode;
    this.airCraft = airCraft;
    this.firstClass = firstClass;
    this.busiClass = busiClass;
    this.econClass = econClass;
} 

public static A8AirlineAircraftData AddAirline(Scanner sc) {
    sc.nextLine();
    System.out.println("Please enter the Airline name:");
    String airName = sc.nextLine();

    System.out.println("Please enter the Airline code:");
    String airCode = sc.nextLine();
    System.out.println("Please enter the Delta Aircraft:");
    String airCraft = sc.nextLine();
    System.out.println("Please enter the first class seat capacity:");
    int firstClass = sc.nextInt();
    System.out.println("Please enter the business class seat capacity:");
    int busiClass = sc.nextInt();
    System.out.println("Please enter the economy class seat capacity:");
    int econClass = sc.nextInt();
    System.out.println("Airline name: " + airName);
    System.out.println("Airline code: " + airCode);
    System.out.println("Delta Aircraft: " + airCraft);
    //Splitting the first word from the rest of the string
    String arr[] = airCraft.split(" ", 2);
    String firstWord = arr[0];
    System.out.println(firstWord + " first class seat capacity: " + firstClass);
    System.out.println(firstWord + " business class seat capacity: " + busiClass);
    System.out.println(firstWord + " economy class seat capacity: " + econClass);
    //Airline object
    A8AirlineAircraftData airline = new A8AirlineAircraftData(airName, airCode, airCraft, firstClass, busiClass, econClass);
    System.out.println(airName + " successfully added. Press Enter to continue.");

    sc.nextLine();
    sc.nextLine();//Press Enter to continue 
    return airline;

}   
}

感谢您提供的任何指导。再次,如果我不清楚或者我提交的内容在语法上有任何错误,我很抱歉。我尽量简洁!

我现在将显示更改 编辑:

public class A8AirlineAircraftData {

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((airCode == null) ? 0 : airCode.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (!(obj instanceof A8AirlineAircraftData)) {
        return false;
    }
    A8AirlineAircraftData other = (A8AirlineAircraftData) obj;
    return Objects.equals(airCode, other.airCode);
}

private String airName; //these are all showing a warning saying 'Field ____ can be final'
private String airCode;
private String airCraft;
private int firstClass;
private int busiClass;
private int econClass;
//public String toStringAirLine(){return "airname is:" + airName + ", aircode is: "+airCode;}

public A8AirlineAircraftData(String airName, String airCode, String airCraft, int firstClass, int busiClass, int econClass) {
    this.airName = airName;
    this.airCode = airCode;
    this.airCraft = airCraft;
    this.firstClass = firstClass;
    this.busiClass = busiClass;
    this.econClass = econClass;
}

public static A8AirlineAircraftData AddAirline(Scanner sc) {
    sc.nextLine();
    System.out.println("Please enter the Airline name:");
    String airName = sc.nextLine();

    System.out.println("Please enter the Airline code:");
    String airCode = sc.nextLine();
    System.out.println("Please enter the Delta Aircraft:");
    String airCraft = sc.nextLine();
    System.out.println("Please enter the first class seat capacity:");
    int firstClass = sc.nextInt();
    System.out.println("Please enter the business class seat capacity:");
    int busiClass = sc.nextInt();
    System.out.println("Please enter the economy class seat capacity:");
    int econClass = sc.nextInt();
    System.out.println("Airline name: " + airName);
    System.out.println("Airline code: " + airCode);
    System.out.println("Delta Aircraft: " + airCraft);
    //Splitting the first word from the rest of the string
    String arr[] = airCraft.split(" ", 2);
    String firstWord = arr[0];
    System.out.println(firstWord + " first class seat capacity: " + firstClass);
    System.out.println(firstWord + " business class seat capacity: " + busiClass);
    System.out.println(firstWord + " economy class seat capacity: " + econClass);
    //Airline object
    A8AirlineAircraftData airline = new A8AirlineAircraftData(airName, airCode, airCraft, firstClass, busiClass, econClass);
    Set<A8AirlineAircraftData> aircrafts = new HashSet<>();

    /*for (int i = 0; i < 3; i++) {
        aircrafts.add(A8AirlineAircraftData.AddAirline(sc));
    } */

    System.out.println(airName + " successfully added. Press Enter to continue.");

    sc.nextLine();
    sc.nextLine();//Press Enter to continue 
    return airline;

最佳答案

您可以调用工厂方法并将创建的对象存储在 Set 中,例如。
例如要创建 3 个元素,您可以编写:

Set<A8AirlineAircraftData> aircrafts = new HashSet<>();
for (int i=0; i<3; i++){
   aircrafts.add(A8AirlineAircraftData.AddAirline());
}

I'm not to allow any duplicates of airCode, would HashSet handle that in some way?

Set 中元素的唯一性依赖于其所包含元素的 equals()/hashCode() 方法。
您应该在 A8AirlineAircraftData 中重写它们,以依赖以唯一方式标识实例的类字段:airCode

@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((airCode == null) ? 0 : airCode.hashCode());
    return result;
}

@Override
public boolean equals(Object obj) {
    if (this == obj)
        return true;
    if (!(obj instanceof A8AirlineAircraftData))
        return false;
    A8AirlineAircraftData other = (A8AirlineAircraftData) obj;
    return Objects.equal(airCode, other.airCode);
}

关于java - 将我的对象返回到 HashSet 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47892654/

相关文章:

java - Jpa 存储库 findBy 方法签名具有多个 or 运算符?

用于将 XML 转换为语法彩色 HTML 的 Java 库

java - 在 CardLayout 中设置面板布局

java - SonarQube:创建 HTML 报告而不运行 sonar:sonar 命令

java - 类型参数的数据类型在协变和逆变中是如何确定的?

java - 为什么我的变量没有重置每个循环?

java - Collections.sort() 和通过添加到 TreeSet 中获取排序集合之间的区别?

javascript - 如何重新运行我的 Meteor 发布以刷新客户端上集合的内容?

c# - ASP.NET 在 OnPreInit 之前处理按钮单击事件

java - 如何重用使用相同支持迭代器的集合?