0 0

Java中集合的值传递问题5

例如ArrayList,HashMap之类的集合进行值传递的时候
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
b = a;是引用传递,有没有值传递的方法
2012年8月10日 14:09

19个答案 按时间排序 按投票排序

0 0



    b.addAll(a); 肯定可以

2012年12月21日 14:31
0 0

数组和集合可以使用Arrays和Collections的算法工具类实现拷贝和复制,严禁使用循环/遍历赋值操作。

2012年12月04日 10:42
0 0

b.addAll(a); 肯定可以

2012年11月25日 22:07
0 0

b=new ArrayList<String>(a);
或者 Collections.copy(List dest,List src);

2012年11月14日 13:47
0 0


Java中集合的值传递问题5
例如ArrayList,HashMap之类的集合进行值传递的时候
List<String> a = new ArrayList<String>();
List<String> b = new ArrayList<String>();
b = a;


b.addAll(a);

2012年11月05日 10:19
0 0

其实 这个问题各位lz都已经阐述了,对于:
ArrayList a = new ArrayList();
ArrayList b = new ArrayList();
这两句已经分别在栈内存和堆内存开辟的了两个空间,在栈内存中开辟的是指向真正存内容的堆内存的首地址;a和b就相当于这两个对象的遥控器,在这个时候这两对象是相互独立的,而当执行完a=b;的时候,此时a原先的值就已经不复存在了,而是和b的值一样,你可以 if(a==b)比较看看,这样的话 就等于a对象要等待JVM gc 来处理它,而b对象,就有两个内容一样的在栈内存中放在不同空间的两块内容相同的空间,而内容是指向同一块在堆内存的空间,应该很明了吧!

另一个problem : 对于把 b集合的内容copy到a中,一般采取的方案都是手工copy,也就是for(cpoy..),这样可以更好的控制,如果用JDK的Collections帮助类,这些都是封装好了,意外情况不可预知,而且的话在多线程的情况下,也不好控制,所以如果是我的话,如果是简简单单的全copy的话,可以用Collections帮助类,如果是牵扯到 业务逻辑的话。。。。

2012年9月07日 12:15
0 0

JAVA里面没有引用传递的说法吧,都是值传递,只不过对象引用的值传递的是对象的地址

2012年9月05日 10:48
0 0

你这个问题我个人觉得只要你可以从内存角度去理解就能很明白的理解什么是值传递什么是引用传递。
List<String> a = new ArrayList<String>();
执行这句时在虚拟机栈中初始化了一块内存引用a,在堆中初始化了一块内存存放了new的对象,然后引用a指向了该对象。

List<String> b = new ArrayList<String>();
执行这句时在虚拟机栈中初始化了一块内存引用b,在堆中初始化了一块内存存放了new的对象,然后引用b指向了该对象。

b = a;
在这一步的时候很关键就是将a的引用指向了b引用,换句话说现在栈里的应用a和引用b都指向了new的第一个对象,所以我觉得是引用传递。

至于什么是值传递和什么是引用传递,其实基本数据类型一般传入方法的时候是值传递,因为基本数据类型实际就是存在栈中的,直接将值传递给了另一个变量,引用传递基本上是指对象的引用传递,而对象本身没变化只是对象的引用指向发生了变化。

2012年9月03日 17:12
0 0

做个深度copy

2012年8月31日 22:19
0 0

Collections & Arrays 工具类多看看,它们含有很多实用的集合操作方法

2012年8月31日 11:25
0 0

ArrayList<String> a = new ArrayList<String>();      
ArrayList<String> b = new ArrayList<String>(a);

赋值

2012年8月29日 14:22
0 0

自己用for循环实现,值传递.

2012年8月29日 11:11
0 0

用克隆 或是 集合工具类中的复制方法啊  说白了 就是拿到另一个一模一样的啊 只是内容一样 但是a 与 b的引用地址不一样

2012年8月28日 10:04
0 0

这个关于引用传递和值传递的问题,一直就没有一个统一的说法。
值传递可以按如下理解:
a、b都是记录这地址,所以b=a可以说是把a的地址赋给了b。这是值传递。
于是b通过该地址值就可以访问该地址所存储的数据。

2012年8月13日 01:55
0 0

其实可以这样理解,java里面创建一个List<String> a = new ArrayList<String>();起始a这个对象只是一个引用,而他引用的值是另外一个ArrayList对应,当然这个arraylist对象可能还引用了很多其他的对象,所以当你做a=b的时候仅仅是做了一个引用传递。引用传递相当是将a原来对应的arraylist对象的所有内在对象或者值抛弃了,然后添加给他b的引用对象值,但是如果有这种需求,就是只拷贝b对象中的部分值,这个时候就肯定不能使用引用传递了,就必须你自己迭代设置,或者深度拷贝。很多时候这种类似的拷贝都是需要做深度拷贝的,例如如果你b中的list对象很重要,不能修改,但是如果你这样传给a以后,实际上如果你对a现在的list对象里面数据修改 都是在修改b的对象属性,所以如果你想做值引用的话,可以完全自己迭代拷贝值,而不是对象。也就是说对list里面每一个java对象都重新new然后set和add。至于clone方法,我记得好像要小心使用来着,具体的可以查看下那个effective java里面有一张专门讲这个clone的。另外 如果要深度拷贝的话,好像还有一个方法就是通过序列化来做。

2012年8月10日 17:25
0 0

楼上 addall 和 Collections.copy 都是正解。

我比较关注,什么样的情况需要值专递。
如果只是要构造一个一样的ArrayList。
可以用ArrayList.clone()方法。

2012年8月10日 15:58
0 0

应该没有,不过你可以这样

b.addAll(a);

前提是相同类型的集合

2012年8月10日 14:25
0 0

Collections.copy(List dest,List src);
将所有元素从一个列表复制到另一个列表

2012年8月10日 14:21
0 0

貌似没有  自己遍历赋值吧

2012年8月10日 14:16

相关推荐

    JNI开发Java和C/C++互相传递List集合

    JNI开发Java和C/C++互相传递List集合, 可以参考: Java从C/C++获取List集合对象:https://blog.csdn.net/niuba123456/article/details/80994166 Java传递List集合对象到C/C++ ...

    Java:集合排序(正序、倒序)的方法

    本文详细介绍了如何在Java中对自定义对象的集合进行排序。通过实现`Comparable`接口或使用`Comparator`接口,我们可以灵活地根据对象的属性进行正序或倒序排序。同时,通过封装一个工具类`MySortList`,我们进一步...

    Java集合框架及泛型

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高效的数据结构和操作这些数据结构的方法。泛型则是Java在J2SE 5.0版本引入的一个特性,极大地提高了代码的类型安全性和可读性。下面我们将深入...

    web Service 传递集合(实例)

    10. **测试**:全面的单元测试和集成测试是确保集合传递功能正常的关键。测试应覆盖各种边界条件,如空集合、大集合等。 以上知识点是实现Web服务传递集合的基础。实践中,我们需要结合具体的技术栈(如.NET、Java...

    Java 值传递和引用传递详解及实例代码

    Java中的值传递和引用传递是编程中非常重要的概念,它们涉及到函数或方法调用时参数的传递方式。值传递指的是函数或方法接收到的是变量的一个副本,而引用传递则是函数或方法接收到的是变量内存地址的副本。这两种...

    Java集合Map常见问题_动力节点Java学院整理

    HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从...当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到bucket位置来储存Entry对象。

    Java调用存储过程--传入集合参数

    在完成Java集合到Oracle数组的转换后,接下来是实际调用存储过程的过程。这通常通过`CallableStatement`接口完成,其中使用`setARRAY`方法将转换后的数组设置为参数。 ```java public static int updateADInfo...

    Java基础面试题集合

    2. **Java集合**: - **集合框架**:包括List、Set、Map三大接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。 - **泛型**:提供类型安全,限制集合元素类型,避免强制类型转换。 - **...

    Java开发自学100天,Java开发必背代码 用List集合实现传递信息

    Java开发自学100天,Java开发必背代码 用List集合实现传递信息

    java集合代码

    Java集合框架是Java编程语言中的一个核心特性,它提供了一组接口和类,用于存储和操作对象的集合。在这个主题中,我们将深入探讨ArrayList,这是一个常见的集合实现,以及与之相关的异常处理。 ArrayList是Java中`...

    java笔试题大集合及答案

    - 方法:定义、调用、重载和重写的概念,以及参数传递机制(按值传递和按引用传递)。 2. **面向对象编程** - 类与对象:了解如何创建和实例化类,以及类的封装、继承和多态性。 - 构造器:初始化对象的方法,...

    servlte加jstl传递List集合

    3. 将集合传递到JSP:通过`request.getRequestDispatcher()`方法重定向或转发到JSP页面,同时传递集合。 ```java request.getRequestDispatcher("/display.jsp").forward(request, response); ``` 在JSP页面...

    数据结构和Java集合框架

    数据结构和Java集合框架是Java编程中的核心概念,它们对于理解和编写高效、可维护的代码至关重要。数据结构是组织和存储数据的方式,而Java集合框架则提供了这些数据结构的实现,便于开发者在Java应用程序中使用。 ...

    Java集合框架.ppt

    Java集合框架是Java编程语言中一个非常重要的组成部分,它为开发者提供了处理对象集合的统一接口和实现。在Java中,集合框架主要由一系列接口和类组成,这些接口和类定义了存储、操作和管理对象的基本行为。让我们...

    Core.Java基础教程 .Java编程语言基础-对象定义、变量与值传递

    在Java中,基本类型(如int, double)是按值传递,意味着传入函数的是变量的副本,而对象引用是按引用传递,传递的是对象在内存中的地址,而不是对象本身。 3. **封装**: 封装是面向对象编程的一个核心原则,它...

    Java集合容器面试题(2020最新版)陆小马功钟浩.pdf

    Java集合框架是Java编程语言中用于存储和操作对象集合的一个体系结构。它定义了一套接口以及接口的具体实现,为Java程序员提供了大量集合类,用于保存和操作数据集合,如列表、集合、映射等。Java集合框架的主要优点...

    JAVA面视题集合下载

    9. 数学表达式求值:Java可以使用循环和条件判断来计算特定数学序列,如给定的1-2+3-4+...+m的问题,可以使用循环和累加来实现。 10. 分层架构:在.NET或Java的B/S系统中,常见的分层架构包括数据访问层(DAL)、...

    Java调用带参数的存储过程并返回集合

    在返回集合时,可以将结果集映射到Java集合对象,如ArrayList或自定义的实体类,这样可以更好地适应业务需求。 总结,Java调用Oracle存储过程涉及的关键点包括:JDBC连接,CallableStatement,输入/输出参数的设定...

    java8 中文文档

    Java 8 是 Java 语言的一个重要版本,引入了许多新...对于初学者来说,学会阅读官方文档是非常重要的,这将有助于理解和解决实际开发中的问题。而这份文档的翻译质量相对不错,是学习和查阅 Java 8 相关知识的好资料。

Global site tag (gtag.js) - Google Analytics