>Java >java지도 시간 >Java에서 목록 요소를 삭제하는 방법

Java에서 목록 요소를 삭제하는 방법

王林
王林원래의
2020-02-01 20:33:464799검색

Java에서 목록 요소를 삭제하는 방법

Java에서 목록 요소를 삭제하는 방법은 다음과 같습니다.

1. 양수 순서로 삭제

양수 순서로 삭제, 최대 1개의 요소만 삭제해야 하는 경우 삭제 후 루프에서 벗어나려면 break 문만 사용하면 됩니다. 여러 요소를 삭제해야 하는 경우 제어에 주의를 기울이지 않으면 됩니다. 현재 목록의 크기와 다음 요소의 인덱스를 보고하면 java.lang.IndexOutOfBoundsException을 쉽게 보고할 수 있습니다. 예외

public static void remove(List<String> list, String target) {    
for(int i = 0, length = list.size(); i < length; i++){
        String item = list.get(i);        
        if(target.equals(item)){
            list.remove(item);
            length--;
            i--;
        }
    }
}

무료 학습 비디오 튜토리얼 추천: # 🎜🎜#java 동영상 튜토리얼#🎜🎜 #2. 역삭제

역삭제를 사용하면 추가 관리가 필요한 정방향 삭제 문제를 극복할 수 있습니다.

public static void remove(List<String> list, String target) {    
for(int i = list.size() - 1; i >= 0; i--){
        String item = list.get(i);
        if(target.equals(item)){
            list.remove(item);
        }
    }
}

3. Iterator Remove() 메소드 삭제(권장)

public static void remove(List<String> list, String target) {
    Iterator<String> iter = list.iterator();
    while (iter.hasNext()) {
        String item = iter.next();
            if (item.equals(target)) {
            iter.remove();
        }
    }
}

4. CopyOnWriteArrayList 스레드로부터 안전한 삭제

CopyOnWrite 컨테이너를 사용하세요. CopyOnWrite 컨테이너는 쓰기 시 복사되는 컨테이너입니다. 컨테이너에 요소를 추가할 때 현재 컨테이너에 직접 추가하는 것이 아니라 먼저 현재 컨테이너를 복사하여 새 컨테이너를 만든 다음 요소를 추가한 후 새 컨테이너에 요소를 추가한다는 것이 널리 이해되고 있습니다. 그런 다음 원래 컨테이너의 참조가 새 컨테이너를 가리키도록 합니다.

이것의 장점은 현재 컨테이너가 어떤 요소도 추가하지 않기 때문에 잠금 없이 CopyOnWrite 컨테이너를 동시에 읽을 수 있다는 것입니다. 따라서 CopyOnWrite 컨테이너도 읽기와 쓰기를 분리한 아이디어이고, 읽기와 쓰기는 다른 컨테이너입니다.

public static List<String> remove(ArrayList<String> list, String target) {
    CopyOnWriteArrayList<String> cowList = new CopyOnWriteArrayList<String>(list);
    for (String item : cowList) {
            if (item.equals(target)) {
            cowList.remove(item);
        }
    }
                return cowList;
}

참고:

1 CopyOnWriteArrayList를 사용하면 순회 중에 새 요소를 삭제할 수 있을 뿐만 아니라 추가할 수도 있다는 장점이 있습니다.

2 위 메서드는 매개변수 목록을 수정하지 않지만 호출자에게 CopyOnWriteArrayList를 반환합니다. 즉, CopyOnWriteArrayList는 이를 구성하는 목록을 수정하지 않고 내부적으로 목록을 유지합니다. 중요합니다.

3. CopyOnWriteArrayList는 ArrayList의 하위 클래스는 아니지만 List 인터페이스를 구현합니다.

5. 향상된 for 루프 삭제

Enhanced for 루프에서 요소를 삭제하고 루프를 계속하면 요소가 사용될 때 동시성이 발생하므로 java.util.ConcurrentModificationException 예외가 보고됩니다. 예외가 발생하지만 삭제 직후 break 문을 사용하여 루프를 빠져나오면 오류가 발생하지 않으므로 최대 1개의 요소를 삭제하는 데 적합합니다.

public static void remove(List<String> list, String target) {
    for (String item : list) {
            if (item.equals(target)) {
            list.remove(item);
                        break;
        }
    }
}

6. 스트림 API 필터

Java8에 도입된 스트림 API는 List 요소를 삭제하기 위한 새롭고 간단한 메소드 필터를 제공합니다. , 새 개체가 반환되어야 합니다. 다음 예에서는 스트림을 사용하여 컬렉션의 "*" 요소를 삭제하는 방법을 보여줍니다.

List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("*");
list.add("c");
list.add("*");
List<String> result = list
                        .stream()
                        .filter(item -> !"*".equals(item))
                        .collect(Collectors.toList());

추천 관련 기사 및 튜토리얼:

java 입문 튜토리얼

위 내용은 Java에서 목록 요소를 삭제하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.