`

Java中几个容易忽略的问题

    博客分类:
  • java
 
阅读更多

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/

这里挑选出来的,还有其他的问题大家可以看一下。

分享到:
评论

相关推荐

    Java 里的几个基础概念问题

    抽象是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象包括过程抽象和数据抽象。继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。封装...

    Java Https请求,跳过证书,直接访问

    HTTPS主要通过以下几个步骤确保通信安全: 1. 客户端(如浏览器或Java应用程序)发起一个HTTPS请求。 2. 服务器发送其数字证书,包含公钥和证书颁发机构(CA)的信息。 3. 客户端验证服务器的证书,检查是否由受...

    几个有意思的java程序,考考你的java功底

    ### 几个有意思的Java程序,考考你的Java功底 #### Introduction 本文将解析一个有趣的Java编程谜题,旨在挑战并提升读者对于Java语言特性的理解。谜题出自《Return of the Puzzlers》一书,由Joshua Bloch与Neal ...

    Java编程中须注意的细节.pdf

    下面将详细阐述文档中提到的Java编程中应注意的几个关键细节。 1. 数值表达式中的奇偶判断 在Java中,判断一个整数是否为奇数时,应避免使用i%2==1的表达式,因为当整数i为负数时,例如-1%2的结果为-1,这并不是...

    JAVA 访问修饰符 及 protected 几点被人忽略的致命要害

    ### JAVA 访问修饰符及 protected 的几点被人忽略的致命要害 #### 一、概述 在 Java 中,访问控制修饰符用于控制类、方法、变量等成员的可见性。Java 提供了四种不同的访问级别:`private`、`protected`、`默认`...

    java实现读取证书访问https接口

    总结来说,Java实现读取证书访问HTTPS接口涉及以下几个关键步骤: 1. 读取不同格式的证书并将其转换为Java `Certificate` 对象。 2. 创建自定义的`SSLSocketFactory`,加载证书和KeyStore。 3. 使用自定义的`...

    java3d编程教程

    为了深入理解Java 3D编程,我们首先需要明确几个关键概念。 首先,Java 3D是Java用于显示三维图形的一个扩展库。使用Java 3D编写的程序能够在多种计算机上运行,也可以在互联网上执行。Java 3D类库提供了一个比...

    Java中的位运算

    在进行位运算时,需要注意以下几个方面: 1. **整型和长整型的位数**:整型是32位,长整型是64位。如果移位操作数超出了该位数,则取模计算。 - 示例:`5 的结果为 `40`,与 `5 完全相同。 2. **移位超过数据类型...

    java中3个json工具分析测试

    测试方面,我们可以从以下几个维度来评估这些库的性能和功能: 1. **序列化与反序列化速度**:通过大量数据的序列化和反序列化操作,比较它们的执行时间。 2. **内存消耗**:观察在处理相同数据时,各库的内存占用...

    Java实现将word转换为html的方法示例【doc与docx格式】

    将word文档转换为html格式的步骤可以分为以下几个步骤: 1. 读取word文档,使用Apache POI库来读取word文档。 2. 将word文档转换为XHTML格式,使用XHTMLConverter类来实现转换。 3. 设置转换的配置,例如设置图片...

    java 异常详解,java异常分类,创建自己的异常

    Java 异常处理可以分为以下几个步骤: 1. 抛出异常:在 Java 中,创建一个异常对象并把它送到运行系统叫做抛出异常。 2. 捕捉异常:在抛出异常后,运行系统将寻找合适的方法来处理异常。如果产生的异常类与所处理的...

    Compic.zip_Compic_JAVACV

    在JavaCV中,计算两张图片的相似度通常涉及以下几个步骤: 1. **图像预处理**:首先,我们需要对图片进行预处理,包括灰度化、直方图均衡化、降噪等操作,以减少环境因素对图像特征的影响,提高比较的准确性。 2. ...

    java基础多线程练习题(1)

    在Java编程语言中,多线程是核心特性之一,它使得程序可以同时执行多个不同的任务,从而提高了系统资源的利用率和程序的响应速度。本文将深入探讨Java中的多线程概念,以及如何通过实践来提升对这一主题的理解。 ...

    计算java对象大小

    在Java编程语言中,计算一个对象的大小是一个相对复杂的过程,因为对象的内存布局涉及到多个因素,包括对象头、实例字段、对齐填充等。这个主题通常与性能优化和内存管理有关,尤其是在处理大规模数据结构时。这篇...

    在Java中使用反射API的一个实例

    首先,要使用反射API,我们需要导入`java.lang.reflect`包中的几个关键类:`Class`、`Constructor`、`Method`和`Field`。这些类分别代表类对象、构造器对象、方法对象和字段对象。 1. **获取类对象**: 要使用反射...

    Java Exception 几种不适当的处理

    调用者容易忽略错误返回码,导致问题难以定位;多处调用同一函数时,需重复判断返回值,增加了代码的冗余度。 #### 5. 不清楚CheckedException与RuntimeException的区别 CheckedException与RuntimeException是Java...

    bookManager_java图书馆最新_java图书馆mysql_java_

    基于以上信息,我们可以详细讨论以下几个关键知识点: 1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,以其跨平台、健壮性和安全性而闻名。在这个图书馆管理系统中,Java被用来编写业务逻辑、用户界面...

    Rss格式书写规范和java中解析dom的四种方式

    RSS 格式书写规范和 Java 中解析 DOM 的四种方式 RSS(Really Simple Syndication,简易信息聚合)是一种 XML 方言,用于连锁 Web 内容和元数据。RSS 2.0 是当前最常用的版本,且与 0.91 向后兼容。RSS 文件由一个 ...

Global site tag (gtag.js) - Google Analytics