java中,如何在二维的ArrayList中添加List

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中,如何在二维的ArrayList中添加List相关的知识,希望对你有一定的参考价值。

/*
/ * 二维数组转二维List
*/
ArrayList<ArrayList<Integer>> coveredList=new ArrayList<ArrayList<Integer>>();
ArrayList tmp=new ArrayList<Integer>();

for(int i=0;i<nSensor;++i)

for(int j=0;j<nSensor;++j)

if(res[i][j]!=-1)
tmp.add(res[i][j]);

coveredList.add(i, tmp);
tmp.clear();

for(int i=0;i<nSensor;++i)
System.out.println(coveredList);
res为一个已初始化好的二维数组,上述代码中不知道怎么把tmp加到coveredList中

参考技术A coveredList.add(tmp);
for(int i=0;i<nSensor;++i)

ArrayList tmp=new ArrayList<Integer>();
for(int j=0;j<nSensor;++j)

if(res[i][j]!=-1)
tmp.add(res[i][j]);

coveredList.add(itmp);
本回答被提问者采纳

如何在 Java 中动态创建要添加到 ArrayList 中的对象

【中文标题】如何在 Java 中动态创建要添加到 ArrayList 中的对象【英文标题】:How to dynamically create Objects to add into ArrayList in Java 【发布时间】:2018-03-10 20:36:43 【问题描述】:

我目前正在使用 Java 和 Codename One 构建一个 2D Asteroid 游戏,重点关注 OOP 模式。但是,我在尝试动态创建新对象(在我的情况下,我要添加的对象是超类 GameObject)以添加到 ArrayList 时遇到了麻烦。正如您在 GameWorld.java 的 void init() 方法中看到的那样,我创建了一个包含 GameObject 类型的列表,其中包括 Asteroids、Ships、Spacestations 的子类。

程序要求在类中输入命令键盘输入,例如“a”,然后应该将新的 Asteroid(GameObject 的子类)对象添加到 ArrayList 中。用户应该能够添加任意数量的 Asteroid,以分配给 ArrayList。

我的问题是:我如何做到这一点没有已经像我目前所做的那样声明了一个名为 AsteroidTest 的 Asteroid 类型的变量我的 GameWorld 类的 addAsteroid() 函数?谢谢!

GameWorld.java

package com.mycompany.a1;

import java.util.ArrayList; //For ArrayList Usage

public class GameWorld 

public void init() 
    ArrayList<GameObject> list = new ArrayList<GameObject>();

//other methods here to manipulate Game objects and data
public void addShip() 
    Ship ShipTest = new Ship();  

    list.add(ShipTest);

    System.out.println(ShipTest.getLocation());


public void addAsteroid()
    Asteroid AsteroidTest = new Asteroid();

    list.add(AsteroidTest);


    System.out.println(AsteroidTest.getLocation());



public void addSpaceStation()



Game.java

package com.mycompany.a1;

import com.codename1.ui.events.ActionListener;
import com.codename1.ui.Label;
import com.codename1.ui.TextField;
import com.codename1.ui.events.ActionEvent;
import java.lang.String;
import com.codename1.ui.Form;

public class Game extends Form
private GameWorld gw;

public Game ()
    gw  = new GameWorld();
    gw.init();
    play();



private void play()

    Label myLabel=new Label("Enter a Command:"); this.addComponent(myLabel);
    final TextField myTextField=new TextField();
    this.addComponent(myTextField);
    this.show();
    myTextField.addActionListener(new ActionListener()
        public void actionPerformed(ActionEvent evt) 
            String sCommand=myTextField.getText().toString();
            myTextField.clear();
            switch (sCommand.charAt(0))
            case 's':
                gw.addShip();
                break;
            case 'a':
                gw.addAsteroid();
                break;
            case 'b':
                gw.addSpaceStation();
                break;
            //add code to handle rest of the commands
             //switch
         //actionPerformed
     //new ActionListener()
            ); //addActionListener
     //play
  //code to enter text field and receive keyboard input 

GameObject.java 超类。子类包括小行星、船舶、导弹、空间站

package com.mycompany.a1;

public abstract class GameObject 
private double x;
private double y;

public GameObject()
    x = 0;
    y = 0;


public double getX()
    return x;


public void setX(double newX)
    x = newX;


public double getY()
    return y;


public void setY(double newY)
    y = newY;


public String getLocation()
    return "(" + x + ", " + y + ")";

 

Asteroid.java

 package com.mycompany.a1;

 import java.util.Random;

 public class Asteroid extends MovableObject 

 private Random rand = new Random();


 public Asteroid() 
    setX(rand.nextInt(1023) + rand.nextDouble());

    setY(rand.nextInt(767) + rand.nextDouble());// TODO Auto-generated 
  constructor stub
  

 

【问题讨论】:

list.add(new Asteroid()); @KevinAnderson 哇真的这么简单吗?我也收到 ArrayList 列表变量的错误。错误提示“未使用局部变量列表的值”。 应该说list没有定义。您在init() 方法中本地定义了list,但该定义在init() 之外不可见。您希望将list 定义为您的类的成员变量。如果你不明白为什么,你需要研究的主题是“变量的范围”。 啊,我不知道为什么我在那个方法中定义了列表,我将它声明为类的成员变量,现在一切正常。非常感谢凯文希望我能投票给你! 【参考方案1】:

其实很简单:

public void addAsteroid()
  this.list.add(new Asteroid());

但如果要打印位置,则必须在新小行星创建时进行,因此在构造函数中:

public GameObject()
  x = 0;
  y = 0;
  System.out.println("(" + x + ", " + y + ")");

此外:

ArrayList&lt;GameObject&gt; list 声明为List&lt;GameObject&gt; 以使用抽象而非特定实现 在 GameWorld 类中声明 List&lt;GameObject&gt; list 为私有字段 考虑使用构造函数而不是public void init() 如果出现并发问题,请使用java.util.concurrent.CopyOnWriteArrayList&lt;E&gt; 而不是传统的列表 考虑在 GameObject 中使用第二个构造函数来处理具有初始坐标的对象的创建 + 删除 setX 和 setY 方法 + 引入 moveTo(double x, double y) 方法以使意图更加清晰

【讨论】:

@maciejlesiak 感谢您的建议!但是,我不明白您的第一点;与使用 ArrayList List 相比,使用 List 的确切优势是什么?我肯定会为 X 和 Y 坐标添加第二个构造函数,它比我目前拥有的要智能得多。 通常的做法是使用抽象(接口、抽象类等)而不是特定的实现作为变量类型。这样,您可以隐藏实现(因此您的类的客户端不关心您是否在实现中使用 ArrayList 或 LinkedList 或其他 List)。使用一些列表最重要的是,这就是为什么应该有一个界面。如果你想了解更多,请参考 SOLID 原理,特别是 DIP en.wikipedia.org/wiki/Dependency_inversion_principle

以上是关于java中,如何在二维的ArrayList中添加List的主要内容,如果未能解决你的问题,请参考以下文章

在二维 ArrayList 中添加元素

java中二维数组和ArrayList的相互转换

java技术:怎样将ArrayList的值赋值给一个二维数组啊?

如何在java中将对象添加到ArrayList中

尝试将数组添加到Java中的ArrayList时出错[重复]

尝试将数组添加到 Java 中的 ArrayList 时出错 [重复]