首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

List.add 方法添加元素时只会添加最后一条元素的问题与解决

List.add 方法添加元素时只会添加最后一条元素的分析解决 前言 一、问题描述 二、原因分析 1.简化分析 2.回归本题 总结 ---- 前言 在之前编写业务代码时, 遇到了一个比较神奇的现象,...如标题中描述的那样: 在对list 集合使用 add/set 方法并且遍历的去添加对象时, 只会添加最后一个元素的问题 ....List 中的 add, set 方法在添加对象(Object) 或者是集合(Collection)时, 添加的是对对象的引用 因此, 如果在循环外声明要保存的对象或集合, 但是却在循环内赋值的话,...List 中的 add, set 方法在添加对象(Object) 或者是集合(Collection)时, 添加的是对对象的引用 2....在循环外声明对象或集合, 在循环内使用list.add 就会导致list 中引用的数据地址全部都是最后一次添加的元素地址 如果想要避免.

2K40
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【Java】基础25:List、Set以及哈希表

    集合中重要的是增删改查四种方法,linkedList有几种特殊的方法: ①addFirst方法:将元素添加到开头。 其中push方法和addFirst方法一样。...②addLast方法:将元素添加到结尾。 ③removeFirst方法:将开头元素移除并返回。 其中pop方法和removeFirst方法一样。 ④removeLast方法:将结尾元素移除并返回。...其中有两个方法比较特殊,官方解释如下: pop方法:从此列表所表示的堆栈处弹出一个元素。 push方法:将元素推入此列表所表示的堆栈。 不要看它解释的这么复杂,其实就是堆栈结构,堆栈有什么特点?...若是我的话,我肯定会想:将新的元素和Set中的每一个元素比较一遍不就可以了?如果有相等的,就不添加;如果有不相等的,就添加。...数组查询快,如果现在添加进来了一个元素,我根本不用遍历,我就看有没有相同的哈希值(相当于索引),直接就可以定位: 如果没有相同的哈希值,直接添加进集合。 如果有相同的哈希值,我再比较内容是否一样。

    83910

    聊一下在二叉树上挂了几天的感受

    、抽象类和抽象方法 java中的队列(queue)和双队列(deque) 什么是队列queue 队列作为先行结构中的一种,数据结构和栈相反,是先进先出的顺序方式 基本操作: 压入元素(添加):add()...因此也经常被称为首尾链表,只不过是前端与后端都支持插入和删除操作的队列,更实用,所以也就不存在先进先出这种说法了。...在将双端队列用作队列时,将得到 FIFO(先进先出)行为。将元素添加到双端队列的末尾,从双端队列的开头移除元素。...堆栈方法完全等效于 Deque 方法,如下表所示: deque方法有xxxLast()和xxxFirst(),xxxLast()方法和xxx()方法操作的效果是一样的 综上,不管是list、linkedlist...还是queue、还是deque,添加元素都是从左边,如果继续添加元素,原来的元素不动,继续往后添加。

    19730

    List集合

    1.1 List接口的方法   List除可以从Collection集合继承的方法,List集合中还添加了一些根据索引来操作集合的方法。...这些操作允许将链表用作堆栈、队列或双端队列。   将LinkedList类作为普通列表形式使用的示例代码。...堆栈方法 等效Deque方法 push(e) addFirst(e) pop() removeFirst() peek() peekFirst()   将LinkedList类作为堆栈使用的示例代码:...:一种形式在操作失败时抛出异常,另一种形式则会返回一个特殊值,null或false,具体形式取决于操作,LinkedList类作为双向链表使用的方法如下所示。...int previousIndex():返回列表中的前一个元素的索引。 boolean hasNext():判断有没有下一个元素。 Object next():返回列表中的最后一个元素。

    65130

    JavaScript 数据结构:栈和队列

    每次添加文本就会添加至文末,即压入堆栈底部(push())。...)方法相反——它返回栈顶元素,同时将变量 top的值减 1: function pop() {    return this.dataStore[--this.top]; } 定义peek方法 peek...length()方法通过返回变量 top值的方式返回栈内的元素个数: function length() {    return this.top; } 定义clear方法 最后,可以将变量 top的值设为...与堆栈不同,队列只会删除最早添加的数据。 队列是一种列表,不同的是队列只能在队尾插入元素,在队首删除元素。队列用于存储按顺序排列的数据,先进先出,这点和栈不一样,在栈中,最后入栈的元素反而被优先处理。...堆栈按顺序存储数据并删除最近添加的数据;队列按顺序存储数据,但删除最早添加的数据。堆栈与队列我们会经常遇到,如果需要按顺序组织数据,请优先考虑使用堆栈和队列。

    63930

    准备下次编程面试前你应该知道的数据结构

    常用的数据结构 我们首先列出最常用的数据结构,然后再挨个讲解: 数组 堆栈 队列 链表 树 图 字典树 哈希表 数组 数组是一种最简单和最广泛使用的数据结构,其它数据结构比如堆栈和队列都源自数组。...有没有想过它是如何工作的?其思路就是,按照最后的状态排列在先的顺序将工作的先前状态(限于特定数字)存储在内存中。这只用数组是无法实现的,因此堆栈就有了用武之地。 可以把堆栈看作一堆垂直排列的书籍。...这是一个包含三个数据元素(1,2 和 3)的堆栈图像,其中3位于顶部,首先把它删除: 堆栈的基本操作: Push——在顶部插入元素 Pop—— 从堆栈中删除后返回顶部元素 isEmpty——如果堆栈为空...,则返回 true Top ——返回顶部元素,但不从堆栈中删除 常见的堆栈面试问题: 使用堆栈计算后缀表达式 对堆栈中的值进行排序 检查表达式中的括号是否平衡 队列 与堆栈类似,队列是另一种线性数据结构...堆栈和队列之间唯一的显着区别是,队列不是使用 LIFO 方法,而是应用 FIFO 方法,这是 First in First Out(先入先出)的缩写。 队列的完美现实例子:一列人在售票亭等候。

    1.2K10

    JAVA零基础小白学习免费教程day13-Collection&数据结构

    它是一个带有索引的集合,通过索引就可以精确的操作集合中的元素(与数组的索引是一个道理)。 集合中可以有重复的元素,通过元素的equals方法,来比较是否为重复的元素。...add(int index, E element) 将指定的元素,添加到该集合中的指定位置上。...方法名 说明 public void add(int index, E element) 将指定的元素,添加到该集合中的指定位置上。...public void push(E e) 将元素推入此列表所表示的堆栈。 public boolean isEmpty() 如果列表不包含元素,则返回true。...队列 队列:queue,简称队,它同堆栈一样,也是一种运算受限的线性表,其限制是仅允许在表的一端进行插入,而在表的另一端进行删除。

    7310

    你所能用到的数据结构(六)

    首先,堆栈肯定是一种集合,一种具有特殊性质的集合,那么很自然的想到利用数组来实现,比方说我们有一个20个长度的数组a,我们将第一个数放在索引为0的位置上,现在第二个数,我们将第一个数向后挪一位,挪到a[...可以很自然的想到如果我将每次新进来的元素都放在数组的末尾,也就是每次都在数组的最末尾添加元素,那样对于插入操作的效率是最快的,那就将到来的数依次从0插入,如果需要取数的话,那么永远从最后一个数开始取,同时用一个变量标示数组中实际有多少元素...其实你可以去学学C++),添加元素的专业叫法是push(压),取出元素的专业叫法是pop(弹出),你可以想象那种前几年流行过的一种存硬币的圆柱状物品,你可以把硬币一个一个压入那里面,然后弹出最上面的硬币...count-Pos-1]; 35 } 36 37 38 39 40 int Stack::GetCount() 41 { 42 return count; 43 }      对于压入我采用的是往数组的后面添加元素的方法...,弹出是的话是将最后一个元素返回,然后设为0,同时堆栈的大小减一。

    62150

    【C++】STL 容器 - stack 堆栈容器 ① ( stack 堆栈容器特点 | stack 堆栈容器与 deque 双端数组容器对比 | 简单示例 )

    deque 双端数组 , stack 只提供很少的几个成员函数 ; 异常安全 : stack 堆栈容器 可以保证 在出现异常时 , 数据完整 ; 3、stack 堆栈容器与 deque 双端数组容器对比...stack 堆栈容器与 deque 双端数组容器对比 : 容器特点 : stack 堆栈容器 是一种后进先出 LIFO 的数据结构 , 该容器只允许在一端进行插入和删除操作 ; push...() 方法 , 用于在堆栈顶部添加元素 , pop()方法用于从堆栈顶部删除元素 , 栈顶相当于 deque 或 vector 容器的尾部 ; deque 双端数组容器 , 又称为 双端队列 , 是一种更为灵活的数据结构..., 该容器支持在队列的头部和尾部进行插入和删除操作 ; 迭代器迭代 : stack 堆栈容器 不提供迭代器 , 也不支持 在首部 插入 / 删除 元素 ; Deque提供了迭代器,并支持队列的头部和尾部添加或删除元素...int 类型对象 ; // 创建 stack 堆栈容器对象 std::stack s; 然后 , 向 stack 容器加入元素 , 又称为 入栈操作 , 将元素加入到栈顶 ;

    16810

    Java 面试题之 Logback 打印日志是如何获取当前方法名称的?

    () 方法 使用匿名内部类的 getClass().getEnclosingMethod() 方法 Java 9 的 Stack-Walking API 本文将根据以上四种方法来给大家进行具体讲解,不过不知道大家有没有想过...这个方法会返回一个表示当前线程堆栈转储的 StackTraceElement 数组,每个元素代表一个堆栈帧。...数组的第一个元素是 getStackTrace() 方法本身,第二个元素是调用 getStackTrace() 的方法,以此类推。...然后我们使用 walk() 方法从上到下遍历栈帧: walk() 方法可以将堆栈帧转化为 Stream 流 findFirst() 方法从 Stream 流中的获取第一个元素,也就是堆栈的顶部帧,顶部帧就代表当前正在执行的方法...StackWalker 是以一种懒惰的方式逐一遍历堆栈。

    43560

    Java|Map、List与Set的区别

    )方法返回的元素 2.2、Set(集合) Set是最简单的一种集合。...:一种是基本的ArrayList,其优点在于随机访问元素;另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。...List:次序是List最重要的特点,它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素。...Map的常用方法: 1、添加,删除操作: Object put(Object key, Object value): 向集合中加入元素 Object remove(Object key): 删除与KEY...3、Map的功能方法: 方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。

    2.8K130

    《Java 数据结构与算法》第4章:栈

    ❞ 一、前言 二、堆栈数据结构 三、实现堆栈结构 1. ArrayDeque 介绍 2. 添加元素 3. 扩容空间 4....二、堆栈数据结构 在计算机科学中,堆栈是一种抽象数据类型,用作元素的集合,具有两个主要的操作; PUSH:将元素添加到集合 POP:删除最近添加但尚未删除的元素 堆栈是一种 LIFO(后进先出)的线性的数据结构...ArrayDeque 介绍 ArrayDeque 是一个基于数组实现的堆栈数据结构,在数据存放时元素通过二进制与运算获取对应的索引存放元素。...它之所这样是因为保证了在后续计算元素索引位置时,可以进行与运算。也就说 2的n次幂-1 得到的值是一个011111的范围,在与元素索引位置计算时候,找到两个值之间1的位置即可。...System.arraycopy 是操作数据迁移的本地方法,从源数组的某个指定位置,把元素迁移到新数组的指定位置和指定个数个元素。

    54420

    JUC-BlockingQueue

    ,Blocking是一个接口,其中主要的方法为 // 尝试往队尾添加元素,添加成功返回true,添加失败返回false boolean add(E e); // 尝试往队尾添加元素,添加成功返回true...TransferQueue队列特殊的地方就在于这个队列中只会存在一种节点:要么是获取元素的线程节点,要么是添加元素的线程节点 在初始化TransferQueue对象时,会初始化生产一个节点队列的头...,一类是获取元素:REQUEST,一类的添加元素:DATA,其中也只有一种节点只有被唤醒时候才会短暂出现2种节点 SNode //下一个节点 volatile SNode next...然后更新head节点返回DATA类型节点的元素值 在有不同类型的节点进入堆栈中的时候,新节点添加到堆栈顶端并更新为新的head节点;这个节点的mode = REQUEST | FULFILLING ;...,入队阻塞部分的源码几乎与TransferQ ueue一样;TransferStack唤醒节点的方式与TransferQueue有点差别,TransferStack是将新节点先包装成节点添加到堆栈中,再唤醒节点线程

    16120

    【数据结构基础】栈简介(使用ES6)

    栈是一种高效的数据结构(后进先出(LIFO)原则的有序集合),因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言实现的方方面面。...我们需要一个能够存储堆栈元素的数据结构,我们可以使用数组结构来完成,同时还需要我们在堆栈中添加和移除数据元素,由于堆栈后进先出的原则,我们的添加和删除方法稍微特别些,Stack这个类的实现包含以下几个方法...: push(element(s)): 此方法将新添加的元素添加至堆栈的顶部 pop():此方法删除栈顶的元素,同时返回已删除的元素 peek(): 返回堆栈的顶部元素 isEmpty(): 判断堆栈是否为空...clear(): 清空堆栈所有的元素。 size(): 此方法返回堆栈元素的数量,类似数组的长度。 toArray(): 以数组的形式返回堆栈的元素。...push() 此方法负责向堆栈添加新元素,其中最重要的特点就是:只能将新元素添加到栈顶,即堆栈的末尾,我们可以使用数组的push方法正好符合这个需求,代码如下: push(element) {

    71450

    算法一看就懂之「 堆栈 」

    好吧,这个算法系列的文章我打算每一篇的结尾处都找一道算法题写出代码示例,这总可以了吧。 一、「 堆栈 」是什么? 堆栈(stack)是一种先进后出的、操作受限的线性表,也可以直接称为 栈。...先初始化一个数组,然后再用一个变量给这个数组里的元素进行计数,当有新元素需要入栈的时候,将这个新元素写入到数组的最后一个元素的后面,然后计数器加一。...如果能匹配,则OK,删除这个左括号和右括号,继续往后走,继续遍历字符串中剩下的字符,只要遇到左括号就入栈,只要遇到右括号就与将栈顶的左括号出栈与之比较。...=c) return false; } } return stack.isEmpty(); } } 继续思考有没有更简洁的方法,竟然在leetcode...上找到了一个: 但是这个方法并没有用到堆栈哦,它的思路是不断的遍历这个字符串,将字符串中的(){}[]全部调换成空字符串,如果最后全部替换完成了,并且字符串为空了,就说明字符串是有效的,否者就是无效的字符串

    48640

    java中Map,List与Set的区别

    三:数组是一种可读/可写数据结构---没有办法创建一个只读数组。然而可以使用集合提供的ReadOnly方法,以只读方式来使用集合。该方法将返回一个集合的只读版本。...  实际上有两种List:一种是基本的ArrayList,其优点在于随机访问元素,另一种是更强大的LinkedList,它并不是为快速随机访问设计的,而是具有一套更通用的方法。...List:次序是List最重要的特点:它保证维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(这只推 荐LinkedList使用。)...(Object key): 删除与KEY相关的元素 void putAll(Map t): 将来自特定映像的所有元素添加给该映像 void clear...Map的功能方法 方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。

    1.6K20

    【数据结构基础】栈简介(使用ES6)

    01 什么是栈栈是一种高效的数据结构(后进先出(LIFO)原则的有序集合),因为数据只能在栈顶添加或删除,所以这样的操作很快,而且容易实现。栈的使用遍布程序语言实现的方方面面。...我们需要一个能够存储堆栈元素的数据结构,我们可以使用数组结构来完成,同时还需要我们在堆栈中添加和移除数据元素,由于堆栈后进先出的原则,我们的添加和删除方法稍微特别些,Stack这个类的实现包含以下几个方法...: push(element(s)): 此方法将新添加的元素添加至堆栈的顶部 pop():此方法删除栈顶的元素,同时返回已删除的元素 peek(): 返回堆栈的顶部元素 isEmpty(): 判断堆栈是否为空...clear(): 清空堆栈所有的元素。 size(): 此方法返回堆栈元素的数量,类似数组的长度。 toArray(): 以数组的形式返回堆栈的元素。...push() 此方法负责向堆栈添加新元素,其中最重要的特点就是:只能将新元素添加到栈顶,即堆栈的末尾,我们可以使用数组的push方法正好符合这个需求,代码如下: push(element) {

    75010
    领券