1.数组转换成list
将数组转成成List一般使用Arrays.asList()这个方法。
List<String> staticList = Arrays.asList(strArray);
查看源代码可以看到,这里生成的List是Arrays的内部静态类,这个List继承了了AbstractList,但有一些方法没有实现。比如add,delete方法。所以这里直接生成的不能对List的大小进行改变。如果直接调用add或者其他方法会抛出:UnsupportedOperationException()。
那么,如何才能将数组转换成List并且可以进行更改列表大小呢?
可以直接这样使用:
List<String> arrayList = new ArrayList(Arrays.asList(strArray));
将两个list输出Class可以见到不一样的结果。
System.out.println(staticList.getClass());
System.out.println(arrayList.getClass());
输出:
class java.util.Arrays$ArrayList
class java.util.ArrayList
2.从List删除元素
先来看看两种错误的删除元素方法。
第一种情况会抛出异常ConcurrentModificationException
@Test public void rmFromListFail() { //It will throw out ConcurrentModificationException. ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d")); for (String s : list) { if (s.equals("a")) list.remove(s); } }
这一种情况会得到错误的结果。
@Test public void rmFromListFail1() { ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d")); for (int i = 0; i < list.size(); i++) { list.remove(i); } System.out.println(list); }
成功的方法,使用Iterator
@Test public void rmFromListOK(){ ArrayList<String> list = new ArrayList<String>(Arrays.asList("a", "b", "c", "d")); Iterator<String> iter = list.iterator(); while (iter.hasNext()) { String s = iter.next(); if (s.equals("a")) { iter.remove(); } } System.out.println(list);
上面两个问题是我从
http://www.programcreek.com/2014/05/top-10-mistakes-java-developers-make/
这里挑选出来的,还有其他的问题大家可以看一下。
相关推荐
抽象是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象包括过程抽象和数据抽象。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。封装...
HTTPS主要通过以下几个步骤确保通信安全: 1. 客户端(如浏览器或Java应用程序)发起一个HTTPS请求。 2. 服务器发送其数字证书,包含公钥和证书颁发机构(CA)的信息。 3. 客户端验证服务器的证书,检查是否由受...
### 几个有意思的Java程序,考考你的Java功底 #### Introduction 本文将解析一个有趣的Java编程谜题,旨在挑战并提升读者对于Java语言特性的理解。谜题出自《Return of the Puzzlers》一书,由Joshua Bloch与Neal ...
下面将详细阐述文档中提到的Java编程中应注意的几个关键细节。 1. 数值表达式中的奇偶判断 在Java中,判断一个整数是否为奇数时,应避免使用i%2==1的表达式,因为当整数i为负数时,例如-1%2的结果为-1,这并不是...
### JAVA 访问修饰符及 protected 的几点被人忽略的致命要害 #### 一、概述 在 Java 中,访问控制修饰符用于控制类、方法、变量等成员的可见性。Java 提供了四种不同的访问级别:`private`、`protected`、`默认`...
总结来说,Java实现读取证书访问HTTPS接口涉及以下几个关键步骤: 1. 读取不同格式的证书并将其转换为Java `Certificate` 对象。 2. 创建自定义的`SSLSocketFactory`,加载证书和KeyStore。 3. 使用自定义的`...
为了深入理解Java 3D编程,我们首先需要明确几个关键概念。 首先,Java 3D是Java用于显示三维图形的一个扩展库。使用Java 3D编写的程序能够在多种计算机上运行,也可以在互联网上执行。Java 3D类库提供了一个比...
在进行位运算时,需要注意以下几个方面: 1. **整型和长整型的位数**:整型是32位,长整型是64位。如果移位操作数超出了该位数,则取模计算。 - 示例:`5 的结果为 `40`,与 `5 完全相同。 2. **移位超过数据类型...
测试方面,我们可以从以下几个维度来评估这些库的性能和功能: 1. **序列化与反序列化速度**:通过大量数据的序列化和反序列化操作,比较它们的执行时间。 2. **内存消耗**:观察在处理相同数据时,各库的内存占用...
将word文档转换为html格式的步骤可以分为以下几个步骤: 1. 读取word文档,使用Apache POI库来读取word文档。 2. 将word文档转换为XHTML格式,使用XHTMLConverter类来实现转换。 3. 设置转换的配置,例如设置图片...
Java 异常处理可以分为以下几个步骤: 1. 抛出异常:在 Java 中,创建一个异常对象并把它送到运行系统叫做抛出异常。 2. 捕捉异常:在抛出异常后,运行系统将寻找合适的方法来处理异常。如果产生的异常类与所处理的...
在JavaCV中,计算两张图片的相似度通常涉及以下几个步骤: 1. **图像预处理**:首先,我们需要对图片进行预处理,包括灰度化、直方图均衡化、降噪等操作,以减少环境因素对图像特征的影响,提高比较的准确性。 2. ...
在Java编程语言中,多线程是核心特性之一,它使得程序可以同时执行多个不同的任务,从而提高了系统资源的利用率和程序的响应速度。本文将深入探讨Java中的多线程概念,以及如何通过实践来提升对这一主题的理解。 ...
在Java编程语言中,计算一个对象的大小是一个相对复杂的过程,因为对象的内存布局涉及到多个因素,包括对象头、实例字段、对齐填充等。这个主题通常与性能优化和内存管理有关,尤其是在处理大规模数据结构时。这篇...
首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、方法对象和字段对象。 1. **获取类对象**: 要使用反射...
调用者容易忽略错误返回码,导致问题难以定位;多处调用同一函数时,需重复判断返回值,增加了代码的冗余度。 #### 5. 不清楚CheckedException与RuntimeException的区别 CheckedException与RuntimeException是Java...
基于以上信息,我们可以详细讨论以下几个关键知识点: 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和安全性而闻名。在这个图书馆管理系统中,Java被用来编写业务逻辑、用户界面...
RSS 格式书写规范和 Java 中解析 DOM 的四种方式 RSS(Really Simple Syndication,简易信息聚合)是一种 XML 方言,用于连锁 Web 内容和元数据。RSS 2.0 是当前最常用的版本,且与 0.91 向后兼容。RSS 文件由一个 ...