- 浏览: 972594 次
- 性别:
- 来自: 山西
文章分类
最新评论
-
白小默:
你好 可以提供下源码DEMO吗,不知为何,我导出来的excel ...
jxls 使用模板文件导出生成excel -
zkzqzzz:
博主威武!
让微信二维码扫描您的APK -
zkzqzzz:
感谢博主 原来那些类都不是必须的 或者自己写!!博主真棒 ...
抢红包插件实现原理浅析 -
zkzqzzz:
博主 请问你的其他类在哪里呢?
抢红包插件实现原理浅析 -
zkzqzzz:
其他类在哪呢?
抢红包插件实现原理浅析
主题:List删除元素,复制元素
平台:Window + Eclipse3.3 + JDK6
懒程序员,在代码越写越多的情况下,总想着使用把代码精简一下,能不写if else的,能不写for循环的尽量不想写,但是遇到的问题都要解决的呀,因此调用同逻辑的已存在方法便是首选。
今天就集合类(List)两个容易出错的方法做个记录,可以引以为戒,并且也提供正常的使用方式, 都是在java.utils包,方便使用。
- package com.longer.list;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.Iterator;
- import java.util.List;
- import junit.framework.TestCase;
- /**
- *
- * @author Longer
- * Apr 23, 2010 2:49:13 PM
- */
- public class ListTest extends TestCase {
- class TempBean{
- public TempBean( String str ){
- this.str = str;
- }
- String str;
- public String getStr() {
- return str;
- }
- public void setStr(String str) {
- this.str = str;
- }
- }
- List<TempBean> tempList = null;
- protected void setUp() throws Exception {
- super.setUp();
- tempList = new ArrayList<TempBean>();
- tempList.add( new TempBean("1") );
- tempList.add( new TempBean("2") );
- tempList.add( new TempBean("30") );
- tempList.add( new TempBean("31") );
- tempList.add( new TempBean("3") );
- }
- protected void tearDown() throws Exception {
- super.tearDown();
- tempList.clear();
- tempList = null;
- }
- public void testRemove1(){
- for (TempBean bean : tempList ) {
- //exception:java.util.ConcurrentModificationException
- //tempList.remove( bean );
- }
- System.out.println( tempList );
- }
- public void testRemove2(){
- for (int i = 0; i < tempList.size(); i++) {
- TempBean bean = tempList.get(i);
- tempList.remove( i );//or tempList.remove(bean);
- i--;
- }
- System.out.println( tempList );
- }
- public void testRemove3(){
- System.out.println("before remove:" + tempList );
- for (Iterator iterator = this.tempList.iterator(); iterator.hasNext();) {
- iterator.remove();
- //exception:java.lang.IllegalStateException
- //tempList.add( new TempBean("") );
- }
- System.out.println("after remove:"+ tempList );
- }
- public void testCopy1(){
- List<TempBean> newList = new ArrayList<TempBean>();
- //exception:java.lang.IndexOutOfBoundsException: Source does not fit in dest
- //Collections.copy( newList, tempList );
- }
- public void testCopy2(){
- List<TempBean> newList = new ArrayList<TempBean>(Arrays.asList(new TempBean[ this.tempList.size()]));
- Collections.copy( newList, tempList );
- System.out.println( newList );
- }
- }
package com.longer.list; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; /** * * @author Longer * Apr 23, 2010 2:49:13 PM */ public class ListTest extends TestCase { class TempBean{ public TempBean( String str ){ this.str = str; } String str; public String getStr() { return str; } public void setStr(String str) { this.str = str; } } List<TempBean> tempList = null; protected void setUp() throws Exception { super.setUp(); tempList = new ArrayList<TempBean>(); tempList.add( new TempBean("1") ); tempList.add( new TempBean("2") ); tempList.add( new TempBean("30") ); tempList.add( new TempBean("31") ); tempList.add( new TempBean("3") ); } protected void tearDown() throws Exception { super.tearDown(); tempList.clear(); tempList = null; } public void testRemove1(){ for (TempBean bean : tempList ) { //exception:java.util.ConcurrentModificationException //tempList.remove( bean ); } System.out.println( tempList ); } public void testRemove2(){ for (int i = 0; i < tempList.size(); i++) { TempBean bean = tempList.get(i); tempList.remove( i );//or tempList.remove(bean); i--; } System.out.println( tempList ); } public void testRemove3(){ System.out.println("before remove:" + tempList ); for (Iterator iterator = this.tempList.iterator(); iterator.hasNext();) { iterator.remove(); //exception:java.lang.IllegalStateException //tempList.add( new TempBean("") ); } System.out.println("after remove:"+ tempList ); } public void testCopy1(){ List<TempBean> newList = new ArrayList<TempBean>(); //exception:java.lang.IndexOutOfBoundsException: Source does not fit in dest //Collections.copy( newList, tempList ); } public void testCopy2(){ List<TempBean> newList = new ArrayList<TempBean>(Arrays.asList(new TempBean[ this.tempList.size()])); Collections.copy( newList, tempList ); System.out.println( newList ); } }
异常解释:
1:testRemove1-->java.util.ConcurrentModificationException
此类的JavaDOC部分原文:
This exception may be thrown by methods that have detected concurrent modification of an object when such modification is not permissible。
简单翻译:
检测到一个对象存在同步修改,并且此修改不被允许的情况下,此异常将被方法抛出。
因此, 可以看出List是不支持同步修改的,其实整个Collection、Map都与List一样的情况,详细的原因得从迭代器Iterator去研究,这里不做分析。大概理解是Iterator在遍历的时间内,其源对象索引发生了改变,导致了不同步现象。
2)testRemove3-->java.lang.IllegalStateException
此类的JavaDOC部分原文:
Signals that a method has been invoked at an illegal or inappropriate time
简单翻译:
信息灯,一个方法在非法或者不恰当的时间内被调用。
因此, 问题的根源同上。
3)testCopy1-->java.lang.IndexOutOfBoundsException
Collections.copy JavaDOC部分原文:
......The destination list must be at least as long as the source list.......
简单翻译:
目的list必须至少要与源list等长。(目的List可以比源List长度长)
因此, 它这里指的长度是List里的size()方法值,我们都知道new ArrayList()初始化的时候size()等于0,即便是你使用new ArrayList(10)来初始化,也只是预设了一个initialCapacity==10的存储空间,size()还是等于0。因此在使用Collections.copy之前,需要把目的List加一些空的元素,直到目的List的size()值与源List的size()值等长(或更长)。
发表评论
-
java通过sftp JSch 上传文件下载文件查看文件目录,测试可用
2019-12-19 18:19 972基于maven ... -
服务器之间的 zip 文件定时传送
2019-12-19 10:28 5191、expect 安装 将expect和tcl的软 ... -
Java/web/jsp根据pdf模板生成荣誉证书PDF文件
2019-07-19 14:48 9551.前言 最近博主在 ... -
Java生成荣誉证书PDF文件
2019-07-19 13:08 1380Java生成荣誉证书PD ... -
百度云API刷脸
2019-07-13 11:41 631刷脸登录是基于人工智能、生物识别、3D传感、大数据风控技术, ... -
maven--maven配置多个源文件夹
2019-06-13 21:32 930需求 Maven 为我们提供了一致的项目目录配置(源文件 ... -
绿盟检测出“检测到目标URL存在http host头攻击漏洞”如何解决
2019-06-09 10:00 1001绿盟检测出“检测到目标URL存在http host头攻击漏 ... -
Linux安装apache及其简单的反向代理配置
2019-06-07 09:06 637Apache简介 Apache HTTP Se ... -
Linux二进制安装apache2.4.25
2019-06-07 09:06 714Linux二进制安装apache2.4. ... -
weblogic配置https,http自动跳转转https,ssl
2019-05-21 09:44 942最近,公司要求将http ... -
bootstrap-table组合表头
2019-03-06 10:04 913bootstrap-table组合表头 ... -
[Weblogic]如何清理缓存
2019-03-04 15:23 857[Weblogic]如何清理缓存 ... -
Guns第十节Swagger的讲解
2019-01-23 16:51 6422018年08月01日 15:54:30 ze ... -
Anaconda详细安装使用教程
2019-01-22 15:07 613关注微信公众号【Mi ... -
Windows系统下Eclipse上搭建Python开发环境
2019-01-22 15:00 328Windows系统下Eclipse上搭 ... -
Python 3.6 中使用pdfminer解析pdf文件
2019-01-22 14:50 935所使用python环境为最新 ... -
Python提取PDF内容(文本、图像、线条等)
2019-01-22 14:43 7545使用Python抽取PDF文件内 ... -
用python解析pdf中的文本与表格【pdfplumber的安装与使用】
2019-01-22 14:40 1533我们接触到的很多文档资料都是以pdf格式存在的,比如:论文, ... -
java实现PDF转HTML
2019-01-21 10:14 923java实现PDF转HTML 问题场景: ... -
JAVA PDFBOX 读取PDF表格
2019-01-18 17:39 2936最近在帮公司做工具,需要读取PDF中表格的数据。网上查了, ...
相关推荐
在Java编程语言中,`List.removeAll()`方法是一个非常实用的函数,它允许我们从列表中一次性移除所有指定元素。这个方法是集合框架的一部分,它提供了高效的方式来进行元素的删除操作。本文将深入探讨`removeAll()`...
"javaList用法详解" Java 中的 List 用法是指在 Java 编程语言中使用 List 集合的方法和实现方式。List 集合是 Java 中的一种常用的集合类型,提供了许多实用的方法和实现类,下面将详细介绍 List 用法和实例。 ...
在Java编程中,`List`过滤是一个常见的任务,它涉及到集合操作和条件判断。当我们需要从一个`List`中筛选出满足特定条件的元素时,Java提供了多种方式来实现这一功能。这篇博客“java list 过滤”可能深入探讨了这些...
根据提供的文件信息,标题与描述均指向了Java中List的操作方法。然而,给出的部分内容却是一段关于导入Excel文件到Web应用中的代码片段,并没有直接涉及List的具体操作方法。因此,我们将结合标题与描述,围绕Java中...
### Java 计算同一 List 中是否有相同值 在 Java 编程中,判断一个 `List` 中是否存在重复元素是一项常见的需求。特别是在数据处理、验证或分析等场景中,确保数据的唯一性对于维持数据完整性至关重要。 #### 核心...
JAVA中的LIST接口提供了多个重载的REMOVE方法,分别传入参数为索引index、Object、Integer等,这些重载方法的调用原理是什么?在实际开发中,我们经常会遇到这种情况,例如在移除集合元素时,究竟是调用哪个REMOVE...
在Java编程语言中,`List`接口是集合框架的一个重要组成部分,它代表了一种有序的、可变大小的集合。`List`接口继承自`Collection`接口,它提供了额外的功能,比如按照索引访问元素、保持元素的顺序以及允许重复元素...
1. **日志添加**:当发生某个操作(如注册、登录、登出)时,我们可以创建一个日志对象(如Log类),包含时间、操作类型和详细信息等字段,然后使用`list.add(log)`将其添加到列表。 2. **日志删除**:根据特定条件...
- `List`接口中的方法`add`, `remove`, `set`等操作可能会影响迭代器,因此在遍历列表时应避免修改列表,除非使用`Iterator`的`remove()`方法。 - `List`接口还提供了一些其他的方法,如`contains()`, `indexOf()`, ...
在Java编程语言中,`List`接口是集合框架的一个重要组成部分,它提供了顺序存储和访问元素的能力。`remove()`方法是`List`接口中的一个关键操作,用于从列表中删除指定的元素或根据索引移除元素。在使用`remove()`...
"javalist.zip_list集合 java"这个标题暗示我们将探讨Java中的List集合以及它的应用。描述中提到“java中集合list的应用非常重要”,这确实不假,因为List在处理有序数据时具有广泛的应用场景。 List接口位于java....
在Java编程语言中,List接口是集合框架的重要组成部分,它代表了一个有序的元素序列,允许重复元素,并且保持插入顺序。对于初学者来说,理解如何在List中进行增删改查操作是掌握Java集合框架的基础。本文将详细介绍...
这个项目包含添加联系人、搜索联系人、删除联系人以及查询联系人等核心功能,是学习Java集合框架(特别是List接口)及其相关API的好例子。下面我们将深入探讨相关的Java知识点。 1. **Java集合框架**:Java集合框架...
如果在遍历过程中需要移除元素,必须使用`it.remove()`,直接调用`list.remove()`会导致并发修改异常(ConcurrentModificationException)。 ### 第二种:增强型for循环(foreach) ```java for (A a : list) { /...
Java List 是一种集合框架中的接口,它代表了一个有序的、可重复的元素序列。与数组类似,List 可以通过角标访问元素,但不同的是,List 的大小是可变的,可以在运行时动态地添加或删除元素。下面我们将详细讨论 ...
在Java编程语言中,List接口是集合框架的重要组成部分,它属于Collection接口的子接口。List接口主要用于存储有序的、可重复的元素序列。与Set不同,List允许元素重复,并且保持插入时的顺序。本篇将详细介绍Java中...
【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...
Collection 是集合框架中的根接口,提供了基本的集合操作,如 add、remove、contains 等。Collection 接口没有实现类,因此需要通过其子接口来实现。 Set 是一个不能包含重复元素的集合,SortedSet 是一个按照升序...
Collection接口定义了许多通用方法,如`add()`, `remove()`, `contains()`, `size()`等,这些方法在List和Set中都有所实现。 1.2.2 迭代器 迭代器(Iterator)是访问集合元素的主要方式,通过`iterator()`方法获取...