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中
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<GameObject> list
声明为List<GameObject>
以使用抽象而非特定实现
在 GameWorld 类中声明 List<GameObject> list
为私有字段
考虑使用构造函数而不是public void init()
如果出现并发问题,请使用java.util.concurrent.CopyOnWriteArrayList<E>
而不是传统的列表
考虑在 GameObject 中使用第二个构造函数来处理具有初始坐标的对象的创建 + 删除 setX 和 setY 方法 + 引入 moveTo(double x, double y)
方法以使意图更加清晰
【讨论】:
@maciejlesiak 感谢您的建议!但是,我不明白您的第一点;与使用 ArrayList以上是关于java中,如何在二维的ArrayList中添加List的主要内容,如果未能解决你的问题,请参考以下文章
java技术:怎样将ArrayList的值赋值给一个二维数组啊?