package otherLearnTest;
import org.junit.Test;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* List与数组的相互转换
*/
public class ArrayToListTransform {
Integer[] integerArray = {11, 22, 33};
/**
* 数组转List
* Arrays.asList
* asList()方法。这不是最好的,因为asList()返回的列表的大小是固定的
* 果添加或删除列表中的元素,程序会抛出异常UnsupportedOperationException。
*/
@Test
public void asList() {
List<Integer> list = Arrays.asList(integerArray);
System.out.println(list);
}
/**
* 使用Collections.addAll
* 可以添加元素
*/
@Test
public void collectionAddAll() {
List list = new ArrayList();
Collections.addAll(list, integerArray);
list.add(3);
System.out.println(list);
}
/**
* list.toArray(new String[list.size])
* 这里要注意list类型,和数组的类型是一致的,这里我默认list是string,假如list是Integer类型,那就是list.toArray(new Integer[list.size])
* 使用toArray,数组空间的大小length:
* 1.等于0:动态创建与size大小相同的数组,性能最好
* 2.大于0但是小于size:重新创建大小等于size的数组,增加GC负担
* 3.等于szie,在高并发的情况下,数组创建完成之后,size正在变大的情况,影响与2一致
* 4.大小等于size,空间浪费,且在size出插入null值,存在NPE隐患【NPE(Null Pointer Exception)】
*/
@Test
public void toArray() {
List<Integer> integerList = new ArrayList<>();
integerList.add(11);
integerList.add(22);
Integer[] integers = integerList.toArray(new Integer[0]);
for (Integer integer : integers) {
System.out.println(integer);
}
}
/**
* list.toStream.toArray(String[]:new)
* <p>
* 同理list是什么类型,后面就是要写什么类型的数组
*/
@Test
public void stream() {
List<Integer> integerList = new ArrayList<>();
integerList.add(11);
integerList.add(22);
Integer[] integers = integerList.stream().toArray((x) -> {
return new Integer[x];
});
for (Integer integer : integers) {
System.out.println(integer);
}
}
}