- 浏览: 64011 次
- 性别:
- 来自: 四川
最新评论
在使用集合中,可能常常需要取集合中的某一部分子集来进行一下操作,于是subList这个方法就映入我们的眼帘,毫不犹豫地使用。
例如以下代码:
public static void main(final String[] args) { List<Object> lists = new ArrayList<Object>(); lists.add("1"); lists.add("2"); lists.add("3"); lists.add("4"); List<Object> tempList = lists.subList(2, lists.size()); tempList.add("6"); System.out.println(tempList); // 1 System.out.println(lists); // 2 }
代码初步写好后,可能我们想达到的效果是:往集合lists的子集合tempList中添加一个元素6,而原有的集合保持不变。
即到达这样的效果:lists = [1, 2, 3, 4],tempList = [3, 4, 6]。但是我们看到实际的结果确是lists里边也添加了元素6。
这是怎么一会事呢,通过查找java原代码我们可以看到:tempList的subList实现代码在AbstractList类里边,然而无论如何,最终的结果都是返回一个AbstractList的子类:SubList(该类是一个使用默认修饰符修饰的类,其源代码位于AbstractList.java类文件里边),
SubList类的构造方法:
SubList(AbstractList<E> list, int fromIndex, int toIndex) { if (fromIndex < 0) throw new IndexOutOfBoundsException("fromIndex = " + fromIndex); if (toIndex > list.size()) throw new IndexOutOfBoundsException("toIndex = " + toIndex); if (fromIndex > toIndex) throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); l = list; offset = fromIndex; size = toIndex - fromIndex; expectedModCount = l.modCount; }
里边,将我们原有的list对象给缓存到SubList类对象的一个属性中去了。
而SubList类的add/remove等修改元素的方法中,都使用l进行了操作:
public void add(int index, E element) { if (index<0 || index>size) throw new IndexOutOfBoundsException(); checkForComodification(); l.add(index+offset, element); expectedModCount = l.modCount; size++; modCount++; }
因此,当我们使用子集合tempList进行元素的修改操作时,会影响原有的list集合。所以在使用subList方法时,一定要想清楚,是否需要对子集合进行修改元素而不影响原有的list集合。
如果需要对子集合的元素进行修改操作而不需要影响原集合时,我们可以使用以下方法进行处理:
public static void main(final String[] args) public static void main(final String[] args) { List<Object> lists = new ArrayList<Object>(); lists.add("1"); lists.add("2"); lists.add("3"); lists.add("4"); //注意这里是和本文顶部的代码不同的.... List<Object> tempList = new ArrayList<Object>(lists.subList(2, lists.size())); tempList.add("6"); System.out.println(tempList); // 1 System.out.println(lists); // 2 }
发表评论
-
struts2 中获取 web资源的方式
2016-01-08 17:02 539在struts2中获取 web资源的方式大致可分为获取扩展 ... -
sql server、db2、oracle 存储过程动态sql语句示例
2015-01-31 19:00 1844Oracle CREATE OR REPLACE PRO ... -
ie9 中出现不明的异常(参数是必选项 (Argument not optional)、尚未实现)等
2015-01-27 23:57 1315<script type="text/jav ... -
SAXParseException: The content of element type "configuration" must match
2014-09-15 23:57 1975在mybatis的配置文件中新增加<databaseI ... -
java.lang.ClassNotFoundException: Cannot find class: DB_VENDOR
2014-09-15 23:45 2018在mybatis 中使用databaseIdProvide ... -
spring mvc3 + fastjson 转换 REST 参数以及输出
2014-03-27 00:16 4263spring 3可以支持Rest风格参数,其内置了jack ... -
eclipse中编辑log4j 的xml配置文件时,自动提示
2014-03-27 00:05 899方法1. 配置log4j.dtd文件: Windows - ... -
java json 转换之 Jackson 框架
2013-08-01 21:50 1178转自:http://www.cnblogs.com/hooj ... -
eclipse/myeclise 自定义注释中的变量名称
2013-07-01 23:18 978eclipse/myeclipse中自带了 ... -
Eclipse Class Decompiler——Java反编译插件
2012-11-08 22:41 1246Eclipse Class Decompiler,整 ... -
struts+spring+hibernate整合问题解决方法 陆续更新中....
2009-01-01 10:33 889在整合ssh过程中出现的问题和解决方法: 一、 严重: Ser ... -
DWR通过Annotation与spring整合
2009-01-21 22:05 672DWR 2.0 增加了一个很有趣的新特性,Annotat ... -
div嵌套页面 div加载页面 (其中获取目标页面的内容是用dwr框架连接java程序做的)
2009-03-15 16:58 664前段时间因为有需要,要在div中加载一个页面。但是以前没做过, ... -
tapestry autocomplete 更改样式及定位
2009-07-09 19:02 727版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文 ... -
Java中的main()方法详解
2009-07-12 16:23 657源文作者:leizhimin 源文链接:http:/ ... -
tapestry5 集成 spring 的事务管理
2009-07-22 15:43 604说明:使用的是tapestry5.1.0.5 和spring ... -
tapestry5 布局 参数的处理
2009-07-23 17:24 449<?xml version="1.0" ... -
tapestry不支持 等html特殊符号的解决方法
2009-07-23 17:34 563在使用tapestry时,偶然发现使用 &a ... -
WebService大讲堂之Axis2(1):用POJO实现0配置的WebService
2009-07-28 15:01 438转自:http://space.itpub.net ... -
WebService大讲堂之Axis2(2):复合类型数据的传递
2009-07-28 15:25 529转自:http://space.itpub.net/12921 ...
相关推荐
在Java中,`List`接口提供了`subList(int fromIndex, int toIndex)`方法,用于返回列表的一个子列表,这个子列表是从`fromIndex`(包含)到`toIndex`(不包含)的元素。这意味着,你可以根据当前页数和每页的记录数...
在Java编程语言中,`List`接口是集合框架的一个重要组成部分,它代表了一种有序的、可变大小的集合。`List`接口继承自`Collection`接口,它提供了额外的功能,比如按照索引访问元素、保持元素的顺序以及允许重复元素...
例如,在数据库操作中,可以将查询结果存储到List中;在处理用户输入时,可以将多个输入项保存为List;在设计模式中,适配器模式或装饰器模式也可能用到List来组合多个对象。 另外,List接口还定义了一些特有的方法...
在 `ReportGroupAction.java` 中,我们可能找到类似这样的代码片段: ```java List<String> list = ...; int firstMovedIndex = ...; int lastMoveIndex = ...; // 问题可能在这里 Collections.copy(list.subList...
在Java中, List对象的分页思想可以通过使用subList()方法来实现。subList()方法可以将一个大的List对象分割成多个小的List对象,每个小的List对象包含一定数量的元素。例如,以下代码将一个大的List对象分割成多个...
根据提供的文件信息,标题与描述均指向了Java中List的操作方法。然而,给出的部分内容却是一段关于导入Excel文件到Web应用中的代码片段,并没有直接涉及List的具体操作方法。因此,我们将结合标题与描述,围绕Java中...
在Java编程语言中,`List.removeAll()`方法是一个非常实用的函数,它允许我们从列表中一次性移除所有指定元素。这个方法是集合框架的一部分,它提供了高效的方式来进行元素的删除操作。本文将深入探讨`removeAll()`...
在C#编程中,`List<T>`是.NET框架中常用的一种动态数组,它属于泛型集合,提供了丰富的功能,使得在处理一系列数据时更加灵活高效。`List<T>`类是`System.Collections.Generic`命名空间的一部分,它实现了`IList<T>`...
3. **退出登录**:退出通常意味着清空当前用户的登录状态,这不涉及List的操作,但如果需要记录登出事件,可以将登出信息作为一个日志项添加到List中。 接下来,日志的添加、删除和修改也是List集合的重要应用场景...
在Java编程语言中,`List`接口是集合框架的重要组成部分,它提供了有序元素集合的实现,并允许重复元素的存在。本文将详细解释`List`接口中的常用方法,帮助开发者更好地理解和运用这些功能强大的工具。 #### 1. ...
2. 使用subList方法实现List分段:Java中提供了一个名为subList的方法,可以用于将List拆分成多个小的List。subList方法的语法是list.subList(from, to),其中from是起始索引,to是结束索引。例如,list.subList(0, ...
在Java编程语言中,List接口是集合框架的重要组成部分,提供了有序的元素存储和访问功能。本教程将深入探讨如何在Java中截取List,并通过源代码实例进行详细讲解。我们将覆盖以下几个关键知识点: 1. **List接口**...
在Java编程语言中,`List`是集合框架的一部分,它是一个有序的集合,允许重复元素。`List`接口位于`java.util`包下,继承自`Collection`接口,并且实现了`Iterable`接口,使得我们可以使用增强型for循环来遍历列表。...
3. 在循环中,使用subList方法将原始List分成小List,并将其添加到结果List中。 4. 如果余数remainder大于0,则将余数部分分配给每个小List。 5. 最后,返回结果List。 测试例子 以下是一个简单的测试例子: ```...
1. 截取指定部分:使用 subList() 方法可以截取 List 中的指定部分,例如: ```java List<String> sublist = new ArrayList(alist.subList(2, 4)); ``` 这里截取 alist 中的第 2 个到第 4 个元素,并将其存储在 ...
在Java中,对于浮点数的除法运算,当除数为0时,结果会被定义为无穷大或NaN(Not a Number),这符合IEEE 754标准的规定。但对于整数除法,如果除数为0,将会抛出`ArithmeticException`异常。 **示例代码**: ```...
此外,`List`接口提供了搜索、插入和移除元素的高效方法,比如`indexOf()`和`lastIndexOf()`用于查找元素的位置,`subList()`用于创建列表的子列表,以及`add(int index, E element)`和`removeRange(int fromIndex, ...
集合和泛型在 Java 中的应用 集合(Collection)是 Java 中...这个练习中,我们创建了一个 List 对象,添加了多个元素,然后测试了 List 接口的常用方法和特有方法。最后,我们遍历了集合中元素,并打印出了每个元素。
5. `content`:当前页的数据,即从原始List中截取出来的子List。 `ListPageModel`类的构造函数可以接收原始List、当前页数和每页显示的条目数作为参数,然后通过以下步骤计算和设置相关属性: 1. 计算总页数:`...