Array List 와 배열 의 상호 전환
18310 단어 필기 하 다.
Arrays.asList(T... a);
지정 한 배열 이 지원 하 는 고정 크기 의 목록 을 되 돌려 줍 니 다.코드 테스트 를 해 보 겠 습 니 다.
String[] array = new String[3];
array[0] = "zhangsan";
array[1] = "lisi";
array[2] = "wangwu";
//
List<String> list = Arrays.asList(array);
와, 정말 간단 해 보인다. 그리고 왜 여러 가지 '미 친' 조작 을 시작 하 는 지,
//
System.out.println(list.get(0));
//
list.add(3,"zhaoliu");
//
list.remove(1);
//
System.out.println(list);
실행 해 보 세 요. 콘 솔 출력 이 생각 한 결 과 를 기대 합 니 다...
zhangsan
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:148)
at Test.main(Test.java:64)
what??? 내 가 코드 를 반복 해서 검사 하 는데 이렇게 간단 한 코드 를 다 틀 리 게 쓰 는 거 아니 야? 틀린 거 없 잖 아.도대체 어떻게 된 일 일 까요? 화가 나 서 asList 방법의 소스 코드 를 누 르 면 다음 과 같 습 니 다.
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
Array List 로 돌아 가 는 거 아니에요?하지만 자세히 보면 자바 util. Array List 류 에 도 배열 의 구조 기 라 는 매개 변수 가 없 는 것 을 발견 할 수 있 을 것 입 니 다. 그리고 제 가 이 Array List 를 다시 눌 러 보 니 상상 을 초월 하 는 일 을 발 견 했 습 니 다.
private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess, java.io.Serializable
{
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
ArrayList(E[] array) {
a = Objects.requireNonNull(array);
}
@Override
public int size() {
return a.length;
}
@Override
public Object[] toArray() {
return a.clone();
}
@Override
@SuppressWarnings("unchecked")
public <T> T[] toArray(T[] a) {
int size = size();
if (a.length < size)
return Arrays.copyOf(this.a, size,
(Class<? extends T[]>) a.getClass());
System.arraycopy(this.a, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
@Override
public E get(int index) {
return a[index];
}
@Override
public E set(int index, E element) {
E oldValue = a[index];
a[index] = element;
return oldValue;
}
}
이 종 류 는 Arrays 류 의 정적 내부 류 라 는 것 을 알 수 있 습 니 다. 그 안에 우리 가 자바 util. Array List 류 에 있 는 add (), reove () 등 을 조작 하 는 방법 이 전혀 없습니다. get (), set () 등 방법 만 있 습 니 다. 약간 밝 은 느낌 이 들 지 않 습 니까? 알 리 바 바 바 가 낸 '효율 적 인 코드' 에서 유형 에 대한 표현 을 볼 수 있 습 니 다. 이 귀 는 더 이상 이미지 가 좋 지 않 습 니 다.이 ArrayList 는 다른 ArrayList 가 아 닙 니 다. 하하 하, 하지만 아직 잘 모 르 겠 습 니 다. 이 이상 Unsupported Operation Exception 은 어디서 던 져 야 합 니까? 이 "이 귀" 류 는 AbstractList 에서 계승 되 었 습 니 다.
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
그 렇 군요. 함부로 하면 안 되 겠 네요!!하지만 너 는 이렇게 놀 수 있다.
List<String> lists = new ArrayList<>(Arrays.asList(array));
lists.add("heisi");
System.out.println(lists);
이렇게 하면 조작 할 수 있다.와, 안 치면 몰라, 두 드 리 면 깜짝 이 야.2. 집합 해서 배열 을 이렇게 돌리 면 됩 니 다.
String[] arr = new String[lists.size()];
arr = lists.toArray(arr);
System.out.println(arr.length);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Dubbo (2): zookeeper 등록 센터Zookeeper 는 Apacahe Hadoop 의 하위 프로젝트 로 트 리 형태의 디 렉 터 리 서비스 로 푸 시 변경 을 지원 하 며 Dubbo 서비스의 등록 센터 로 적합 하 며 산업 강도 가 높 아 생산 환경...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.