第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

避免對象中的參數(shù)參數(shù)具有相同的值

避免對象中的參數(shù)參數(shù)具有相同的值

動漫人物 2023-08-16 17:24:07
假設(shè)我像這樣用Java創(chuàng)建一個對象Student std1 = new Student("Tom", "male");我需要防止另一個對象(例如:std2、std3 等)與 std1 具有相同的值。怎么做?[編輯]我想要的例子是:不允許: Student std2 = new Student("Tom", "male");允許: Student std2 = new Student("Not Tom", "male");或Student std2 = new Student("Tom", "female");或Student std2 = new Student("John", "male");等謝謝
查看完整描述

4 回答

?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個贊

您可以通過添加串聯(lián)的姓名、性別來創(chuàng)建靜態(tài)字符串哈希集。


class YourClass {

   public static Set<String> studentSet = new HashSet<>();


   public static void addStudent(String name, String gender) {

     YourClass.studentSet.add(name + "," + gender);

   }


   public static Boolean studentExists(String name, String gender) {

     return YourClass.studentSet.constains(name + "," + gender);

}

因此,您的 HashSet 中的數(shù)據(jù)將類似于 Tom,male 、Tom,female、John,male 。


class Student {

...


public Student(String name, String gender) {

    this.name = name;

    this.gender = gender;

    YourClass.addStudent(name, gender);

  }

}

在創(chuàng)建 Student 實(shí)例時,您可以檢查 HashSet 中是否沒有 Name、Gender,然后實(shí)例化和對象。


if(!YourClass.studentExists(name, gender)) {

    Student student = new Student(name, gender);

}

我希望這能解決你的問題


查看完整回答
反對 回復(fù) 2023-08-16
?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個贊

您可以創(chuàng)建一個類來控制對象的創(chuàng)建 - 基本上使用享元模式。


步驟 1. 將 Student 包的構(gòu)造函數(shù)設(shè)置為私有


public class Student {

    Student(String name, String gender) {

    ...

步驟2.在Student中實(shí)現(xiàn)equals方法


   public boolean equals (Object other) {

       if (!(other instanceof Student)) return false;

       Student otherStudent = (Student) other;

       return Objects.equals(otherStudent.getName(), this.getName()) && Objects.equals(otherStudent.getGender(), this.getGender());

   }

步驟 3. 在同一包中實(shí)現(xiàn) Student 對象池


public class StudentPool {

    private List<Student> students = new ArrayList<>();


    public Student getOrCreate(String name, String gender) {

        Student student = new Student(name, gender);

        return students.stream()

                .filter(s -> Objects.equals(s, student))

                .findFirst()

                .orElseGet(() -> {

                    students.add(student);

                    return student;

                });

    }


    public List<Student> get(String name) {

        return students.stream()

                .filter(student -> Objects.equals(student.getName(), name))

                .collect(Collectors.toList());

    }

}


查看完整回答
反對 回復(fù) 2023-08-16
?
婷婷同學(xué)_

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個贊

假設(shè)您所說的“值”指的是學(xué)生的姓名,我建議您編寫一個小函數(shù),如果該姓名已被占用,該函數(shù)將返回 true。為此,您可以將所有“學(xué)生”存儲在 ArrayList 中:


ArrayList<Student> students = new ArrayList<Student>();

現(xiàn)在您可以將學(xué)生添加到此 ArrayList 中,如下所示:


private boolean nameIsAlreadyTaken(ArrayList<Student> students, String newName){

    for (int i = 0; i < student.size(); i++){

        if(students.get(i).getName().equals(newName)){

            return true;

        }

    }

    return false;

}

(您需要在學(xué)生類中定義一個 getName() 函數(shù)才能使其工作。)


那么你可以這樣做:


字符串 newName = "邁克爾"; String newGender = "男";


if (!nameIsAlreadyTaken(students, newName)){

students.add(new Student(newName, newGender));

} else{

    //something you want to to if the name is already taken

}

您可以在不將 Students-ArrayList 傳遞給函數(shù)的情況下執(zhí)行此操作,但這取決于您。


查看完整回答
反對 回復(fù) 2023-08-16
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個贊

我想說你需要重寫Student和equals方法hashCode,然后檢查構(gòu)造函數(shù)是否存在這樣的學(xué)生。關(guān)于這一點(diǎn)的好答案:鏈接。


import java.util.*;


public class Student {

    private static final Set<Student> REGISTERED_STUDENTS = new HashSet<>();


    private String name;

    private String gender;


    public static Collection<Student> getRegisteredStudents() {

        return Collections.unmodifiableCollection(REGISTERED_STUDENTS);

    }


    public Student(final String name, final String gender) {

        this.name = name;

        this.gender = gender;


        if (REGISTERED_STUDENTS.contains(this))

            throw DuplicateStudentException();


        REGISTERED_STUDENTS.add(this);

    }


    @Override

    public int hashCode() {

        return Objects.hash(name, gender);

    }


    @Override

    public boolean equals(final Object o) {

        if (this == o) return true;

        if (!(o instanceof Student)) return false;

        final Student student = (Student) o;

        return Objects.equals(name, student.name) && Objects.equals(gender, student.gender);

    }

}

請注意,這個示例不是線程安全的,并且使用了在構(gòu)造函數(shù)中拋出異常的有爭議的解決方案。您可能需要一個工廠方法和ConcurrentSkipListSet/或另一個線程安全集合,如下所示:


class Student {

    private static final Set<Student> REGISTERED_STUDENTS = new ConcurrentSkipListSet<>(Comparator.comparing(Student::getName).thenComparing(Student::getGender));


    private String name;

    private String gender;


    public static Set<Student> getRegisteredStudents() {

        return Collections.unmodifiableSet(REGISTERED_STUDENTS);

    }


    public static void addStudent(final String name, final String gender) {

        Student probablyExists = new Student(name, gender);

        REGISTERED_STUDENTS.add(probablyExists);

    }


    private Student(final String name, final String gender) {

        this.name = name;

        this.gender = gender;

    }


    public String getName() {

        return name;

    }


    public String getGender() {

        return gender;

    }


    @Override

    public int hashCode() {

        return Objects.hash(name, gender);

    }


    @Override

    public boolean equals(final Object o) {

        if (this == o) return true;

        if (!(o instanceof Student)) return false;

        final Student student = (Student) o;

        return Objects.equals(name, student.name) && Objects.equals(gender, student.gender);

    }

}


查看完整回答
反對 回復(fù) 2023-08-16
  • 4 回答
  • 0 關(guān)注
  • 221 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號