Java 添加/删除元素时是否创建新数组?

Java 添加/删除元素时是否创建新数组?,java,arrays,swing,arraylist,paintcomponent,Java,Arrays,Swing,Arraylist,Paintcomponent,晚上好。我正在开发一个类似于旧游戏LiteBrite的程序,在这个程序中,你把彩色的钉子放在面板上,面板就会亮起来。在我的程序中,它的工作原理与此类似,当你点击面板时,它将创建一个新的椭圆(我将其命名为ColorEllipse,它有位置、大小和颜色的规范),并将其存储以保存。目前它是一个arraylist,但我需要它在一个常规数组中。我被告知的方法是创建一个新数组,并将旧数组的所有内容复制到新数组中。现在我使用一个arraylist,但不幸的是,这个程序有一些规范,我们需要使用一个常规数组 导

晚上好。我正在开发一个类似于旧游戏LiteBrite的程序,在这个程序中,你把彩色的钉子放在面板上,面板就会亮起来。在我的程序中,它的工作原理与此类似,当你点击面板时,它将创建一个新的椭圆(我将其命名为ColorEllipse,它有位置、大小和颜色的规范),并将其存储以保存。目前它是一个arraylist,但我需要它在一个常规数组中。我被告知的方法是创建一个新数组,并将旧数组的所有内容复制到新数组中。现在我使用一个arraylist,但不幸的是,这个程序有一些规范,我们需要使用一个常规数组


导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.MouseEvent;
导入java.lang.reflect.Array;
导入java.util.ArrayList;
公共类LiteBritePanel扩展了javax.swing.JPanel{
专用最终静态整数偏移=5;
专用静态整型线宽=2;
专用静态int单元_宽度=25;
public ArrayList _circles;//存储颜色椭圆的位置
private ButtonPanel Control Panel;//用于设置要放置的peg的颜色
公共LitePanel(){
setBackground(java.awt.Color.black);
_圆圈=新的ArrayList();
控制面板=新按钮面板(此);
这个。addMouseListener(新的MyMouseListener(this));
添加(控制面板);
}
public void paintComponent(java.awt.Graphics aPaintBrush){
超级油漆组件(aPaintBrush);
java.awt.Graphics2D pen=(java.awt.Graphics2D)aPaintBrush;
java.awt.Color savedColor=pen.getColor();
setColor(java.awt.Color.black);

对于(intball=0;ball复制数组,可以使用System.arraycopy(…)方法():

首先创建一个目标数组,可能是源数组的两倍大,然后传递旧数组、起始索引(0)、新数组、目标起始索引(0)、长度(旧数组的长度),其余的都应该传递


另外,相信我,你也不想在paintComponent内部调用repaint。请改用Swing计时器。谷歌可以帮助你找到一个很好的教程。

根据你的电路板的大小,你可以创建一个与电路板大小相同的数组。或者,你可以按照气垫船的建议进行操作,但这完全取决于使用哪种电路板呃你想用cpu换内存

int MAX_POSSIBLE_ELEMENTS = ...
Colorable[] _circles = new Colorable[MAX_POSSIBLE_ELEMENTS];
....rest of code...

请注意,最大数量取决于电路板的高度和宽度,因此您应该在编译时了解这一点。

如果OP在所有“孔”中放置一个“钉”,阵列将处于最大大小。我个人不明白为什么首先需要调整阵列的大小。我同意,这似乎是一个不必要的优化,最坏情况下的场景ario认为,他将不得不填补大部分(如果不是整个)董事会,而宣布完整阵列的成本可以忽略不计。
public static void arraycopy(
         Object src,
         int srcPos,
         Object dest,
         int destPos,
         int length)
int MAX_POSSIBLE_ELEMENTS = ...
Colorable[] _circles = new Colorable[MAX_POSSIBLE_ELEMENTS];
....rest of code...