注意:以下是我的作业/作业,如果你愿意,请随时不回答.
我想删除/删除一个元素从String数组(Set)基本,我不允许使用Collections..etc.
现在我有这个:
void remove(String newValue) {
for ( int i = 0; i < setElements.length; i++) {
if ( setElements[i] == newValue ) {
setElements[i] = "";
}
}
}
Run Code Online (Sandbox Code Playgroud)
我做了我想要的,因为它从数组中删除元素但它没有缩短长度.以下是输出,基本上它删除了索引#1的元素.
D:\javaprojects>java SetsDemo
Enter string element to be added
A
You entered A
Set size is: 5
Member elements on index: 0 A
Member elements on index: 1 b
Member elements on index: 2 hello
Member elements on index: 3 world
Member elements on index: 4 six
Set size is: 5
Member elements on index: 0 A
Member elements on index: 1
Member elements on index: 2 hello
Member elements on index: 3 world
Member elements on index: 4 six
Run Code Online (Sandbox Code Playgroud)
一旦创建了数组对象,就无法更改它的长度.这是JLS 10.2的摘录.数组变量:
创建数组对象后,其长度永远不会更改.要使数组变量引用不同长度的数组,必须为该变量分配对不同数组的引用.
这意味着对于这个问题,你必须分配一个比原始数组短的一个元素的新数组,并复制其余的元素.
如果需要删除索引处的元素k,并且原始数组包含L元素,则需要复制元素(上限是独占的):
[0,k)到[0,k)(k元素)[k+1,L)到[k,L-1)(L-k-1元素).L-1复制的元素总数static String[] removeAt(int k, String[] arr) {
final int L = arr.length;
String[] ret = new String[L - 1];
System.arraycopy(arr, 0, ret, 0, k);
System.arraycopy(arr, k + 1, ret, k, L - k - 1);
return ret;
}
static void print(String[] arr) {
System.out.println(Arrays.toString(arr));
}
public static void main(String[] args) {
String[] arr = { "a", "b", "c", "d", "e" };
print(arr); // prints "[a, b, c, d, e]"
arr = removeAt(0, arr);
print(arr); // prints "[b, c, d, e]"
arr = removeAt(3, arr);
print(arr); // prints "[b, c, d]"
arr = removeAt(1, arr);
print(arr); // prints "[b, d]"
arr = removeAt(0, arr);
arr = removeAt(0, arr);
print(arr); // prints "[]"
}
Run Code Online (Sandbox Code Playgroud)
这用System.arraycopy; 如果不允许,你总是可以写自己的.
static void arraycopy(String[] src, int from, String[] dst, int to, int L) {
for (int i = 0; i < L; i++) {
dst[to + i] = src[from + i];
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个简单的实现,无法处理src == dst,但在这种情况下就足够了.
==的String比较大多数时候,使用==比较String对象是一个错误.你应该使用equals.
String ha1 = new String("ha");
String ha2 = new String("ha");
System.out.println(ha1 == ha2); // prints "false"
System.out.println(ha1.equals(ha2)); // prints "true"
Run Code Online (Sandbox Code Playgroud)
基本上,您需要创建一个新数组,其长度为旧数组的长度减1,然后需要在循环中将有效元素从旧数组复制到新数组,然后用新数组替换旧数组。
由于这是homework,因此省略了详细信息。请随意发表评论以获得更多说明。
| 归档时间: |
|
| 查看次数: |
23512 次 |
| 最近记录: |