2 mr lufengchao Mr_LuFengChao 于 2015.06.09 16:32 提问

List 存放 Map 的get的前面元素 被覆盖 ,求解

<%
List listMainBoard =(List) mapboard.get(new Integer(0));
Board mainBoard=new Board();

                        for(int i=0;i<listMainBoard.size();i++)
                        {
                            //循环取得主版块
                            mainBoard=((Board)listMainBoard.get(i));

                    %>
                    <tr>
                        <td colspan="4"><%=mainBoard.getBoardName() %></td>
                    </tr>
                    <%
                        //子版块
                **List listSonBoard =(List)mapboard.get(new Integer(mainBoard.getBoardId()));**
                    //out.print(mainBoard.getBoardId()); 返回主版块ID,即parentId 为 0
                    if(listSonBoard!=null){
                for(int j=0;j<listSonBoard.size();j++)
                        {
                            //循环取得子版块
                            Board sonBoard=(Board)listSonBoard.get(j);
                            //最后发表的主题
                            Topic topic =new Topic();
                            //最后发表的作者
                            User user=new User();
                            int boardId =sonBoard.getBoardId();
                            //取得该版块的主题列表
                            List listTopic=new TopicDAO().findListTopic(1, boardId);

                            if(listTopic!=null&&listTopic.size()>0)
                            {
                                //取的最后发表的帖子
                                topic=(Topic)listTopic.get(0);
                                user=new UserDAO().findById(topic.getuId());
                                out.print("用户:"+user.getuName());
                            }
                    %>
                    List listSonBoard =(List)mapboard.get(new Integer(mainBoard.getBoardId())); 这边只保存了map的最后一组元素,前面的被覆盖了,怎么回事啊,求解答,谢谢

5个回答

oQingXin12345
oQingXin12345   2015.06.09 17:17
已采纳

因为你是在for循环里定义的listSonBoard,这时候每循环一次时的listSonBoard都是一个新的集合,所以之前的listSonBoard中的内容都没了,你应该在for循环的外部定义List listSonBoard=new ArrayList();然后在for循环的时候listSonBoard.add()将新增的内容添加到集合里面。

oQingXin12345
oQingXin12345 回复Jone_Chao: 不好意思啊,看错意思了,那就应该是mapboard的get方法的问题了
大约 3 年之前 回复
Mr_LuFengChao
Mr_LuFengChao 并不是这个原因啊,试了还是这样!
大约 3 年之前 回复
newstone001
newstone001   2015.06.09 17:10

帮忙顶。

网站前端开发工程师 HTML5 CSS3 平板网页开发
http://jobs.zhaopin.com/773356571250019.htm

danielinbiti
danielinbiti   Ds   Rxr 2015.06.09 17:38

先看后台map返回的个数对不对,分清是前端问题还是后台问题

danielinbiti
danielinbiti 回复Jone_Chao: 没明白你表达的意思
大约 3 年之前 回复
Mr_LuFengChao
Mr_LuFengChao mapboard.get()读取并赋值给list 后 就变成了所读取的最后一组数据,前面的没有了
大约 3 年之前 回复
Mr_LuFengChao
Mr_LuFengChao 在List listSonBoard =(List)mapboard.get(new Integer(mainBoard.getBoardId()));中,mainBoard.getBoardId()返回了四组数据,
大约 3 年之前 回复
guonan198811
guonan198811   2015.06.09 19:13

二楼正解,应该就是那个问题,我就不重复了。

guonan198811
guonan198811 回复Jone_Chao: List <类型> list = new List<类型>(); list.add()
大约 3 年之前 回复
Mr_LuFengChao
Mr_LuFengChao 可是我把定义放在了for的最外面了,还是只读到了最后一个。不知道哪里错了,求教
大约 3 年之前 回复
guonan198811
guonan198811   2015.06.09 19:47

C#里的代码一般是这个样子的 List list1 = new List(); list1.add(你要添加的项); 最后list1中就是你想要的数据,我对java不熟,不知道是不是这个样子。还有就是你的那个get 函数返回的是单个值吧?你把单个值赋值给list最后当然是一个啦

guonan198811
guonan198811 回复Jone_Chao: 给个采纳或者好评呗!~~
大约 3 年之前 回复
Mr_LuFengChao
Mr_LuFengChao 好的 ,谢谢!
大约 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
List<Map>中赋值覆盖问题
虽然修改的的是newList的第三个对象,但第一个对象id值也改变。 因为list.get(2)存的是引用,而list.get(2)和list.get(0)存放的是相同引用,内存里面同一个区域,只要一个改变,其他都会改变。 改乘这样就行了 import java.util.ArrayList; import java.util.HashMap; import java.util.Lis
解决List的add方法错使前面的元素被覆盖成相同值
今天数据结构讲到栈和队列,无意中灵感突发,想到了给之前开发的2048小游戏加一个反悔的功能,并且可以反悔任意多步数(内存允许的情况下)。 反悔其实就类似于编辑类软件的撤销功能,不过这个撤销队列在数据操作上有自己的特征。
ArrayList.add后,前面数据被覆盖的问题
1. 代码示例: public class ListTest { public static void main(String[] args) { // TODO Auto-generated method stub         List list =new ArrayList();         User user=new User();         user.setName
解决list.add() 方法会覆盖前面的已经添加好的参数
Map map = new HashMap();       //mark1 List> list = new ArrayList>(); for(int i=0;i // map=new HashMap();     //mark2 map.clear(); map.put("title", i+d); map.put("content", i+e); list.add(map);
ArrayList.add()添加一个元素后,会把前面一个元素覆盖
今天写程序时,每次取值均正确,但是不管怎么输出,都是输出最后一次 add 的值,百思不得其解,后来才发现,java的list的 add方法引用的是地址,如果是全局的话,每次引用的值都一样,取的值也就一样了。每次add都用new一个新实体就可以解决问题了,接近两小时的青春浪费了,就因为一行代码位置错误,对 list 不熟悉。 大概如下: FlightInfoVo fInfoVo = ne
Java 使用ArrayList.add() 前面所有值被 覆盖 的问题
ArrayList.add后,前面数据被覆盖的问题多次搜寻,没有讲的很清楚的答案,所有发表本篇文章。 导致这个现象最根本的原因*** * *根源就是ArrayList集合里存的是同一个值,有可能是同一个引用或者就是同一个值。 *请看下面详解 * *** 下面分情况讲述(逐步添加可能情况,欢迎在讨论区提出)1.涉及循环添加ArrayList<Object> list = new ArrayList<
在arraylist添加对象后被覆盖
public static void main(String[] args) throws IOException { ArrayList list=new ArrayList(); System.out.println("请分别输入商品名,数量及价格,以#号结束"); Scanner sc = new Scanner(System.in);    //Scanner类 String st
ArrayList add赋值后,前面数据被覆盖的问题
ArrayList<SomeType> myList = new ArraList<SomeType>(); for(.....) { SomeType st = new SomeType; for(.....) { st = ooxx; myList.add(st); }
循环里map不被重复覆盖问题
最近做一个需求时遇到一个小问题,java中想要生成多个map并且放到一个list中,在for循环里去put,结果发现前面所有的map都被最后的一个覆盖了。最后被一个大哥一句话点醒,用同一个map始终会被覆盖,必须生成不同map去put。总结了下大概就两种方法。
List集合add方法覆盖原来的内容解决办法
今天遇到一个有意思的问题,当我遍历数组的同时在for循环中使用list.add(),但这样会将之前的内容也覆盖掉。本来有3条数据,但这样会得到三条相同的数据 解决办法:   在循环中将你的对象再new一次 原因:   当使用List时,如果T是引用类型,保存的是引用,如果是值类型,保存的是值本身。 1、T是对象是,也就是说如果是引类型时,在循环外边已经new了一个对象,相当于这个对象的地