List 接口提供了subList方法,其作用是返回一个原列表的一个视图。对子列表的修改可以直接反馈到原列表中。
/** *subList 只是原列表的一个视图 * @author zhangwei_david * @version $Id: SubListDemo.java, v 0.1 2014年10月18日 下午8:50:33 zhangwei_david Exp $ */ public class SubListDemo { /** * * @param args */ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); System.out.println("原列表的内容: " + list); List<String> subList = list.subList(0, list.size()); System.out.println("子列表的内容: " + subList); list = Collections.unmodifiableList(list); subList.add("C"); System.out.println("子列表的内容: " + subList); System.out.println("原列表的内容: " + list); System.out.println("子列表和原列表是否相等:" + subList.equals(list)); } }
原列表的内容: [A, B]
子列表的内容: [A, B]
子列表的内容: [A, B, C]
原列表的内容: [A, B, C]
子列表和原列表是否相等:true
对子列表中的增加可以直接反馈到原列表中。
那么翻过来是否可以呢?我们看下面一个示例:
/** *subList 只是原列表的一个视图 * @author zhangwei_david * @version $Id: SubListDemo.java, v 0.1 2014年10月18日 下午8:50:33 zhangwei_david Exp $ */ public class SubListDemo { /** * * @param args */ public static void main(String[] args) { List<String> list = new ArrayList<String>(); list.add("A"); list.add("B"); System.out.println("原列表的内容: " + list); List<String> subList = list.subList(0, list.size()); System.out.println("子列表的内容: " + subList); subList.add("C"); System.out.println("子列表的内容: " + subList); System.out.println("原列表的内容: " + list); System.out.println("子列表和原列表是否相等:" + subList.equals(list)); // 修改原列表 list.add("D"); System.out.println("子列表的内容: " + subList); } }
结果是:
子列表的内容: [A, B] 子列表的内容: [A, B, C] 原列表的内容: [A, B, C] 子列表和原列表是否相等:true Exception in thread "main" java.util.ConcurrentModificationException at java.util.SubList.checkForComodification(Unknown Source) at java.util.SubList.listIterator(Unknown Source) at java.util.AbstractList.listIterator(Unknown Source) at java.util.SubList.iterator(Unknown Source) at java.util.AbstractCollection.toString(Unknown Source) at java.lang.String.valueOf(Unknown Source) at java.lang.StringBuilder.append(Unknown Source) at com.cathy.demo.collections.SubListDemo.main(SubListDemo.java:34)
为什么会有并发修改的异常呢?
public List<E> subList(int fromIndex, int toIndex) { return (this instanceof RandomAccess ? new RandomAccessSubList<E>(this, fromIndex, toIndex) : new SubList<E>(this, fromIndex, toIndex)); }
public int size() { checkForComodification(); return size; }
private void checkForComodification() { if (l.modCount != expectedModCount) throw new ConcurrentModificationException(); }
至此我们可以发现在修改原列表后,使用size 方法出现了并发修改异常。
也就是原列表在生成子列表的时候,原列表是不能再被修改的
相关推荐
c# winform 列表视图教程,对于刚刚接触c#的开发者,很有用处
列表视图(CListView)某些行,可根据需要设置成不同的颜色。 不是列表控件(CListCtrl),是列表视图(CListView)。
完美实现自定义的二级listview列表,自定义标题视图和子列表视图.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
namespace ListView_列表视图_ { public partial class Form1 : Form { public Form1() { InitializeComponent(); } static int itemNumber = 0;int a = 0; private void button1_Click(object sender, ...
列表视图布局效果,该系统采用了UICollectionView 实现一种特殊效果的列表视图布局。主视图并不是杂乱无章地摆放子视图,而是分行,每一行有三个子视图,其中一个子视图的size比较大,其他两个子视图等大但比较小。...
该源码实现了怎样使用滑动的方式来实现动态刷新列表视图或网格视图的内容。也就是或对网格视图的每个子视图的内容,新内容从可以上往下移动代替旧内容效果;而对于列表的单元的每一行单元格,可以让新的内容从左往右...
PSGridScroll是一个视图控件,可将子视图列表布置到可滚动的网格中。 示例项目 有一个iPad示例应用程序来演示PSGridScroll的功能。 地位 PSGridScroll应该被视为一种简单的解决方案,用于在垂直滚动网格中自动显示...
本源码演示VC 6.0 在CtrlList内容列表中插入内容行,也就是在CtrlList列表视图中新增一行数据,CtrlList插入行数据的一个例子,之前发的是一个CtrlList表头排序的代码,相对于排序功能,本实例同样很基储很实用,...
用过DEV Gridcontrol的朋友们应该大多数都知道Gridcontrol可以实现多级视图,即通过主视图和子视图的主外键关系来达到分级展开的效果。常用的做法一般都是先设定两个表之间的Relation后直接用控件绑定,然后控件自动...
完美实现自定义的二级listview列表,自定义标题视图和子列表视图
文章目录0.本篇涉及到的页面布局及所在位置[1] 上下左右距离约束 —— 2[2] 垂直... 在上面的子视图View中添加一个Label用来显示计算结果并添加约束条件6. 在下面的子视图View中添加16个Button做计算器键盘[1] 添加一个
1.数据更新基本语句及其格式 (1)插入操作 SQL的数据插入语句INSERT有两种形式: ① 插入单个元组,使用命令: ... ② 插入子查询的结果: INSERT INTO 基本表名(列表名) 查询语句 (2)修改操作
每一个可以扩展的列表项的旁边都有一个指示符(箭头)用来说明该列表项目前的状态(这些状态一般是已经扩展开的列表项,还没有扩展开的列表项,子列表项和最后一个子列表项)。可以使用方法:setChildIndicator...
向文档列表视图和子面板添加文档预览弹出窗口 执照: 在 MIT 许可下分发。
该源码实现了怎样在点击列表行单元时,就可以展开被点击的列表行,并显示新的子视图。可以在展开的列表行上加入各种控件,如我们常用的UITextFieldUITextView...是一个不错的学习例子,喜欢的朋友可以下载研究一下,。
实例079 具有文本录入功能的列表视图控件 126 实例080 使用列表视图设计登录界面 128 2.7 树视图控件典型实例 129 实例081 多级数据库树状结构数据显示 129 实例082 节点拖动功能的树控件 131 实例083 带复选功能的...
工具是一个适用于 Windows 的开源差异和合并工具。可以比较文件夹和文件,以易于理解和处理的可视文本格式呈现差异。 文件比较窗口基本上是将打开到编辑器的两个文件分成两个水平窗格。编辑允许用户轻松地进行小的...
这有一个问题:大音量时它真的很慢。 大多数UI系统都不是在后台执行此操作。 取而代之的是,它们仅分配足够的视觉资源来覆盖可见区域(加上安全区域),然后在滚动时回收子视图-退出视图的视图将重新用于刚刚进入...
创建一个 .txt 文件,其中包含在 MFILE 中调用的子函数的排序列表描述: 文件 create_TreeView.zip 包括 2 个 MATLAB 函数: - 1) write_function_TreeView_txt ( Input_Mfile , soft ) -2)[Tree,Sub_fct_nb] = ...
figureTitleType:titleType类型限制派生的子类型,要求必须形如“1-1.xxxx” 、“1-1-1.xxxx”(表示第一节中的第一个图、第一节下面的第一节的第一个图等等); 然后编写book.xml,并使用多态性(即所有title的...