JAVA—在main方法中创建数组列表,并在其他类中使用它,而不重新创建它

JAVA—在main方法中创建数组列表,并在其他类中使用它,而不重新创建它,java,Java,这是我在Main方法中的数组: ArrayList<String> myarray = new ArrayList<>(); while(scan.hasNextLine()){ myarray.add(scan.nextLine()); } scan.close(); ArrayList myarray=new ArrayList(); while(scan.hasNextLine()){ 添加(scan.nextLine()); } scan.close()

这是我在Main方法中的数组:

ArrayList<String> myarray = new ArrayList<>();
while(scan.hasNextLine()){
    myarray.add(scan.nextLine());
}
scan.close();
ArrayList myarray=new ArrayList();
while(scan.hasNextLine()){
添加(scan.nextLine());
}
scan.close();
我的应用程序有多个线程,我试图在每个线程中使用这个数组(有点大),而不是每次都重新创建数组。
其主要思想是以某种方式加载它,并准备好被其他类调用。

下面的内容可能会给您一些想法

class Myclass{
    private ArrayList<String> myarray = new ArrayList<>();
    main(){
        //populate the array
    } 
    public ArrayList<String> getList(){
        return myarray;
    }

}
class-Myclass{
private ArrayList myarray=new ArrayList();
main(){
//填充数组
} 
公共ArrayList getList(){
返回myarray;
}
}

可能是以下内容给了您一些想法

class Myclass{
    private ArrayList<String> myarray = new ArrayList<>();
    main(){
        //populate the array
    } 
    public ArrayList<String> getList(){
        return myarray;
    }

}
class-Myclass{
private ArrayList myarray=new ArrayList();
main(){
//填充数组
} 
公共ArrayList getList(){
返回myarray;
}
}

以下SHG建议:

public MyStaticClass {
    // from your question is not clear whether you need a static or non static List
    // I will assume a static variable is ok
    // the right-hand member should be enough to synchornize your ArrayList
    public static List<String> myarray = Collections.synchronizedList(new ArrayList<String>());

    public static void main(String[] args) {
        // your stuff (which contains scanner initialization?)

        ArrayList<String> myarray = new ArrayList<>();
        while(scan.hasNextLine()){
            myarray.add(scan.nextLine());
        }
        scan.close();

        // your stuff (which contains thread initialization?)
    }
公共MyStaticClass{
//从您的问题来看,不清楚您需要的是静态列表还是非静态列表
//我假设一个静态变量是可以的
//右边的成员应该足以同步ArrayList
公共静态列表myarray=Collections.synchronizedList(新的ArrayList());
公共静态void main(字符串[]args){
//您的资料(其中包含扫描仪初始化?)
ArrayList myarray=新的ArrayList();
while(scan.hasNextLine()){
添加(scan.nextLine());
}
scan.close();
//你的东西(包含线程初始化?)
}
但是如果你真的需要一个非静态变量

public MyClass {

    private final List<String> myarray;

    public MyClass() {
        // the right-hand member should be enough to synchornize your ArrayList
        myarray = Collections.synchronizedList(new ArrayList<String>());
    }

    public void getArray() {
        return myarray;
    }


    public static void main(String[] args) {
        // your stuff (which contains scanner initialization?)

        Myclass myObj = new MyClass();
        List<String> myObjArray = myObj.getArray();
        while(scan.hasNextLine()){
            myObjArray.add(scan.nextLine());
        }
        scan.close();

        // your stuff (which contains thread initialization?)
    }
公共MyClass{
私有最终列表myarray;
公共MyClass(){
//右边的成员应该足以同步ArrayList
myarray=Collections.synchronizedList(新的ArrayList());
}
public void getArray(){
返回myarray;
}
公共静态void main(字符串[]args){
//您的资料(其中包含扫描仪初始化?)
Myclass myObj=新的Myclass();
List myObjArray=myObj.getArray();
while(scan.hasNextLine()){
myObjArray.add(scan.nextLine());
}
scan.close();
//你的东西(包含线程初始化?)
}

有关静态和非静态字段的详细信息,请查看(基本上,您将需要或不需要
MyClass
实例来获得
myarray
访问权限,但您将能够或不能够在JVM中拥有不同的列表)。

以下SHG建议:

public MyStaticClass {
    // from your question is not clear whether you need a static or non static List
    // I will assume a static variable is ok
    // the right-hand member should be enough to synchornize your ArrayList
    public static List<String> myarray = Collections.synchronizedList(new ArrayList<String>());

    public static void main(String[] args) {
        // your stuff (which contains scanner initialization?)

        ArrayList<String> myarray = new ArrayList<>();
        while(scan.hasNextLine()){
            myarray.add(scan.nextLine());
        }
        scan.close();

        // your stuff (which contains thread initialization?)
    }
公共MyStaticClass{
//从您的问题来看,不清楚您需要的是静态列表还是非静态列表
//我假设一个静态变量是可以的
//右边的成员应该足以同步ArrayList
公共静态列表myarray=Collections.synchronizedList(新的ArrayList());
公共静态void main(字符串[]args){
//您的资料(其中包含扫描仪初始化?)
ArrayList myarray=新的ArrayList();
while(scan.hasNextLine()){
添加(scan.nextLine());
}
scan.close();
//你的东西(包含线程初始化?)
}
但是如果你真的需要一个非静态变量

public MyClass {

    private final List<String> myarray;

    public MyClass() {
        // the right-hand member should be enough to synchornize your ArrayList
        myarray = Collections.synchronizedList(new ArrayList<String>());
    }

    public void getArray() {
        return myarray;
    }


    public static void main(String[] args) {
        // your stuff (which contains scanner initialization?)

        Myclass myObj = new MyClass();
        List<String> myObjArray = myObj.getArray();
        while(scan.hasNextLine()){
            myObjArray.add(scan.nextLine());
        }
        scan.close();

        // your stuff (which contains thread initialization?)
    }
公共MyClass{
私有最终列表myarray;
公共MyClass(){
//右边的成员应该足以同步ArrayList
myarray=Collections.synchronizedList(新的ArrayList());
}
public void getArray(){
返回myarray;
}
公共静态void main(字符串[]args){
//您的资料(其中包含扫描仪初始化?)
Myclass myObj=新的Myclass();
List myObjArray=myObj.getArray();
while(scan.hasNextLine()){
myObjArray.add(scan.nextLine());
}
scan.close();
//你的东西(包含线程初始化?)
}

有关静态和非静态字段的详细信息,请查看(基本上,您将需要或不需要
MyClass
实例来获得
myarray
访问权限,但您将能够或不能够在JVM中拥有不同的列表).

只需将其分配给类成员,并为其创建一个公共getter。然后您就可以从任何位置使用该数组。如果我们讨论的是线程,您可能需要同步该数组。请详细说明您的问题。有一件事ArrayList不是线程安全的,当多个线程访问它时不应使用它。那么在usin中访问此ArrayList如何g同步的单例对象只需将其分配给类成员,并为其创建一个公共getter。然后您就可以从任何位置使用该数组。如果我们讨论的是线程,您可能需要同步它。您能否详细说明您的问题。有一件事ArrayList不是线程安全的,在多线程访问它时不应使用它。那么使用同步单例对象访问此arraylist