代码初步写好后,可能我们想达到的效果是:往集合lists的子集合tempList中添加一个元素6,而原有的集合保持不变。

问题描述

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。这是怎么一会事呢 问题补充:liuqing_2010_07 写道

解决方案

class SubList<E> extends AbstractList<E> { private AbstractList<E> l; private int offset; private int size; private int expectedModCount; 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; }这个是jdk的源代码,我把sublist贴出来这里可以明显的看到 l=list说明引用的对象还是同一个,只是其他的量变了
解决方案二:
楼上说的有道理 这样改进: List<Object> tempList = lists.subList(2, lists.size()).clone();

时间: 2024-11-08 23:17:12

代码初步写好后,可能我们想达到的效果是:往集合lists的子集合tempList中添加一个元素6,而原有的集合保持不变。的相关文章

新手-代码本是用来解决在一个链表中插入一个元素,但是运行后结果总是与本意不同。亲们帮帮忙,看看怎么错了。

问题描述 代码本是用来解决在一个链表中插入一个元素,但是运行后结果总是与本意不同.亲们帮帮忙,看看怎么错了. #include using namespace std; struct List //定义一个结构体表示线性表 { int num; struct List *next; }; int main() { List la,*p,*head,*p1,*pm; //定义线性表la //把表a的首元素地址赋给p和head int n=1,m,t; cout<<"请输入表a中的第&q

请教:代码出错,如何使用C#代码向AD域的机构中添加一个用户?

问题描述 如图所示,在WindowsServer2008R2的域环境中有这样的结构.总部北京分公司-朝阳区营业部.现在想开发个项目,想用C#向海淀区营业部这个组织单位中添加一个用户.网上找到了些代码:publicvoidCreateNewUser(){DirectoryEntrydomain=newDirectoryEntry();domain.Path="LDAP://10.152.2.60/DC=theo,DC=com";domain.Username="administ

android-Android中,利用SurfaceView预览相机时,如何继续想预览窗口中添加一个组件

问题描述 Android中,利用SurfaceView预览相机时,如何继续想预览窗口中添加一个组件 如题所示,最近一直在做这个东西,麻烦路过的朋友指教一二,谢谢 解决方案 应该是说预览窗口上有一些菜单之类的东西吧? 如果是这个case,那么就是surfaceview放在下面,上面可以叠一个背景透明的frame,在里面添加一些控件就可以. 写camera应用,建议可以看到android自带的gallery,camera应用,功能很全面,也是几个系统自带应用比较复杂的了.

c语言-冒泡排序可以这样写吗,我只对结构体数组中某一个元素进行排序,然后交换

问题描述 冒泡排序可以这样写吗,我只对结构体数组中某一个元素进行排序,然后交换 struct troop { char name[1]; int a[3]; }tro[4]; void bubblesort(int a, int b, int c) { struct troop temp; int i, j; for (i=a; i { for (j=a+1; j { if (tro[j].a[c] > tro[i].a[c]) { temp = tro[j]; tro[j] = tro[i];

java-在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置

问题描述 在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置 在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置 我不会啊,求大神解答,怎么样能把一个数字插入到数组中啊,用JAVA解决 谢谢各位大神了 解决方案 http://m.blog.csdn.net/blog/Jerome_s/33316893 解决方案二: http://zhidao.baidu.com/link?url=tNCz0muJx4_ET9hG-UiYD5vdufAkzKFNvpJyVYI7b3kL

android-我想在安卓程序中添加一个计数器。

问题描述 我想在安卓程序中添加一个计数器. 如题,类似于每点击一次按钮自增一的那样(FLAPPY BIRD 那种).求高手帮忙解决,感激不尽 解决方案 要求不是很明确呀,这个不是在定义一个Button,然后为Button设定一个监听,定义一个变量计数,每点击一次该变量加1就好了呢.

ArrayList.add()添加一个元素后,会把前面一个元素覆盖

    今天写程序时,每次取值均正确,但是不管怎么输出,都是输出最后一次 add 的值,百思不得其解,后来才发现,java的list的 add方法引用的是地址,如果是全局的话,每次引用的值都一样,取的值也就一样了.每次add都用new一个新实体就可以解决问题了,接近两小时的青春浪费了,就因为一行代码位置错误,对 list 不熟悉. 大概如下: FlightInfoVo fInfoVo = new FlightInfoVo(); for() { fInfoVo.set ; ............

JQuery中判断一个元素下面是否有内容或者有某个标签的判断代码_jquery

一.判断文本是否为空 复制代码 代码如下: var jqObj = $(this); if(jqObj.text().trim()){ //trim()方法是去空格,$.trim()函数删除提供字符串的所有换行符,空格(包括非中断空格),开始和结束tab.如果这些空白字符在字符串中间发生时,它们将被保留. jqObj.hide(); } 二.判断这个标签下是否有某个已知的元素,比如判断ul标签下是否有li元素 复制代码 代码如下: var jqObj = $(this); if(!jqObj.h

新手问题:在排序好的数组中添加一个数字,将添加后的数字插入到数组合适的位置

问题描述 假设有这样一个整形数组intsomeArr={54,12,76,544,22,65,86,5433,54,88,123,79}把它先按升序排列后,把整数insertnum=87放进这个数组里合适的位置,最后输出新的数组. 解决方案 解决方案二:你就直接把87放到数组里再排序下不就可以了解决方案三:引用1楼click_me的回复: 你就直接把87放到数组里再排序下不就可以了 someArr是引用堆内存的12个整数的数组吧,即someArr[0]到someArr[11]如果再放多一个87进