자바 에서 무시 하기 쉬 운 몇 가지 문제

2507 단어 자바
1. 배열 을 list 로 변환
 
배열 을 List 로 바 꾸 는 방법 은 일반적으로 Arrays. asList () 를 사용 합 니 다.
List staticList = Arrays.asList(strArray);
소스 코드 를 보면 알 수 있 듯 이 여기 서 생 성 된 List 는 Arrays 의 내부 정적 클래스 입 니 다. 이 List 는 AbstractList 를 계승 하 였 으 나 일부 방법 은 실현 되 지 않 았 습 니 다.예 를 들 어 add, delete 방법.그래서 여기 서 직접 생 성 된 것 은 List 의 크기 를 바 꿀 수 없습니다.add 나 다른 방법 을 직접 호출 하면: Unsupported Operation Exception () 을 던 집 니 다.
 
그렇다면 어떻게 해야만 배열 을 List 로 바 꾸 고 목록 크기 를 변경 할 수 있 습 니까?
직접 이렇게 사용 가능:
 
List arrayList = new ArrayList(Arrays.asList(strArray));
 
두 list 를 Class 로 출력 하면 다른 결 과 를 볼 수 있 습 니 다.
System.out.println(staticList.getClass());
 
System.out.println(arrayList.getClass());
출력:
class java.util.Arrays$ArrayList
 
class java.util.ArrayList
 
2. List 에서 요소 삭제
먼저 두 가지 잘못된 요소 삭제 방법 을 살 펴 보 자.
첫 번 째 경 우 는 이상 을 던 집 니 다. Concurrent ModificationException.
 
   @Test
    public void rmFromListFail() {
        //It will throw out ConcurrentModificationException.
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));

        for (String s : list) {
            if (s.equals("a")) list.remove(s);
        }
    }

 이런 상황 은 잘못된 결 과 를 얻 을 수 있다.
 
 
 @Test
    public void rmFromListFail1() {
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
        for (int i = 0; i < list.size(); i++) {
            list.remove(i);
        }
        System.out.println(list);
    }

 성공 적 인 방법, Iterator 사용
@Test
    public void rmFromListOK(){
        ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d"));
        Iterator<String> iter = list.iterator();
        while (iter.hasNext()) {
            String s = iter.next();
         
            if (s.equals("a")) {
                iter.remove();
            }
        }
        
        System.out.println(list);
    

 위의 두 문 제 는 제 가...
http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/
여기 서 고 른 것 은 또 다른 문제 가 있 으 니 여러분 이 한번 보 셔 도 됩 니 다.

좋은 웹페이지 즐겨찾기