`

链表拷贝元素到另一个链表,结果发现后面的元素覆盖了前面的

 
阅读更多
private List<VTopic> tranformList(List<Topic> ts) {
		List<VTopic> topics = new ArrayList<VTopic> ();
	// 注册装换器	
		EntityVoConverter evc = new EntityVoConverter();
		ConvertUtils.register(evc, VCategory.class);
		ConvertUtils.register(evc, User.class);
		ConvertUtils.register(evc, VTopic.class);
		
		
		for (int i = 0 ; i  < ts.size() ; i++) {
			VTopic topic = new VTopic();
			try {
				BeanUtils.copyProperties(topic, ts.get(i));
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
			topics.add(topic);
			for (int j = 0 ; j <= i ; j++) {
				System.out.println(topics.get(j).getTheme());
			}
		}
		return topics;
		
	}

   如果我把VTopic topic = new VTopic();这句话放在for循环外面的时候,每次都会覆盖前面的,因为那样的话,每个元素指向的都是一个内存区间,后面的操作并没有新new一个对象,而是在topic这个对象的字段上进行操作,所以就会覆盖了!二逼了!

分享到:
评论

相关推荐

    c++ 链表应用 链表类源代码 原创

    1. **链表的插入**:在链表中插入元素涉及到在适当位置创建新节点,并更新前一个节点的指针指向新节点。这通常在头部、尾部或特定位置进行。 2. **链表的删除**:删除操作需要找到要删除的节点,然后更新其前一个...

    拷贝具有随机指针节点的链表,

    在本问题中,我们关注的是一个特殊的链表,其中包含了一个额外的随机指针(random pointer),这个指针可以指向链表中的任意节点,而不仅限于下一个节点。这个数据结构在某些算法问题和复杂数据模型中非常有用。 ...

    实现一个模板类的链表(c++)

    4) Push_back(T e)函数,往链表最末尾插入一个元素为e的节点(10分) 5) operator()友元函数,将链表的所有元素按顺序输出(10分) 6) operator=()函数,实现两个链表的赋值操作(10分) 7) operator+()函数...

    创建一个数据类型为T的链表类模板List,实现以下成员函数的模拟测试.cpp

    4) Push_back(T e)函数,往链表最末尾插入一个元素为e的节点(10分) 5) operator()友元函数,将链表的所有元素按顺序输出(10分) 6) operator=()函数,实现两个链表的赋值操作(10分) 7) operator+()函数...

    第一课 链表

    2. **头插法**:从第二个节点开始,依次将其插入到第一个节点之前,最后将原始链表的头节点设为新链表的最后一个节点。这种方法虽然也需要遍历链表,但会创建新的节点引用,因此需要更多的空间。 接下来的几个问题...

    拷贝带随机指针的链表1

    解决这个问题的关键在于同时处理两个链表:一个是原始链表,另一个是拷贝后的链表。首先,我们需要创建一个与原链表同样长度的新链表,其中每个新节点的值都等于原链表相应节点的值,但此时随机指针未设置。这可以...

    双向链表的C++实现

    双向链表是一种重要的线性数据结构,与单链表不同,它在每个节点中都包含两个指针,一个指向前一个节点,另一个指向后一个节点。这种设计允许双向遍历,使得插入和删除操作更加灵活。在本主题中,我们将深入探讨如何...

    循环链表实验报告(word文档,详细解说)

    `add` 函数在链表的第一个元素之前插入新节点,而 `addlast` 函数则在最后一个元素之后插入。插入操作通常涉及对链表结构的修改,需要创建新的节点并更新指针关系。对于循环链表,由于没有明确的开始或结束标志,...

    linux内核链表介绍与了解

    与传统链表不同的是,Linux内核中的链表并没有独立的数据域,而是将`struct list_head`节点嵌入到实际的数据结构中,即在需要使用链表的数据结构中包含一个`struct list_head`成员,以此来组织和链接数据。...

    链表的19种算法(C语言)

    1. **创建链表**:创建一个空链表,通常涉及到初始化头节点,头节点通常不存储数据,仅用于指向第一个元素。 2. **插入节点**:在链表的特定位置(如开头、末尾或中间)插入新节点。插入操作需要更新前后节点的指针...

    C++双向链表的实现

    首先,双向链表的每个节点包含三部分:数据域,以及两个指针,一个指向前一个节点,另一个指向后一个节点。这种设计使得我们可以双向遍历链表,不仅从前向后,也可从后向前,增加了操作的灵活性。 在C++中,我们...

    实用单向链表的基本操作函数24个C语言版

    12. **复制链表**:创建链表的深度拷贝,即每个原链表节点都有一个对应的副本节点,且保持原有的链接关系。 13. **判断链表是否有环**:使用快慢指针(Floyd's Cycle-Finding Algorithm)来检测链表中是否存在环。 ...

    RE_链表1

    一种是使用后序递归,跟踪一个节点后面有多少个节点,当节点后面有N个节点时,其下一个节点就是待删除的节点。另一种是快慢指针法,让快指针先行N步,然后两个指针同时前进,当快指针到达末尾时,慢指针指向的就是...

    c++笔试题汇总 ①链表反转 单向链表的反转是一个经常被问到的一个面试题,也是一个非常基础的问题。比如一个链表是这样的: 1->2->3->4->5 通过反转后成为5->4->3->2->1。 最容易想到的方法遍历一遍链表,利用一个辅助指针,存储遍历过程中当前指针指向的下一个元素,然后将当前节点元素的指针反转后,利用已经存储的指针往后面继续遍历。源代码如下:

    在C++编程中,链表是一种非常重要的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表反转是常见的面试题,主要考察程序员对基本数据结构的操作能力和逻辑思维能力。这里我们将详细讨论...

    mfc链表-学生管理系统

    在MFC(Microsoft Foundation Classes)框架中,设计一个基于链表的学生管理系统是一项常见的任务,它涉及到数据结构、对象导向编程以及MFC库的使用。MFC是微软为Windows应用程序开发提供的一套C++类库,它封装了...

    c++链表的实现

    - **Next()**:移动遍历位置到下一个元素。 - **EndOfList()**:判断是否到达链表末尾。 - **CurrentPosition()**:返回当前元素的位置序号。 - **InsertFront()**、**InsertRear()**:分别在链表头部和尾部插入元素...

    数组的扩容和链表结构.zip

    链表与数组不同,它的元素在内存中不是连续存储的,每个元素(节点)包含数据以及指向下一个节点的引用。这使得链表的插入和删除操作非常高效,只需要修改相邻节点的引用即可,时间复杂度为O(1)。然而,链表的缺点是...

    数组和链表的优缺点 (1) 数组和链表(01).docx

    相反,每个元素(称为节点)都包含指向列表中下一个元素的链接。链表可以分为单向链表、双向链表等多种类型。单向链表的每个节点只包含一个指向下一个节点的指针;而双向链表的每个节点则包含两个指针,分别指向前后...

Global site tag (gtag.js) - Google Analytics