java 同一对象反复存入list
时间: 2023-08-14 11:07:34 浏览: 97
在Java中,同一个对象反复存入同一个List是完全合法的,因为List存储的是对象的引用而不是对象本身。每次将对象引用添加到List中,List中都会记录一次引用,而不是创建一个新的对象。
下面是一个示例代码,将同一个对象反复添加到List中:
```java
List<String> myList = new ArrayList<>();
String myString = "Hello World";
myList.add(myString);
myList.add(myString);
myList.add(myString);
```
在这个例子中,List myList中存储了三个对同一个String对象"Hello World"的引用。如果您更改了myString对象的内容,则List中的每个引用都将指向相同的更改后的对象。
但是,需要注意的是,如果您在List中存储可变对象,那么当您更改对象的状态时,List中的每个引用都将反映这些更改。这可能会导致一些不期望的行为,特别是在多线程环境中。如果您需要存储可变对象,建议使用不可变对象或使用同步机制来确保线程安全。
相关问题
java 同一对象调整id反复存入list
在Java中,如果您有一个对象,并且您想要多次将其添加到List中,但是每次添加之前都需要更改其ID,则需要非常小心。因为List存储的是对象的引用,而不是对象本身,因此如果您更改对象的ID,则List中的每个引用都将反映这些更改。这可能会导致一些不期望的行为。
如果您需要将同一对象多次添加到List中,并且每次添加之前都需要更改其ID,则应该创建一个新对象,并将其添加到List中。例如,您可以创建一个工厂方法来创建新对象,如下所示:
```java
public class MyObjectFactory {
private int nextId = 0;
public MyObject create() {
MyObject obj = new MyObject(nextId++);
return obj;
}
}
```
然后,您可以使用此工厂方法创建多个对象,并将每个对象添加到List中:
```java
List<MyObject> myList = new ArrayList<>();
MyObjectFactory factory = new MyObjectFactory();
myList.add(factory.create());
myList.add(factory.create());
myList.add(factory.create());
```
在这个例子中,每次调用工厂方法都会创建一个新的MyObject对象,并为其分配一个唯一的ID。然后,将新对象的引用添加到List中,而不是修改现有对象的ID。这样,List中每个对象的ID都将是唯一的,并且不会影响其他对象的ID。
编写一个java程序,实现一下功能,要求 设计一个学生student类,包含学号、姓名、出生日期、性别等字段 从input.txt(从附件下载)中读取其中的学生信息,并存入学生集合list中 对学生集合list进行排序,按照出生日期从早到晚排序(即年龄由大到小) 将排序后的学生集合list输出到output.txt文件中,输出格式同input.txt:一行一个学生,依次输出学号、姓名、出生日期、性别并用空格隔开
好的,根据您的要求,我为您编写了以下 Java 程序。请注意,代码中的注释会帮助您理解程序的工作原理。
```java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;
class Student {
private int id; // 学号
private String name; // 姓名
private int birthYear; // 出生年份
private int birthMonth; // 出生月份
private int birthDay; // 出生日期
private String gender; // 性别
public Student(int id, String name, int birthYear, int birthMonth, int birthDay, String gender) {
this.id = id;
this.name = name;
this.birthYear = birthYear;
this.birthMonth = birthMonth;
this.birthDay = birthDay;
this.gender = gender;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getBirthYear() {
return birthYear;
}
public int getBirthMonth() {
return birthMonth;
}
public int getBirthDay() {
return birthDay;
}
public String getGender() {
return gender;
}
@Override
public String toString() {
return id + " " + name + " " + birthYear + "-" + birthMonth + "-" + birthDay + " " + gender;
}
}
class StudentComparator implements Comparator<Student> {
@Override
public int compare(Student s1, Student s2) {
// 按出生日期从早到晚排序
if (s1.getBirthYear() != s2.getBirthYear()) {
return s1.getBirthYear() - s2.getBirthYear();
} else if (s1.getBirthMonth() != s2.getBirthMonth()) {
return s1.getBirthMonth() - s2.getBirthMonth();
} else {
return s1.getBirthDay() - s2.getBirthDay();
}
}
}
public class Main {
public static void main(String[] args) {
// 读取 input.txt 中的学生信息,存入学生集合 list 中
ArrayList<Student> list = new ArrayList<>();
try {
File inputFile = new File("input.txt");
Scanner scanner = new Scanner(inputFile);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] fields = line.split(" ");
int id = Integer.parseInt(fields[0]);
String name = fields[1];
String[] birthFields = fields[2].split("-");
int birthYear = Integer.parseInt(birthFields[0]);
int birthMonth = Integer.parseInt(birthFields[1]);
int birthDay = Integer.parseInt(birthFields[2]);
String gender = fields[3];
Student student = new Student(id, name, birthYear, birthMonth, birthDay, gender);
list.add(student);
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 对学生集合 list 进行排序
Collections.sort(list, new StudentComparator());
// 将排序后的学生集合 list 输出到 output.txt 文件中
try {
FileWriter writer = new FileWriter("output.txt");
for (Student student : list) {
writer.write(student.toString() + "\n");
}
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
```
请将上述代码保存为 Main.java 文件,并将 input.txt 文件放在同一目录下。运行程序后,它会自动读取 input.txt 文件中的学生信息,按照出生日期从早到晚排序,并将排序后的学生集合输出到 output.txt 文件中。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![ipynb](https://img-home.csdnimg.cn/images/20210720083646.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)