如题,直接进入主题了,一个测试代码,一个输出日志,配合上该方法的JavaDoc
1.测试代码
public static void main(String[] args) {
List<String> strList = new ArrayList<String>();
String tempStr = "str ";
for (int i = 0; i < 10; i++) {
strList.add(tempStr + i);
}
String[] tempArr = new String[15];
tempArr[0] = "tempStr0";
String[] tempArr2 = new String[15];
String[] tempArr3 = new String[0];
String[] strList2Arr = strList.toArray(tempArr);
String[] strList2Arr2 = strList.toArray(tempArr2);
String[] strList2Arr3 = strList.toArray(tempArr3);
System.out.println("============================================");
System.out.println("strList2Arr = " + strList2Arr);
System.out.println("tempArr = " + tempArr);
System.out.println("============================================");
System.out.println("strList2Arr2 = " + strList2Arr2);
System.out.println("tempArr2 = " + tempArr2);
System.out.println("============================================");
System.out.println("strList2Arr3 = " + strList2Arr3);
System.out.println("tempArr3 = " + tempArr3);
printStringArray("strList2Arr", strList2Arr);
printStringArray("strList2Arr2", strList2Arr2);
printStringArray("strList2Arr3", strList2Arr3);
Integer[] intList2Arr3 = strList.toArray(new Integer[0]); // test java.lang.ArrayStoreException
}
private static void printStringArray(String arrName, String[] arr) {
System.out.println("============================================");
System.out.println(arrName);
for (String str : arr) {
System.out.print(str + " ");
}
System.out.println();
}
2.输出日志
============================================
strList2Arr = [Ljava.lang.String;@3b061299
tempArr = [Ljava.lang.String;@3b061299
============================================
strList2Arr2 = [Ljava.lang.String;@baf1915
tempArr2 = [Ljava.lang.String;@baf1915
============================================
strList2Arr3 = [Ljava.lang.String;@1497b7b1
tempArr3 = [Ljava.lang.String;@749cd006
============================================
strList2Arr
str 0 str 1 str 2 str 3 str 4 str 5 str 6 str 7 str 8 str 9 null null null null null
============================================
strList2Arr2
str 0 str 1 str 2 str 3 str 4 str 5 str 6 str 7 str 8 str 9 null null null null null
============================================
strList2Arr3
str 0 str 1 str 2 str 3 str 4 str 5 str 6 str 7 str 8 str 9
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.Arrays.copyOf(Unknown Source)
at java.util.ArrayList.toArray(Unknown Source)
at com.dj.generics.Test.main(Test.java:44)
3.java.util.List#toArray方法的JavaDoc
<String> String[] java.util.List.toArray(String[] a)
toArray
<T> T[] toArray(T[] a)
Returns an array containing all of the elements in this list in proper sequence (from first to last element); the runtime type of the returned array is that of the specified array. If the list fits in the specified array, it is returned therein. Otherwise, a new array is allocated with the runtime type of the specified array and the size of this list.
If the list fits in the specified array with room to spare (i.e., the array has more elements than the list), the element in the array immediately following the end of the list is set to null. (This is useful in determining the length of the list only if the caller knows that the list does not contain any null elements.)
Like the toArray() method, this method acts as bridge between array-based and collection-based APIs. Further, this method allows precise control over the runtime type of the output array, and may, under certain circumstances, be used to save allocation costs.
Suppose x is a list known to contain only strings. The following code can be used to dump the list into a newly allocated array of String:
String[] y = x.toArray(new String[0]);
Note that toArray(new Object[0]) is identical in function to toArray().
Specified by:
toArray in interface Collection<E>
Parameters:
a - the array into which the elements of this list are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose.
Returns:
an array containing the elements of this list
Throws:
ArrayStoreException - if the runtime type of the specified array is not a supertype of the runtime type of every element in this list
NullPointerException - if the specified array is null
小结:
1.toArray()直接返回Object[],没有用到泛型概念,需要程序员在代码中进行类型转换;
2.toArray(T[] a)引入泛型概念,以用户指定类型的数组进行转换;如果用户调用toArray时传入的数组大小足以容纳list内的元素,那么编译器将会清空该数组,并把list内数据按照原有顺序存放到该数组内,该数组内剩余的存储空间都会被分配null(仿佛这种用法比较少);而如果用户传入的数组大小不足以容纳list内的元素,编译器将会在运行时以list的size创建一个和用户传入参数一样数据类型的数组,并返回(常见到调用toArray时直接新建一个length=0的数组);
3.如果传入的数组的数据类型和list内实际元素的数据类型不相符合,将会在运行时抛出ArrayStoreException
-over
分享到:
相关推荐
### Java学习笔记整理 #### 1. Java简介 ##### 1.1 计算机编程和开发语言 计算机系统由硬件系统和软件系统组成。软件系统又进一步细分为系统软件和应用软件。其中,系统软件包括操作系统、编译系统、数据库系统等...
### Jakarta Commons CookBook 学习笔记 #### 一、Commons Lang: EqualsBuilder and HashCodeBuilder **1.1 概述** `EqualsBuilder` 和 `HashCodeBuilder` 是 Apache Commons Lang 包中提供的两个工具类,用于...
Java 容器(集合)学习笔记 Java 中的容器(集合)是一种组织和管理数据的方式,通过“容器”可以容纳和管理数据。数组是最基本的容器,可以存储多个对象,但它有很多缺点,如长度必须在初始化时指定,数组采用连续...
这篇学习笔记将深入探讨如何在C#中实现这个功能。 首先,我们需要了解ICO文件的结构。ICO文件由一个头部和一个或多个图像块组成。头部包含了文件的类型、图像数量以及图像大小的信息。每个图像块则包含了图像的像素...
return criteriaBuilder.and(predicates.toArray(new Predicate[0])); }; } ``` Criteria API的使用虽然复杂一些,但它提供了更底层的控制,可以创建非常复杂的查询。例如: ```java CriteriaBuilder cb = ...
另外,`clear()`方法可以清空集合,`isEmpty()`检查集合是否为空,`toArray()`则可以将集合转换为数组。对于多线程环境,我们可以使用CopyOnWriteArrayList或ConcurrentSkipListSet等线程安全的集合类。 总的来说,...
`List`接口的方法包括`add(int index, E e)`在指定位置插入元素,`addAll(int index, Collection c)`在指定位置添加一个集合的所有元素,`get(int index)`获取指定索引的元素,`indexOf(E e)`查找元素的索引,`...
- Collection的toArray()方法可以将集合转换为数组,Arrays.asList()可将数组转换为List。 - 使用流(Stream)API可以方便地对集合进行过滤、映射、分组等操作。 10. **集合性能** - 对于不同的集合实现,性能特点...
String[] resultArray = list.stream().filter(s -> s.startsWith("a")).toArray(String[]::new); ``` ### 小结 本章节重点介绍了 Java 8 中 Stream 流的基本概念、特点以及与集合类之间的差异,并深入探讨了函数...
- **从集合到数组**:使用`toArray()`方法可以将集合转换为数组。 #### 三、算法 ##### 3.1 排序 排序是计算机科学中的一个基本问题,涉及到如何将一组数据按照一定的顺序排列起来。在Java中,常用的排序算法包括...