어레이에서 요소 삭제(Java)
Java에서 어레이에서 요소를 빠르게(멋있게) 삭제할 수 있는 방법이 있습니까?
commons lang의 Array Utils를 사용할 수 있습니다.
array = ArrayUtils.removeElement(array, element)
당신의 질문은 명확하지 않습니다.당신의 대답으로 당신이 무엇을 하려는지 알 수 있습니다.
public static String[] removeElements(String[] input, String deleteMe) {
List result = new LinkedList();
for(String item : input)
if(!deleteMe.equals(item))
result.add(item);
return result.toArray(input);
}
주의: n것 n n n n n n n n n n 。IllegalArgumentException 쪽인가 하면input ★★★★★★★★★★★★★★★★★」deleteMe에 빈 가 없습니다. 문자열을 삭제하는 할 수 현재는 null .현재는 이 문자열은NPE에서 하게 콜을 했을 때deleteMedeleteMe
여기서 선택한 내용:
사용하였습니다.LinkedList반복도 마찬가지로 빨라야 합니다.또한 많은 요소를 삭제하게 되면 크기 조정이나 너무 큰 목록을 할당하지 않도록 해야 합니다. 해서 '아까불까불까불까불까불까불까불까불까불까불까불까불까불까불까불까요?ArrayList이치노큰 차이는 없을 것 같다.
컬렉션을 사용하는 것이 가장 좋습니다.단, 어떤 이유로 아웃되어 있는 경우는 를 사용합니다.약간 다른 오프셋으로 동일한 배열에서 복사하거나 동일한 배열로 복사할 수 있습니다.
예를 들어 다음과 같습니다.
public void removeElement(Object[] arr, int removedIdx) {
System.arraycopy(arr, removedIdx + 1, arr, removedIdx, arr.length - 1 - removedIdx);
}
코멘트에 응답하여 편집:
이것은 다른 좋은 방법이 아닙니다.실제로 이 기능을 사용할 수 있는 유일한 방법입니다(Java 등).Array List 또는 Apache utils)는 이 방법을 사용합니다.또한 Array List(또는 중간에서 많이 삭제하는 경우 링크 리스트)를 사용하는 것이 좋습니다.숙제로 사용하지 않는 한, 이것은 문제가 되지 않습니다.
컬렉션을 할당(새로운 어레이를 작성)한 후 요소(어레이 복사를 사용하여 컬렉션에서 수행)를 삭제한 후 어레이를 호출(새 어레이를 작성)하면 매번 삭제 시 최적화 문제가 아닌 심각한 프로그래밍 문제가 발생합니다.
예를 들어 100MB의 램을 사용하는 어레이가 있다고 가정해 보겠습니다.이제 반복하여 20개의 요소를 삭제하려고 합니다.
한번 해봐...
그렇게 크지는 않을 거라고 생각하시겠지만, 한 번에 그렇게 많이 삭제한다면 다르게 코드화할 겁니다. 하지만 저는 누군가 그런 추측을 했던 엄청나게 많은 코드를 수정했습니다.
기본 Java 배열에서 요소를 제거할 수 없습니다.다양한 Collections와 Array List를 참조하십시오.
애초에 배열 대신 목록을 사용하는 것이 좋습니다.
List.remove(index)
어레이를 사용할 필요가 있는 경우는, 다음의 2개의 콜을 실시해 주세요.System.arraycopy마마가가 빠빠빠빠
Foo[] result = new Foo[source.length - 1];
System.arraycopy(source, 0, result, 0, index);
if (source.length != index) {
System.arraycopy(source, index + 1, result, index, source.length - index - 1);
}
)Arrays.asList배열 이지만, 레작작작고고고고고고고고고고고고고고고고고고고고고고고고고고고고고고를 지원하지 않는 것 같습니다remove
질문은 Collections API를 사용하지 않고 해결책을 요구하는 것이었다고 생각합니다.성능이 중요한 낮은 수준의 세부 정보나 느슨하게 결합된 SOA 통합에 어레이를 사용할 수 있습니다.나중에 Collections로 변환하여 비즈니스 로직으로 전달해도 됩니다.
낮은 수준의 퍼포먼스에 대해서는 루프 등에 의한 빠르고 더러운 필수 스테이트 믹싱에 의해 이미 난독화되어 있습니다.이 경우 컬렉션과 어레이를 왔다 갔다 하는 것은 번거롭고 읽기 어려우며 리소스를 많이 사용합니다.
그나저나, TopCoder 누구 없어요?항상 그 배열 매개 변수!그러니 경기장에 있을 때 그들을 상대할 수 있도록 준비하세요.
아래는 그 문제에 대한 저의 해석과 해결책입니다.빌 K와 젤로비트가 준 것과는 기능이 다릅니다.또한 요소가 배열에 없는 경우에도 적절하게 처리됩니다.
도움이 됐으면 좋겠네요!
public char[] remove(char[] symbols, char c)
{
for (int i = 0; i < symbols.length; i++)
{
if (symbols[i] == c)
{
char[] copy = new char[symbols.length-1];
System.arraycopy(symbols, 0, copy, 0, i);
System.arraycopy(symbols, i+1, copy, i, symbols.length-i-1);
return copy;
}
}
return symbols;
}
Array Utils API를 사용하여 "멋있게" 삭제할 수 있습니다.어레이에 많은 조작(삭제, 검색, 추가, 포함 등)을 실장합니다.
심플해졌다.을 사용하다
그래, 지금은 이렇게 많이 써.
public static String[] removeElements(String[] input, String deleteMe) {
if (input != null) {
List<String> list = new ArrayList<String>(Arrays.asList(input));
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(deleteMe)) {
list.remove(i);
}
}
return list.toArray(new String[0]);
} else {
return new String[0];
}
}
Bill K와 Dadinn에 의해 쓰여진 몇 가지 전제조건이 더 필요합니다.
Object[] newArray = new Object[src.length - 1];
if (i > 0){
System.arraycopy(src, 0, newArray, 0, i);
}
if (newArray.length > i){
System.arraycopy(src, i + 1, newArray, i, newArray.length - i);
}
return newArray;
배열의 길이는 변경할 수 없지만 새 값을 복사하고 기존 인덱스 번호로 저장하여 인덱스가 보유하는 값을 변경할 수 있습니다.1=mike , 2=mike // 10 = george 11이 마이크 덮어쓰기 1로 이동합니다.
Object[] array = new Object[10];
int count = -1;
public void myFunction(String string) {
count++;
if(count == array.length) {
count = 0; // overwrite first
}
array[count] = string;
}
삭제할 요소를 사용하지 않고 원래 어레이를 다른 어레이로 복사합니다.
보다 간단한 방법은 List, Set... 및 remove() 메서드를 사용하는 것입니다.
어레이의 사이징 다운이 필요 없는 경우는, 삭제할 항목을 마지막 항목과 스왑 합니다.
java 컬렉션 / java commons 컬렉션을 이용하세요!
java.util을 사용합니다.Array List는 다음과 같은 작업을 수행할 수 있습니다.
yourArrayList.remove(someObject);
yourArrayList.add(someObject);
를 사용합니다.ArrayList:
alist.remove(1); //removes the element at position 1
네, 다른 어레이를 만듭니다. : )
언급URL : https://stackoverflow.com/questions/642897/removing-an-element-from-an-array-java
'source' 카테고리의 다른 글
| vue-cli 로더가 webpack-loader에 대한 기본 init에서 작동하지 않음 (0) | 2022.08.13 |
|---|---|
| 항상 true를 반환하는 기본 제공 Java 8 술어? (0) | 2022.08.13 |
| 공백마다 C 문자열 분할 (0) | 2022.08.13 |
| NULL 값 및 '정의되지 않은' 값이 포함된 Prop 유형 검증을 사용하는 VueJ? (0) | 2022.08.13 |
| Vue Router에서 기본 메타 속성 설정 (0) | 2022.08.13 |