我有一个变量数组,我想删除其中的1个元素,然后将整个数组向下移动以填充被删除的点。任何帮助将不胜感激,并且在你问之前,不,这不是功课。如何将阵列元素从某个位置向下移动?
回答
理想情况下,使用ArrayList
(或其他列表实现),而不是已经为您实现的地方。 (您想要使用的具体实现取决于您需要多长时间执行一次清除操作,以及您需要多长时间检索一次还是按索引设置等等。有了更多的上下文,我们可以帮助您更多。)
否则,使用System.arraycopy
。
System.arraycopy(array, index + 1, array, index, array.length - index - 1);
// Assuming it's a reference type array: null out the last element so it
// doesn't prevent garbage collection
array[array.length - 1] = null;
'ArrayList'仍然不是一个好的选择 - 它仍然需要移动所有元素 – 2012-04-27 05:24:20
@BorisStrandjev:我已经编辑过 - 这取决于你需要多久执行一次这个操作。有很多变量涉及到,基本上 - 我不会在这里推荐LinkedList,因为如果OP需要按索引做很多get/set操作,那么这将会很糟糕。 (它在内存方面的效率也会明显降低。) – 2012-04-27 05:26:48
很少有人应该在'ArrayList'上使用'LinkedList'。请参阅以下文章(有点旧,但可能仍然相关):[第1条](http://onjava.com/onjava/2001/05/30/optimization.html)和[第2条](http: //www.javaspecialists.eu/archive/Issue111.html)。可能是由于“LinkedList”必须包装每个元素才能创建元素之间的链接 – Robin 2012-04-27 06:07:39
在阵列中这样做会不会是有效的,特别是如果你需要提供数组的萎缩:
- ,如果你不需要收缩你可以换到最后所有元素。
- 如果您需要缩小,那么唯一的选择是分配新数组并复制所有元素。
该任务的更好选择是LinkedList
。它提供了删除任意元素的操作,并且它不需要任何移动来固定收集。
我认为最好的解决办法是使用ArrayList
ArrayList<String> list = new ArrayList<String>();
//add Elements
list.add("test1");
list.add("test2");
list.add("test3");
//remove Element 2 (->1)
list.remove(1);
//print Element 2
System.out.println(list.get(1));
//output: test3
如果你真的想给我们一个数组:
private void removeElement(String[] array, int index) {
final int arrayLength = array.length;
for (int i = index + 1; i < arrayLength; i++) {
if (i > 0) {
array[i - 1] = array[i];
if (i == arrayLength - 1) {
array[i] = "";
}
}
}
}
一个可能的解决方案是使用Arrays.asList
和List#toArray
方法将阵列暂时转换为List
,使用List
的可用remove
方法,并将其转换回数组。
Object[] arrayToShrink = ...;
List<Object> shrinkedList = new ArrayList<Object>(Arrays.asList(arrayToShrink));
shrinkedList.remove(objectToRemove);
Object[] shrinkedArray = shrinkedList.toArray(new Object[shrinkedList.size()]);
短代码明智,但最有可能不是最有效的解决方案。
你试过这个吗? Arrays.asList()。remove(...)将抛出。 – 2012-04-27 06:10:15
@JonSkeet好的。不,我没有尝试过,但我会纠正答案。似乎我需要额外的一行代码 – Robin 2012-04-27 06:12:29
- 1. jQuery:将元素从一个位置滑动到某个位置
- 2. 向下移动矩阵的元素java
- 3. 将阵列中的元素移动到空白位置
- 4. 将阵列的元素移动到指定的位置
- 5. 如何从阵列中删除元素并将所有元素都移动到某个点上?
- 6. 动画:将元素从一个位置移动到另一个位置
- 7. CSS div将元素向下移动
- 8. 从阵列中动态移除元素
- 9. 从阵列中移除元素,然后移动其他元素
- 10. 如何使用jQuery将元素移动到第三个位置?
- 11. 浮动元素下元素的位移
- 12. 阵列中某个元素的潜在位置和值
- 13. 从某个位置删除元素
- 14. jQuery:移动元素位置
- 15. 将阵列中的元素向右移动1
- 16. 如何在树上向上/向下移动一个元素
- 17. 如何将整个div元素向上移动x个像素?
- 18. 将对象移动到某个位置
- 19. 将元素向右移动
- 20. 将元素从一个向量移动到另一个向量
- 21. 将NSSheets的位置向下移动23像素
- 22. 如何获得列表中的某个元素,给定位置?
- 23. 将阵列项目移位4位置
- 24. CSS将浮动元素移动到另一个位置
- 25. 如何将li元素移动到特定位置?
- 26. 如何使用普通JavaScript将元素从DOM中的一个位置移动到另一个位置?
- 27. 如何删除元素,还移阵列
- 28. 如何移动一个给定位置阵列的标记?
- 29. 将XML元素从其位置移动到另一个父元素下使用xslt
- 30. 随机化元素位置到阵列
你尝试过什么吗?您是否修复了使用数组而不是更灵活的数据结构(如集合)? – 2012-04-27 05:23:03
您可以使用'ArrayList' – Neifen 2012-04-27 05:23:11
发布一些代码,以便我们可以更好地理解您的问题。 – 2012-04-27 05:23:12