class ArrayApp{
public static void main(final String[] args){
long[] arr; // reference to array
arr = new long[100]; // make array
int nElems = 0; // number of items
int j; // loop counter
long searchKey; // key of item to search for
// --------------------------------------------------------------
arr[0] = 77; // insert 10 items
arr[1] = 99;
arr[2] = 44;
arr[3] = 55;
arr[4] = 22;
arr[5] = 88;
arr[6] = 11;
arr[7] = 00;
arr[8] = 66;
arr[9] = 33;
nElems = 10; // now 10 items in array
// --------------------------------------------------------------
for(j = 0; j < nElems; j++){
System.out.print(arr[j] + " ");
}
System.out.println("");
// --------------------------------------------------------------
searchKey = 66; // find item with key 66
for(j = 0; j < nElems; j++){
if(arr[j] == searchKey){
break; // yes, exit before end
}
}
if(j == nElems){
System.out.println("Can’t find " + searchKey); // yes
} else{
System.out.println("Found " + searchKey); // no
}
// --------------------------------------------------------------
searchKey = 55; // delete item with key 55
for(j = 0; j < nElems; j++){
if(arr[j] == searchKey){
break;
}
}
for(int k = j; k < nElems - 1; k++){
arr[k] = arr[k + 1];
}
nElems--; // decrement size
// --------------------------------------------------------------
for(j = 0; j < nElems; j++){
System.out.print(arr[j] + " ");
}
System.out.println("");
} // end main()
} // end class ArrayApp
答案 0 :(得分:0)
nElemens用于加速搜索。在上面的示例中,数组有100个字段。所以你需要搜索所有100个字段。但由于nElemen(元素数量)仅为10,因此只需搜索10个元素而不是全部100个元素。
但要小心:上面的算法假定数组以正确的顺序填充,并且在具有值的字段之间不会有任何间隙。
然后变量j用作循环变量来访问数组中的不同字段。
E.g。
arr [5]访问数组的6.字段。 arr [j]访问j。数组中的元素。有关java循环的基本信息:
答案 1 :(得分:0)
这是从数组中删除元素的困难(更不用说很长的)方法。还有其他更简单的方法,包括:
在Java文档上查看这些内容。
答案 2 :(得分:0)
实际上,在Java中“删除”[]
中的元素并不是一个好习惯。它们是静态分配的,无论如何[].length
都无法更改。你想让我做什么?使用动态数组,列表等。例如,使用ArrayList
。
答案 3 :(得分:0)
您的想法是在java数组(具有固定大小)上实现“可调整大小”的数组。此固定数组中的第一个nElem
元素是逻辑数组。现在,您希望能够在此逻辑数组中设置和删除元素:
[00] [01] [02] [03] [04] [05] [06] [07] [08] [09] ... [99] // physical array
[00] [01] [02] [03] [04] [05] [06] [07] [08] // logical array, nElem = 9
Insert '99' at (logical) position 04
[00] [01] [02] [03] [99] [04] [05] [06] [07] [08] // nElem = 10
Delete value at (logical) position 03
[00] [01] [02] [99] [04] [05] [06] [07] [08] // nElem = 9
java数组的大小仍为100(已修复),每次插入和删除操作后都必须调整逻辑数组(nEleme)的大小。
如果插入元素,则必须将某些元素“移位”到“右侧”(并增加nElem)。你需要一个for循环和一个计数器(j
)。如果你想删除一个元素,你必须将元素“移动”到“左边”并再次需要一个计数器。
为什么我们使用j和nElems来搜索数组。
要搜索(未排序)集合中的项目(数组,集合,..),您必须查看每个元素,可能从index = 0开始直到index =(nElem-1)。如果当前位置的值与您的搜索条件匹配(例如:is-equal-to),则可以中断搜索。 j
存储此实际索引,nElem
(逻辑)数组的大小,以便(nElem-1)
此(逻辑)数组中最后一个元素的索引)
为什么我们再次将j分配给k进行删除?我们不能从j本身删除它吗?
仅仅是为了可读性。这也可以,但更难理解。
for(j = 0; j < nElems; j++) {
if(arr[j] == searchKey) {
break;
}
}
for(;j < nElems-1; j++) { // note the missing initialzing value for the loop
arr[j] = arr[j+1];
}
答案 4 :(得分:0)
如果您有Apache的commons-lang libary,您可以尝试
inputArray = ArrayUtils.remove(inputArray , indexOfElement);
该方法返回一个新数组,该数组是通过从原始数组中删除找到的元素而创建的。