繁体   English   中英

关于ArrayList将来使用吗?

[英]About ArrayList in future use?

我是Java初学者,正在学习oop概念。 我已经成功地将对象值存储到arraylist中,并且尝试在main方法中显示arraylist。 但是问题是,如果我在main方法中删除了增值代码,然后再次显示arraylist。 arraylist将显示为[]的空值。 请帮助我,这是我的理解问题,还是需要存储在txtfile中? 数据库或获取或存储arraylist的内容,可用于显示我之前添加的所有记录,更新或删除

这是针对我的实践项目,并且不使用数据库来创建基于oop概念的POS系统。 我以前学过php和c#,并且我做相同类型的项目,并且由于使用数据库而不太困惑。 但是现在我感到困惑如何使用Java创建它,并且能够基于oop概念创建成员,更新成员配置文件等。 请帮助我或提出建议。 非常感谢。

我的超级班

class Person {
private List<Customer> customers;
private String name;
private String gender;
private String email;

public Person(){
}

public Person(List<Customer> customers){
    this.customers = customers;
}

public Person(String name, String gender, String email){
    ***
}

public List<Customer> getCustomers(){
    return customers;
}

public void addCustomer(Customer customer){
    customers.add(customer);
}

//Getter
***
//Setter}

我的子类

class Customer extends Person{

private int custID;
private static int customerID = 10001;

public Customer(String name, String gender, String email,int custID){

    super(name, gender, email);
    this.custID = custID;
    customerID++;
}

public int getCustID(){
    return custID;
}

public static int getCustomerID(){
    return Customer.customerID;
}

public String toString(){
    return String.format("%d%30s%7s%30s\n", getCustID(), getName(), getGender(),getEmail());
}

}

我的主要方法

public class POS {

public static void main(String[] args) {

    Customer p1 = new 
Customer("Halo","M","haloworld@gmail.com",Customer.getCustomerID());
    Customer p2 = new 
Customer("Haloo","F","halobitchworld@gmail.com",Customer.getCustomerID()); 


    List<Customer> cList = new ArrayList<>();

    cList.add(p1);  //if remove
    cList.add(p2); // if remove 

    Person customer = new Person(cList);
    System.out.print(customer.getCustomers());

}

}

我希望如果在main中编写代码

 { Person person = new Person();
    System.out.print(person);
 }

将显示我之前添加的结果

如果您不想在主要功能中将客户添加到ArrayList中,那么一种好方法是在Person类中将List<Customer>设置为static并在创建客户时将其添加。

public class Person {

    private static List<Person> customers = new ArrayList<>();
    public static List<Person> getCustomers() {
        return customers;
    }

    private String name;
    private String gender;
    private String email;

    public Person(String name, String gender, String email) {
        this.name = name;
        this.gender = gender;
        this.email = email;
        customers.add(this);
    }

    /* getters */

}

现在,在main()函数中,您只需创建Customers ,它们就会自动添加到customers列表中,因此您可以通过调用静态函数getCustomers()来获取它们

public static void main(String[] args) {
    Customer p1 = new Customer("Halo","M","haloworld@gmail.com",Customer.getCustomerID());
    Customer p2 = new Customer("Haloo","F","halobitchworld@gmail.com",Customer.getCustomerID());
    System.out.print(Customer.getCustomers());
}

要存储它们,您将必须实现某种存储系统,例如MySQL,或者如果您不必真正从任何地方访问它们,则只需实现一个文本文件。 您将在Stackoverflow上找到许多有关如何执行此操作的教程。

编辑

@ andy-turner指出这样做是customers.add(this); 在构造函数内部确实很痛苦。 因此,您可以只在Main-class中创建ArrayList<Customer> ,然后像这样工作:

private static ArrayList<Customer> customers = new ArrayList<>();

public static void main(String[] args) {
    customers.add(new Customer("Halo","M","haloworld@gmail.com",Customer.getCustomerID()));
    customers.add(new Customer("Haloo","F","halobitchworld@gmail.com",Customer.getCustomerID()));
    System.out.print(customers);
}

内存中的变量是短暂的

像所有Java Collections Framework一样, ArrayList是用于将数据保存在内存中的结构。 当程序结束执行时,将释放所有该内存。 您的ArrayList被破坏。

存储

如果要在运行之间共享数据,则必须存储它。

您可以打开存储中的文件,并将数据值写入文本。 在下一次运行时,请读取该文件,将文本解析回对象,然后填充新的ArrayList

您可以打开一个文件,并使用Java序列化技术让ArrayList将自身写入存储。 或者,您可以使用其他序列化格式自己进行序列化

或将您的数据值发送到数据库,该数据库又将它们写入存储。 下次运行时,从数据库检索。

或者将您的数据通过网络传递给代表您接受数据的某些服务。 在下次运行时,向服务询问您的数据。

所有这些都太笼统了,无法讨论堆栈溢出。 您需要进行自己的研究和学习。

空数组与NULL

arraylist将显示为[]的空值。

字符串[]表示一个空数组,该数组不包含任何元素。 这样的数组不为空! Null表示完全没有数组。

想象一下一个拿着书架的书架。 这就像一个包含元素的数组。 移开书本。 空架子就像一个空数组,没有元素。 现在,取下书架并将其燃烧。 那是一个空数组,意味着根本没有数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM