Java 如何在不从列表中删除任何项的情况下在数组中添加项?
我有一个数组,我想在这个数组的第二个索引处添加一个新元素,但不从列表中删除任何其他项Java 如何在不从列表中删除任何项的情况下在数组中添加项?,java,arrays,Java,Arrays,我有一个数组,我想在这个数组的第二个索引处添加一个新元素,但不从列表中删除任何其他项 Current array: ["AA", "BB", "CC", "DD"] 在第二位插入11后 New Array: ["AA", "11", "BB", "CC", "DD"] 这就是我正在做的,但它将从数组中删除最后一条记录 private void inserItem(int pos, String value) { String[] result = new String
Current array:
["AA", "BB", "CC", "DD"]
在第二位插入11
后
New Array:
["AA", "11", "BB", "CC", "DD"]
这就是我正在做的,但它将从数组中删除最后一条记录
private void inserItem(int pos, String value) {
String[] result = new String[itemsArray.length];
for(int i = 0; i < pos; i++)
result[i] = itemsArray[i];
result[pos] = value;
for(int i = pos + 1; i < itemsArray.length; i++)
result[i] = itemsArray[i-1];
itemsArray= result;
}
从技术上讲,您正在添加一个元素 旧数组有3个元素,您希望再添加1个元素,因此您应该创建大小为4的新数组,但尚未完成。。。。 尝试字符串结果[]=新字符串[itemsArray.length+1] 这可能会解决你的问题 或 您只需使用ArrayList即可解决所有问题
快乐编码:)新阵列将比当前阵列多出一项:
String[] result = new String[itemsArray.length + 1];
两个错误
private void inserItem(int pos, String value) {
String[] result = new String[itemsArray.length + 1];//new array with old size+1
for(int i = 0; i < pos; i++)
result[i] = itemsArray[i];
result[pos] = value;
for(int i = pos + 1; i < result.length; i++)//change loop termination
result[i] = itemsArray[i-1];
itemsArray= result;
}
private void inserItem(int pos,字符串值){
String[]结果=新字符串[itemsArray.length+1];//旧大小为+1的新数组
对于(int i=0;i
一旦创建数组,就不能更改数组的大小
您应该使用LinkedList
及其add(int index,E元素)
方法:
public void add(int-index,E-element)在
此列表中的指定位置。移动当前位于的元素
该位置(如果有)和右侧的任何后续元素(添加
一个是他们的指数)
String[]数组={“AA”、“BB”、“CC”、“DD”};
LinkedList=新的LinkedList(Arrays.asList(array));
列表。添加(1,“11”);
请注意,您应该使用LinkedList,而不是ArrayList,因为带有移位的添加操作对于ArrayList更为昂贵
另一个要考虑的是,我只使用数组来填充Link表。我并不是建议您在每次插入项目时都这样做。您应该完全停止使用数组,只使用LinkedList。
string[]itemsArray={“AA”、“BB”、“CC”、“DD”};
string[] itemsArray = { "AA", "BB", "CC", "DD" };
private String[] inserItem(int pos, String value)
{
String[] result = new String[itemsArray.Length + 1];
for (int i = 0, idx = 0; i < itemsArray.Length; i++)
{
if (idx == pos)
{
result[idx] = value;
idx++;
result[idx] = itemsArray[i];
idx++;
}
else
{
result[idx] = itemsArray[i];
idx++;
}
}
return result;
}
私有字符串[]inserItem(int-pos,字符串值)
{
字符串[]结果=新字符串[itemsArray.Length+1];
for(inti=0,idx=0;i
在函数中创建新数组时,请使用(当前长度+1)创建它。我已经在下面编辑了你的代码
private void insertItem(int pos, String value) {
String[] result = new String[itemsArray.length + 1];
for(int i = 0; i < pos; i++)
result[i] = itemsArray[i];
result[pos] = value;
for(int i = pos + 1; i < itemsArray.length + 1; i++)
result[i] = itemsArray[i-1];
itemsArray= result;
}
private void插入项(int-pos,字符串值){
字符串[]结果=新字符串[itemsArray.length+1];
对于(int i=0;i
但是,请注意,您在这里所做的并不是扩展原始数组。而是从原始数组和新添加元素的值创建一个新数组。Change String[]result=new String[itemsArray.length];to String[]结果=新字符串[itemsArray.length+1]。。。也许在其他地方,你有什么理由不能使用
ArrayList
?只需使用方法ArrayList.add(index,String)
。请明确,在创建数组后,您无法更改数组的大小,因此您尝试执行的操作永远不会起作用。你应该改用LinkedLisy。你的评论“增大大小”有点误导人。您正在创建所需大小的新阵列,而不是增加现有阵列的大小。我喜欢此解决方案。您可能想向OP演示如何从链接列表
中获取字符串[]
,以防他们真的需要一个字符串数组
,使用数组(T[]a)
。我想您的解决方案可以很好地处理这些情况。其他解决方案类似于“newstring[itemsArray.length+1]”,但我觉得我们应该有一个通用的代码。如果我们需要向数组中添加不同数量的数据,那么每次我们都不能添加+1、+2。我们不能概括这行代码,如果我需要添加两个或三个额外的值呢?每次我都不能对数组长度做+1、+2、+3。好吧,插入项只插入一个项。@coderkemp OP说他需要在给定位置放置一个元素。@Doc我在考虑根据输入添加元素,很想知道这是如何工作的。我知道链表可能是创建我们想要的存储的一个很好的选择。
string[] itemsArray = { "AA", "BB", "CC", "DD" };
private String[] inserItem(int pos, String value)
{
String[] result = new String[itemsArray.Length + 1];
for (int i = 0, idx = 0; i < itemsArray.Length; i++)
{
if (idx == pos)
{
result[idx] = value;
idx++;
result[idx] = itemsArray[i];
idx++;
}
else
{
result[idx] = itemsArray[i];
idx++;
}
}
return result;
}
private void insertItem(int pos, String value) {
String[] result = new String[itemsArray.length + 1];
for(int i = 0; i < pos; i++)
result[i] = itemsArray[i];
result[pos] = value;
for(int i = pos + 1; i < itemsArray.length + 1; i++)
result[i] = itemsArray[i-1];
itemsArray= result;
}