Python 官方文档:入门教程 => 点击学习
目录emptyList()方法的使用Java Collections.emptyList()方法的注意事项emptyList()Collections是列表的工具类,其中有好多方便实
Collections是列表的工具类,其中有好多方便实用的方法。主要是对列表的查找、替换、排序、反转等操作。今天介绍一下emptyList()方法的使用,因为这个方法有一个大坑!
通过java.util.Collections.emptyList()方法的相关源码可以得知它实际上就是返回了一个空的List,但是这个List和我们平时常用的那个List是不一样的。这个方法返回的List是Collections类的一个静态内部类,它继承AbstractList后并没有实现add()、remove()等方法,因此这个返回值List并不能增加删除元素。
既然这个List不能进行增删操作,那么它有何意义呢?
这个方法主要目的就是返回一个不可变的列表,使用这个方法作为返回值就不需要再创建一个新对象,可以减少内存开销。并且返回一个size为0的List,调用者不需要校验返回值是否为null,所以建议使用这个方法返回可能为空的List。
emptySet()、emptyMap()方法同理。
public static final List EMPTY_LIST = new EmptyList();
public static final <T> List<T> emptyList() {
return (List<T>) EMPTY_LIST;
}
private static class EmptyList extends AbstractList<Object> implements RandoMaccess,Serializable {
// use serialVersionUID from jdk 1.2.2 for interoperability
private static final long serialVersionUID = 8842843931221139166L;
public int size() {return 0;}
public boolean contains(Object obj) {return false;}
public Object get(int index) {
throw new IndexOutOfBoundsException("Index: "+index);
}
// Preserves singleton property
private Object readResolve() {
return EMPTY_LIST;
}
}
java.util.Collections.emptyList()方法的测试
public class CollectionsTest {
public static void main(String[] a) {
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
System.out.println(list);
list = Collections.emptyList();
System.out.println(list);
list.add(3);
}
}
//执行结果
[1, 2]
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(AbstractList.java:131)
at java.util.AbstractList.add(AbstractList.java:91)[]
at com.jiuqi.pay.importfile.test.CollectionsTest.main(CollectionsTest.java:22)
作用:返回一个空的List(使用前提是不会再对返回的list进行增加和删除操作);
好处:
1. new ArrayList()创建时有初始大小,占用内存,emptyList()不用创建一个新的对象,可以减少内存开销;
2. 方法返回一个emptyList()时,不会报空指针异常,如果直接返回Null,没有进行非空判断就会报空指针异常;
注意:此List与常用的List不同,它是Collections类里的静态内部类,在继承AbstractList后并没有实现add()、remove()等方法,所以返回的List不能进行增加和删除元素操作。
示例:
@Test
public void test1() {
String str = "";
List<String> list = getList(str);
System.out.println(list.size());
}
private static List<String> getList(String str) {
if (StringUtils.isBlank(str)) {
// 使用时不会报空指针
return Collections.emptyList();
// 使用null报空指针异常
// return null;
}
List<String> list = new ArrayList<String>();
list.add(str);
return list;
}
增删操作:
@Test
public void test2() {
String str = "abc";
List<String> list = Collections.emptyList();
list.add(str);
System.out.println(list.size());
}
结果:
如果需要对collections.emptyList()进行增删操作的话,就需要将collections.emptyList()转换成ArrayList()进行操作。
示例:
@Test
public void test2() {
String str = "abc";
List<String> list = Collections.emptyList();
List<String> resultList = new ArrayList<>(list);
resultList.add(str);
System.out.println(resultList.size());
System.out.println(resultList);
}
结果:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: java.util.Collections类—emptyList()方法的使用
本文链接: https://www.lsjlt.com/news/157490.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
一口价域名售卖能注册吗?域名是网站的标识,简短且易于记忆,为在线用户提供了访问我们网站的简单路径。一口价是在域名交易中一种常见的模式,而这种通常是针对已经被注册的域名转售给其他人的一种方式。
一口价域名买卖的过程通常包括以下几个步骤:
1.寻找:买家需要在域名售卖平台上找到心仪的一口价域名。平台通常会为每个可售的域名提供详细的描述,包括价格、年龄、流
443px" 443px) https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294.jpg https://www.west.cn/docs/wp-content/uploads/2024/04/SEO图片294-768x413.jpg 域名售卖 域名一口价售卖 游戏音频 赋值/切片 框架优势 评估指南 项目规模
0