java基础---->数组的基础使用(二)
2023-09-27 14:20:11 时间
这里对List(jdk 1.7)列表里面的一些方法做一些简单的分析,以避免有些函数的误用。手写瑶笺被雨淋,模糊点画费探寻,纵然灭却书中字,难灭情人一片心。
List中注意的方法
一、Arrays.asList(T...arrays)方法
@Test
public void listAsLists() {
List<String> strings = Arrays.asList("huhx", "linux", "liuling");
System.out.println(strings.size());
strings.add("tomhu"); // 会报出异常
System.out.println(strings);
}
这里面对于Arrays.asList返回的列表,对这个列表的修改、删除和添加操作都是不合法的,也就是抛出异常。首先我们看一下源码:
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {
return new ArrayList<>(a);
}
非常要注意的是这里面的ArrayList不是我们常用的java.util里面的ArrayList,它是Arrays里面的一个内部类。但是他和java.util包中的ArrayList一样是继承自AbstractList
private static class ArrayList<E> extends AbstractList<E> implements RandomAccess, java.io.Serializable {
private static final long serialVersionUID = -2764017481108945198L;
private final E[] a;
}
对于这个生成的ArrayList,里面并没有重写父类的add、remove和set方法。所以我们上述调用add方法,实际会调用父类AbstractList的add方法。而对于这些操作列表的方法,AbstractList都是抛出UnsupportedOperationExceptionn异常的。代码如下:
public E set(int index, E element) {
throw new UnsupportedOperationException();
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
}
public E remove(int index) {
throw new UnsupportedOperationException();
}
对于正版的ArrayList,也就是java.util包下面的。由于它重写了这些操作方法,自然是不会抛出异常的。
二、list转换数组方法toArray()
@Test
public void listAsArrays() {
List<String> lists = new ArrayList<>();
lists.add("linux");
lists.add("huhx");
// size = length
String[] arrays = new String[lists.size()];
String[] strings = lists.toArray(arrays);
System.out.println(Arrays.toString(arrays) + Arrays.toString(strings));
// size > length
String[] arrays1 = new String[1];
String[] strings1 = lists.toArray(arrays1);
System.out.println(Arrays.toString(arrays1) + Arrays.toString(strings1));// size < length
// size < length
String[] arrays2 = new String[3];
String[] strings2 = lists.toArray(arrays2);
System.out.println(Arrays.toString(arrays2) + Arrays.toString(strings2));
}
程序输出的结果如下:
[linux, huhx][linux, huhx]
[null][linux, huhx]
[linux, huhx, null][linux, huhx, null]
我们看一下toArray的源码,这里面的ArrayList是java.util包中的那个。其实就是使用底层的数组复制。
public <T> T[] toArray(T[] a) {
if (a.length < size)
// Make a new array of a's runtime type, but my contents:
return (T[]) Arrays.copyOf(elementData, size, a.getClass());
System.arraycopy(elementData, 0, a, 0, size);
if (a.length > size)
a[size] = null;
return a;
}
相关文章
- Java获取指定时间段的年份(开始、结束时间)、月份(开始、结束时间)、天数(开始、结束时间)
- java基础——网络编程
- java基础集合数组间的转换(java集合五)
- [转] 再探java基础——break和continue的用法
- 使用Java API创建(create),查看(describe),列举(list),删除(delete)Kafka主题(Topic)--转载
- 【杂项】+股票信息获取(Java、Python)
- 第二十四节:Java语言基础-讲解数组的综合应用
- 第二十三节:Java语言基础-详细讲解函数与数组
- 第二十三节:Java语言基础-详细讲解函数与数组
- 第一阶段:Java内功秘籍-线性表
- Mac下添加java环境变量
- docker 部署java web应用_使用Docker部署JavaWeb项目
- java面向对象基础(三):对象转型和多态
- java基础day13---引用数据类型
- java基础day11---空指针异常----引用类型--自定义类型赋值--封装
- Java学习-012-文件删除实例及源代码
- java 8 Streams简介
- 十大基础排序算法[java源码+动静双图解析+性能分析]
- Java_jdbc 基础笔记之十二 数据库连接 (beanutils )
- 浅析几种Java Http请求库的使用:HttpURLConnection、RestTemplate、OKhttp、Feign/OpenFeign
- 【历史上的今天】12 月 24 日:姚期智出生;微软在 Java 反垄断案中败诉;GIF 图像格式获得专利保护
- Using JAAS Authentication in Java Clients---weblogic document
- java 部分隐藏字段