关于解决数组引用类型带来的数据关联更改的问题

在今天的jsp开发中出现如下问题:
用String[] str 取出放在ArrayList<String[]>中的一组数据,对str中的个别数据项进行计算然后再用add(要存放位置的索引,数据)放入ArrayList中。由于String为引用数据类 型,当对str的数据进行更改时,会引起ArrayList中str引用的数据也进行更改,但此时我只是为了获取ArrayList数据作为一个新的对象,不希望对ArrayList的内容进行更改。如果 不做处理,str的数据和引用ArrayList中那一组的数据总是一致,有时会产生预料之外的错误,
代码示例
ArrayList<String[]> str = new ArrayList<String[]>();
String[] str1 = {"csz","csz","s"};
String[] str2 = {"dfasf","fevsd","egsegs"};
String[] str3 = {"htrjh","htdj","vdtjhng"};
String[] str4 = {"aaaaaaaa","aaaaaaaaaa","aaaaaaaaaa"};
str.add(str1);
str.add(str2);
str.add(str3);
str.add(str4);
//获取数据
String[] str5 = str.get(0);
//修改数据
str5[0]="qqqqq";
str5[1] = "qqqqqqqqqq";
str5[2] = "dsdgdfjhfjygkt6j6r6jsrjrsj6rsj6rwjsfrths";
//将修改后的数据放在ArrayList指定位置
str.add(4,str5);
//遍历输出
for(int i=0;i<5;i++){
for(String s:str.get(i))
{
System.out.print(s+" ");
}
System.out.println();
}

运行结果:
qqqqq qqqqqqqqqq dsdgdfjhfjygkt6j6r6jsrjrsj6rsj6rwjsfrths
dfasf fevsd egsegs
htrjh htdj vdtjhng
aaaaaaaa aaaaaaaaaa aaaaaaaaaa
qqqqq qqqqqqqqqq dsdgdfjhfjygkt6j6r6jsrjrsj6rsj6rwjsfrths

可见这种关联在开发中带来的不便,往往会产生开发人员不希望出现的错误,解决办法是:
先用一个数组取出其中的一组数据,然后用多个String来获取取出数组的每一个数据项,然后在把这些String变量赋值给一个新的String[]的每一项,此时再对这个数组进行计算或 更改时,将不会再使ArrayList中的数据产生变化
更改代码:
ArrayList<String[]> str = new ArrayList<String[]>();
String[] str1 = {"csz","csz","s"};
String[] str2 = {"dfasf","fevsd","egsegs"};
String[] str3 = {"htrjh","htdj","vdtjhng"};
String[] str4 = {"aaaaaaaa","aaaaaaaaaa","aaaaaaaaaa"};
str.add(str1);
str.add(str2);
str.add(str3);
str.add(str4);
//取出一组数据
String[] str6 = str.get(0);
//用String变量分别存储每一项数据
String a1 = str6[0];
String a2 = str6[1];
String a3 = str6[2];
//定义新的数组
String[] str5 = new String[3];
//把变量分别赋值给str5
str5[0] = a1;
str5[1] = a2;
str5[2] = a3;
//此时对str5的更改并不会引起原ArrayList中数据的变化
str5[0]="qqqqq";
str5[1] = "qqqqqqqqqq";
str5[2] = "dsdgdfjhfjygkt6j6r6jsrjrsj6rsj6rwjsfrths";
//把sre5加入ArrayList中
str.add(4,str5);
//遍历输出
for(int i=0;i<5;i++){
for(String s:str.get(i))
{
System.out.print(s+" ");
}
System.out.println();
}
运行结果:
csz csz s
dfasf fevsd egsegs
htrjh htdj vdtjhng
aaaaaaaa aaaaaaaaaa aaaaaaaaaa
qqqqq qqqqqqqqqq dsdgd

时间: 2024-10-09 14:09:59

关于解决数组引用类型带来的数据关联更改的问题的相关文章

MongoDB数组修改器更新数据

MongoDB数组修改器更新数据 2013-04-22 10:20:40      我来说两句    来源:姜志福 的BLOG    收藏  我要投稿 MongoDB数组修改器更新数据 这里,我们将了解一下数组修改器.数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用.数组修改器,顾名思义,它是用来修改数组的,而不能用来修改整数或者字符串.数组修改器不多,就那么几个,但熟练掌握它后,将给我们带来非常方便的操作.下面,我们来了解一下: > db.us

MongoDB数组修改器更新数据(转)

MongoDB数组修改器更新数据 这里,我们将了解一下数组修改器.数组,是我们经常看到和使用到的且非常有用的数据结构:它不仅可以通过索进行引用,还可以作为集合来使用.数组修改器,顾名思义,它是用来修改数组的,而不能用来修改整数或者字符串.数组修改器不多,就那么几个,但熟练掌握它后,将给我们带来非常方便的操作.下面,我们来了解一下: > db.user.findOne() { "_id" : ObjectId("4ffcb2ed65282ea95f7e3304"

Hello Mybatis 03 数据关联

ResultMap 在实际的开发中,数据库不总是我们希望看到的样子.比如我们希望User的主键是id但是数据库偏偏喜欢叫它u_id,这样一来原先的resultType似乎就失效了,不带这么玩的,整个人都不好了. 于是mybatis给出了他的方案--resultMap.把我们从复杂的命名问题中解救出来--- 在上一篇中已经用mybatis generator生成好了一个BlogMapper.xml.现在让我们分析下这个文件. 1 <?xml version="1.0" encodi

解决 C++ 操作 MySQL 大量数据插入效率低下问题

往 Mysql 中,插入10000条简单数据,速度非常缓慢,居然要5分钟左右, 但是打开事务的话,一秒不到就搞定了 代码: #include <iostream> #include <winsock2.h> #include <string> #include "mysql.h" #pragma comment(lib, "libmysql.lib"); using namespace std; int main() { MYSQ

将HTML表格的每行每列转为数组,采集表格数据

将HTML表格的每行每列转为数组,采集表格数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 //将HTML表格的每行每列转为数组,采集表格数据 <? function get_td_array($table) { $table = preg_replace("'<table[^>]*?>'si","",$table); //OSPHP.COm.CN

【第3篇】通过JSON-Lib把数组转换成Json数据

package ivyy.taobao.com.domain.jsonlib; import ivyy.taobao.com.entity.Address; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.json.JSONArray; import net.sf.json.JSONObject; /** *@DEMO:j

动态开辟指定数量的线程来查找动态开辟的数组中的1000000数据中的值

 1.项目包结构 array.h #ifndef _ARRAY_H_ #define _ARRAY_H_ /************************************************************************/ /* 初始化数组                                                          */ /**************************************************

两个有序数组找出相同数据

两个有序数组找出相同数据,要求最简单的算法复杂度. class Program { static void Main(string[] args) { int Low = 0; int[] m = new int[] { 2, 4, 6, 9, 12, 13, 15, 16 }; int[] n = new int[] { 3, 5, 9, 12, 15 }; foreach (int item in m) { Search(n, ref Low, n.Length - 1, item); }

去除数组中的重复数据

1 public static String[] array_unique(String[] a) { 2 Set<String> set = new HashSet<String>(); 3 set.addAll(Arrays.asList(a)); 4 return set.toArray(new String[0]); 5 } 去除数组中的重复数据