ArrayList问题

braddoris 2010-04-17 09:32:02
code=Java]public class ArrayListTest {
public static void main(String[] args) {
Map map = new HashMap();
List list = new ArrayList();
for (int i = 0; i < 10000; i++) {
list.add(i);
}
map.put(1, list);
System.out.println(map.toString());
list.clear();

for (int i = 0; i < 10000; i++) {
list.add(i+"a");
}
System.out.println(map.toString());
}

}[[/code]
大家看一下,为什么我修改list中的数据,map中的数据也会发生变化呀,如过不让发生变化,应该怎样改,不要把list.clear();改为list=null;也不要在程序中频繁的创建ArrayList对象,谢谢大家!
...全文
197 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
luomf 2010-04-20
  • 打赏
  • 举报
回复
2楼8楼的正解~
Mars_Ma_OK 2010-04-20
  • 打赏
  • 举报
回复
支持8楼...
liuhuan851002 2010-04-20
  • 打赏
  • 举报
回复
恩 路过学习
zhujinbo 2010-04-20
  • 打赏
  • 举报
回复
java里的传递都是引用传递,map里放的是指向list的内存地址,所以你下面list(内存上的值)的值改变了,那上面map里存放的指向的内存块上的内容也就变了。
powerchuangwai 2010-04-19
  • 打赏
  • 举报
回复
路过,学习。
潜水生活 2010-04-19
  • 打赏
  • 举报
回复
学习了!
yangnan2009 2010-04-19
  • 打赏
  • 举报
回复
java 学习群 108363309
ThinkCat 2010-04-19
  • 打赏
  • 举报
回复
学习了,以前没接触到这个问题
zhaoxiaolon 2010-04-19
  • 打赏
  • 举报
回复
楼上内容不对,有点不靠谱。
南门二A 2010-04-17
  • 打赏
  • 举报
回复
对不起,楼上信息发错了。
南门二A 2010-04-17
  • 打赏
  • 举报
回复
感谢楼上各位的指教,先贴出错误提示信息:


用户 'sa' 登录失败。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 用户 'sa' 登录失败。

源错误:


行 48: if (dt.Rows[0]["UserType"].ToString() == "0" || dt.Rows[0]["UserType"].ToString() == "2")
行 49: {
行 50: log.AddLog(Session["user"] + "登陆系统", Session["user"].ToString());
行 51: }
行 52: Server.Transfer("Default.aspx");


源文件: d:\big-wuye\UI\Login.aspx.cs 行: 50

堆栈跟踪:


[SqlException (0x80131904): 用户 'sa' 登录失败。]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846887
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +35
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +144
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +342
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +221
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +189
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +185
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +31
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +433
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +66
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +499
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +65
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.SqlClient.SqlConnection.Open() +122
DAL.AdminManage.AdminTableAdapters.SysLogTableAdapter.AddLog(String Event, String Handler) in G:\45修改前\XiangyueManage\DAL\AdminManage\Admin.Designer.cs:6674
BLL.SysLog.AddLog(String even, String handler) in G:\45修改前\XiangyueManage\BLL\SysLog.cs:45
Login1.imgbLogin_Click(Object sender, ImageClickEventArgs e) in d:\big-wuye\UI\Login.aspx.cs:50
System.Web.UI.WebControls.ImageButton.OnClick(ImageClickEventArgs e) +108
System.Web.UI.WebControls.ImageButton.RaisePostBackEvent(String eventArgument) +118
System.Web.UI.WebControls.ImageButton.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1565


。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
再补充一段web.config中的代码:

<connectionStrings>
<add name="XYDBConn" connectionString="server=localhost;database=mo_mo;uid=sa;pwd=">
</add>
</connectionStrings>

用户 'sa' 登录失败。怎么理解?
plusplus2010 2010-04-17
  • 打赏
  • 举报
回复
clone相当于再new 一个ArrayList,然后把list的元素通过addAll加进去。新list的结构操作(添加和删除等)不影响旧list。但两个list包含的references都指向同一组元素。
zfq642773391 2010-04-17
  • 打赏
  • 举报
回复
map.put(1, list.clone());
clone()方法会拷贝一个list的副本,即使list改变了,这个副本也是不会改变的
renjianguokeivor 2010-04-17
  • 打赏
  • 举报
回复
路过。。。。。
weberwong 2010-04-17
  • 打赏
  • 举报
回复
因为你put到map里的是引用,所以你修改外界的list,map里的一样会变化,因为这两个本来就是一个东西
想要修改外面map不变就要在put之前clone一下list,比如这样:
map.put(1, list.clone());
lyz0622_1022 2010-04-17
  • 打赏
  • 举报
回复
学习呢
huangwenjian 2010-04-17
  • 打赏
  • 举报
回复
西南java技术讨论专区群号:78152089,欢迎加入..
jiangshulin013 2010-04-17
  • 打赏
  • 举报
回复
ArrayList就是一个Object数组
wuzhenbao 2010-04-17
  • 打赏
  • 举报
回复
学习了...
wuzhenbao 2010-04-17
  • 打赏
  • 举报
回复
学习了...
加载更多回复(2)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧