java中的一个List对象向另一个listjava 两个对象赋值值

收藏,1.9k 浏览
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
怎么将java中list中的数据序列化到数据库中,方便存取?
我想讲一个list集合 直接放在一个varchar字段中,而不像新增一个表来专门存在list中数据,我该怎么做?
ps:之前我用php的时候会用serialize去序列化数组,但java我该怎么做?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
将 java list 转换成json 格式存在数据库里吧
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
public List getObject(String sql, Object[] object) {
//sql执行语句,object是你sql语句里面的参数
List list = new ArrayList();
Connection con =
PreparedStatement pre =
ResultSet rs =
con = C3P0Util.getInstance().getConnection();
//这是你获得数据库连接,你把这里改成调用你自己写的jdbc方法
pre = con.prepareStatement(sql);
//执行sql语句
if(object!=null){
for(int i=0;i&object.i++){
pre.setObject(i+1, object[i]);
//给sql里面的参数进行赋值
rs = pre.executeQuery();
while(rs.next()){
Users u = new User();
u.setUserName(rs.getString("UserName"));
u.setUserPas(rs.getString("UserPas"));
list.add(u);
}catch(Exception e){
e.printStackTrace();
C3P0Util.close(con, pre, rs);
//关闭数据库资源
//返回list集合 } 注意:list里面保存的是User对象的信息 你要获得User对象的信息,那么就要遍历list for(int i=0;i&list.i++){
User u = (User)list.get(i);
System.out.println("UserName:"+u.getUserName());
System.out.println("UserPas:"+u.getUserPas()); } 上面是针对list里面有很多个User对象,当然list里面只有一个User对象,也是可以的。 如果你的list里面只有一个User,那么可以直接:User u = (User)list.get(0); System.out.println("UserName:"+u.getUserName());
System.out.println("UserPas:"+u.getUserPas()); 希望对你有帮助!
同步到新浪微博
不要错过该问题的后续解决方案
如果你没找到答案,记得登录关注哦,大家会尽全力帮你解决的 ^___^
分享到微博?
关闭理由:
删除理由:
忽略理由:
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
内容质量差,或不适合在本网站出现
无意义讨论型问题
其他原因(请补充说明)
举报理由:
带有人身攻击、辱骂、仇恨等违反条款的内容(请编辑该提问指向已有相同问题)
与已有问题重复
内容质量差,或不适合在本网站出现
答非所问,不符合答题要求
其他原因(请补充说明)
补充说明:求关于java中list一次性赋值的问题介绍。
求关于java中list一次性赋值的问题介绍。
09-02-18 & 发布list.add() 添加对象时为什么显示的都是最后一个对象的属性?以前添加的值被覆盖了
import java.util.ArrayL
import java.util.L
public class Listaa {
private static List list = new ArrayList();
public static void maain(int i) {
Listaa t = new Listaa();
t.setI(i);
list.add(t);
public static void main(String args[]) {
Listaa a = new Listaa();
for (int i = 0; i & 3; i++)
for (int i = 0; i & list.size(); i++) {
a = (Listaa) list.get(i);
System.out.println(a.getI());
public int getI() {
public void setI(int i) {
输出结果是 2 2 2,为什么不是 0 1 2 ?
按赞数排序
static静态变量是属于类的变量,任何时候只有一份,你在循环中给这个变量的赋值了3次,第3次赋值覆盖了前两次,所以最终的结果是 2 2 2
static修饰的变量只有一份你改就该那个值用的也是那个值
注意你的i值是静态变量,你最后一次设立i的值是2,那所有对象的的i值都变成了2。
其他相似问题
相关参考资料JAVA中list的数值传递的方法
JAVA中list的数值传递的方法
我有一个已知对象其类型为List&Circle&;并且其值不为空即我已经给其赋值了.
另外定义一个新对象& 我用List&Circle& newlist = new ArrayList&Circle&();来定义
要求:将list中的值传递给newlist,之后改变list中的元素的值,此时list应改变,但是必须要使得newlist不变,即还是原来的list.
NOTE:希望给出详细的思路方法和程序代码.
因为引用是传址的,所以如果你需要改变其中之一,却不去改变另一个,那么就不能对list中的元素直接使用=号赋值,而需要实行深度克隆。
深度克隆最为稳妥的方式就是序列化,但是效率稍低,或者采用自己控制克隆深度的方法。自己看看书,如果还是不明白,我明天回去给你解答。
提问者 的感言:只能将最原始的元素(Int等)传递给newlist 满意答案
List&String& list=new ArrayList&String&();&&list.add("啥1");&&list.add("啥2");&&list.add("啥3");&&List&String& newlist=new ArrayList&String&();&&newlist=&&for(String str : newlist){&&&System.out.println(str);&&&/**&&& * 打印&&& * 啥1&&& * 啥2&&& * 啥3&&& * */&&}&&System.out.println("===============");&&list.set(0, "haha");&&for(String s : list){&&&System.out.println(s);&&&/**&&& * 打印&&& * haha&&& * 啥2&&& * 啥3&&& * */&&}
直接赋值不就好了?
难道还要其他的么?
或者你用for循环把list的元素一个一个去除了,放到newlist里面去
java中的数组传递时引用传递,你使用newlist=语句时,表明newlist是list的一个引用,其实两个对象是一样的只是名字不同而已,当改变list时,由于newlist是list的一个引用,那么相应的newlist也要跟着改变,现在我的要求是只把list的所有元素传递给newlist后,我再改变list的元素,此时要使得newlist中的元素不随着list的改变而改变.也就是说我只将list中的元素传递给newlist一次后,无论我怎么改变list的元素,newlist中的元素都不在变化,是确定了的.
你先没有说引用&
我下面也有说了另一个方法啊& 用for循环嘛
List&String& list=new ArrayList&String&();&&list.add("啥1");&&list.add("啥2");&&list.add("啥3");&&List&String& newlist=new ArrayList&String&();&&for(int i=0;i&list.size();i++){&&&newlist.add(list.get(i));&&}&&&&System.out.println(newlist);
System.out.println(list==newlist);//这里打印的是false 说明2个对象的引用不是同一个。这样就OK了吧
提问者 的感言:我发现我传递时错在,是将元素Circle传递了,应该是最基本的类型进行传递.
其他回答 (2)
List newList = list.clone();
List&String& list = new ArrayList&String&();&&list.add("a");&&list.add("b");&&list.add("c");&&List&String& newlist = new ArrayList(list);&&newlist.add("d");&&System.out.println("newlist改变后,list的长度:"+list.size());&&System.out.println("newlist改变后,newlist的长度:"+newlist.size());
相关知识等待您来回答
编程领域专家下次自动登录
现在的位置:
& 综合 & 正文
三分钟理解Java中字符串(String)的存储和赋值原理
可能很多java的初学者对String的存储和赋值有迷惑,以下是一个很简单的测试用例,你只需要花几分钟时间便可理解。
1.在看例子之前,确保你理解以下几个术语:
栈:由JVM分配区域,用于保存线程执行的动作和数据引用。栈是一个运行的单位,Java中一个线程就会相应有一个线程栈与之对应。
堆:由JVM分配的,用于存储对象等数据的区域。
常量池:在编译的阶段,在堆中分配出来的一块存储区域,用于存储显式的String,float或者integer.例如String str="abc"; abc这个字符串是显式声明,所以存储在常量池。
2.看这个例子,用JDK5+junit4.5写的例子,完全通过测试
import static org.junit.Assert.assertNotSimport static org.junit.Assert.assertS
import org.junit.T
* @author Heis
*/public class StringTest{
public void testTheSameReference1(){
String str1="abc";
String str2="abc";
String str3="ab"+"c";
String str4=new String(str2);
//str1和str2引用自常量池里的同一个string对象
assertSame(str1,str2);
//str3通过编译优化,与str1引用自同一个对象
assertSame(str1,str3);
//str4因为是在堆中重新分配的另一个对象,所以它的引用与str1不同
assertNotSame(str1,str4);
第一个断言很好理解,因为在编译的时候,"abc"被存储在常量池中,str1和str2的引用都是指向常量池中的"abc"。所以str1和str2引用是相同的。
第二个断言是由于编译器做了优化,编译器会先把字符串拼接,再在常量池中查找这个字符串是否存在,如果存在,则让变量直接引用该字符串。所以str1和str3引用也是相同的。
str4的对象不是显式赋值的,编译器会在堆中重新分配一个区域来存储它的对象数据。所以str1和str4的引用是不一样的。
另一种说法,求大神指点
JVM内存分四种:
1、栈区(stacksegment)—由编译器自动分配释放,存放函数的参数值,的值等,具体方法执行结束之后,系统自动释放JVM内存资源
2、堆区(heapsegment)—一般由员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收
3、静态区(datasegment)—存放,和,不释放
4、区(codesegment)—存放程序中方法的,而且是多个对象共享一个代码空间区域
在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的后,java会自动释放掉为该变量所分配的JVM内存空间;在堆中分配的JVM内存由的自动器来管理,堆的优势是可以动态分配JVM内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配JVM内存的。缺点就是要在运行时动态分配JVM内存,存取速度较慢;栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。
◆java堆由Perm区和Heap区组成,Heap区则由Old区和New区组成,而New区又分为Eden区,From区,To区,Heap={Old+NEW={Eden,From,To}},见图1所示。
Heap区分两大块,一块是NEWGeneration,另一块是OldGeneration.在NewGeneration中,有一个叫Eden的空间,主要是用来存放新生的对象,还有两个SurvivorSpaces(from,to),它们用来存放每次后存活下来的对象。在OldGeneration中,主要存放应用程序中生命周期长的JVM内存对象,还有个PermanentGeneration,主要用来放JVM自己的反射对象,比如和方法对象等。
在NewGeneration块中,垃圾回收一般用Copying的,速度快。每次GC的时候,存活下来的对象首先由Eden拷贝到某个SurvivorSpace,当SurvivorSpace空间满了后,剩下的live对象就被直接拷贝到OldGeneration中去。因此,每次GC后,EdenJVM内存块会被清空。在OldGeneration块中,垃圾回收一般用mark-compact的算法,速度慢些,但减少JVM内存要求.
垃圾回收分多级,0级为全部(Full)的垃圾回收,会回收OLD段中的垃圾;1级或以上为部分垃圾回收,只会回收NEW中的垃圾,JVM通常发生于OLD段或Perm段垃圾回收后,仍然无JVM内存空间容纳新的Java对象的情况。
JVM调用GC的频度还是很高的,主要两种情况下进行垃圾回收:当应用程序线程空闲;另一个是JVM内存堆不足时,会不断调用GC,若连续回收都解决不了JVM内存堆不足的问题时,就会报outofmemory错误。因为这个异常根据系统运行环境决定,所以无法预期它何时出现。
根据GC的机制,程序的运行会引起系统运行环境的变化,增加GC的触发机会。为了避免这些问题,程序的设计和编写就应避免垃圾对象的JVM内存占用和GC的开销。显示调用System.GC()只能建议JVM需要在JVM内存中对垃圾对象进行回收,但不是必须马上回收,一个是并不能解决JVM内存资源耗空的局面,另外也会增加GC的消耗。
◆当一个URL被访问时,JVM内存区域申请过程如下:
A.JVM会试图为相关Java对象在Eden中初始化一块JVM内存区域
B.当Eden空间足够时,JVM内存申请结束。否则到下一步
C.JVM试图释放在Eden中所有不活跃的对象(这属于1或更高级的垃圾回收),释放后若Eden空间仍然不足以放入新对象,则试图将部分Eden中活跃对象放入Survivor区
D.Survivor区被用来作为Eden及OLD的中间交换区域,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
E.当OLD区空间不够时,JVM会在OLD区进行完全的垃圾收集(0级)
F.完全垃圾收集后,若Survivor及OLD区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建JVM内存区域,则出现"outofmemory错误"
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 java对象数组赋值 的文章

 

随机推荐