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

学会 Java 数据结构,想不飘都难!

准备把 23 从 ArrayList 中移除。 ? 此时下标为 7、8、9 的元素往前挪。 ? 简单总结一下 ArrayList 的时间复杂度,方便大家在学习的时候作为参考。...LinkedList 中的每一个元素都可以称之为节点(Node),每一个节点都包含三个项目:其一是元素本身,其二是指向下一个元素的引用地址,其三是指向上一个元素的引用地址。...相比 ArrayList,LinkedList 有以下优势: 1、LinkedList 允许内存进行动态分配,这就意味着内存分配是由编译器在运行时完成的,我们无需在 LinkedList 声明的时候指定大小...3、二叉查找树:英文名叫 Binary Search Tree,即 BST,需要满足以下条件: 任意节点的左子树不空,左子树上所有节点的值均小于它的根节点的值; 任意节点的右子树不空,右子树上所有节点的值均大于它的根节点的值...其中用到的算法叫做哈希,就是把任意长度的输入,变换成固定长度的输出,该输出就是哈希值。像 MD5、SHA1 都用的是哈希算法。

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

    Java容器 | 基于源码分析List集合体系

    其效率问题也是一样,如果移除集合的首位元素,后面所有元素都要移动,移除元素的位置越靠后,效率影响就相对降低。...三、LinkedList详解 1、链表结构特点 链表结构存储在物理单元上非连续、非顺序,节点元素间的逻辑顺序是通过链表中的指针链接次序实现的。...链表由一系列节点组成,节点可以在运行时动态生成,节点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 ?...中定义静态类Node描述节点的结构:元素、前后指针。...,查询LinkedList中靠中间位置的元素,需要执行的遍历的次数越多,效率也就越低,所以LinkedList相对更适合查询首位元素。

    28450

    Java面试常见问答

    反射的用途以及实现 Java反射框架提供以下功能: 在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。...在运行时判断任意一个类所具有的成员变量和方法(通过反射设置可以调用private)。 在运行时调用任意一个对象的方法。...总的来说,反射功能可以在运行时动态的获取某个对象的类,实例化某个类的对象,或者调用某个对象的方法,主要应用在编写框架的时候. 2....用的是值(他只有值.). 10.HashMap 和 ConcurrentHashMap 的区别 线程安全和不安全的区别 ConcurrentHashMap的实现原理可以看一下 底层的存储两者都一样 11...的工作原理及代码实现,如何统计所有的元素个数 见博客 14.

    47420

    Java集合类

    add(E e); //从集合中移除某个元素,同样的,移除成功返回true,否则false boolean remove(Object o); //-------这些是批量执行的操作...extends E> c); //移除给定集合中出现的所有元素,如果某个元素在当前集合中不存在,那么忽略这个元素 //从数学角度来说,就是求当前集合与给定集合的差集 //移除成功返回...以Set形式返回 Set keySet(); //返回Map中存放的所有值 Collection values(); //返回所有的键值对,这里用的是内部类...,实际上对应类型的集合类有可能会存放其他类型的值,泛型的类型检查只存在于编译阶段,只要我们绕过这个阶段,在实际运行时,并不会真的进行类型检查,要解决这种问题很简单,就是在运行时进行类型检查: public...,实际上对应类型的集合类有可能会存放其他类型的值,泛型的类型检查只存在于编译阶段,只要我们绕过这个阶段,在实际运行时,并不会真的进行类型检查,要解决这种问题很简单,就是在运行时进行类型检查: public

    21320

    Java集合类

    add(E e); //从集合中移除某个元素,同样的,移除成功返回true,否则false boolean remove(Object o); //-------这些是批量执行的操作...extends E> c); //移除给定集合中出现的所有元素,如果某个元素在当前集合中不存在,那么忽略这个元素 //从数学角度来说,就是求当前集合与给定集合的差集 //移除成功返回...以Set形式返回 Set keySet(); //返回Map中存放的所有值 Collection values(); //返回所有的键值对,这里用的是内部类...,实际上对应类型的集合类有可能会存放其他类型的值,泛型的类型检查只存在于编译阶段,只要我们绕过这个阶段,在实际运行时,并不会真的进行类型检查,要解决这种问题很简单,就是在运行时进行类型检查: public...,实际上对应类型的集合类有可能会存放其他类型的值,泛型的类型检查只存在于编译阶段,只要我们绕过这个阶段,在实际运行时,并不会真的进行类型检查,要解决这种问题很简单,就是在运行时进行类型检查: public

    24210

    java集合详解和集合面试题目

    2,如果集合中的元素的数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而arraylist增长率为目前数组长度的50%。...泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。...(4)用户自定义key类的最佳实践是使之为不可变的,这样,hashCode()值可以被缓存起来,拥有更好的性能。...当集合创建时,枚举集合中的所有元素必须来自单个指定的枚举类型,可以是显示的或隐示的。EnumSet是不同步的,不允许值为null的元素。...(4)总是使用类型安全的泛型,避免在运行时出现ClassCastException。 (5)使用JDK提供的不可变类作为Map的key,可以避免自己实现hashCode()和equals()。

    64720

    LinkedList源码解析

    : " + linkedList.peekLast()); // 获取但不移除此列表的第一个元素 linkedList.pollFirst(); // 获取并移除此列表的第一个元素...linkedList.removeFirstOccurrence(3); // 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表) System.out.println("After...removeFirstOccurrence(3):" + linkedList); linkedList.removeLastOccurrence(3); // 从此列表中移除最后一次出现的指定元素...} // 执行结果如下: listByNormalFor:1067 ms listByStrengThenFor:3 ms listByIterator:2 ms 通过普通for循环随机访问的方式执行时间远远大于迭代器访问方式...从代码中可以看出,数组a的length小于等于size时,a中所有元素被覆盖,被拓展来的空间存储的内容都是null;若数组a的length的length大于size,则0至size-1位置的内容被覆盖,

    93041

    数据结构与算法(五)——链表相关算法题目

    min且小于等于max(min、max是给定的两个参数,其值可以与表中的元素相同,也可以不同)的所有元素。...,分别找到值大于等于min的第一个节点前面的那个节点priorNode,以及值小于等于max的最后那个节点tailNode (2)找到priorNode的后继节点(即待移除的第一个节点),并使用变量toDeleteHeadNode...(LinkedList *list, int min, int max) { // 检验输入范围的有效性 if (min > max) { return; } // 如果链表元素为空...数组的元素初始值均设置为0,该数组用于记录单链表中的节点值的绝对值出现的频次 逻辑设计: (1)假设单链表是linkedList,链表长度是m,要求链表中的数值的绝对值都不能大于n (2)创建一个长度为...(*list)->next) { return; } // 新建数组array,并初始化所有元素值为0,以记录链表节点绝对值出现的次数 int array[limitedValue

    82680

    ArrayList、LinkedList、 Vector、Map 用法比较

    后一个构造函数允许用户复制一个Collection。 如何遍历Collection中的每一个元素?...用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。和下面要提到的Set不同,List允许有相同的元素。...size、isEmpty、get、set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间,其他的方法运行时间为线性。...以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?...比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?O(1),但它在查询索引一个元素的使用时却比较慢O(i),其中i是索引的位置。

    64130

    站在巨人的肩膀上学数据结构,不飘也难啊!

    LinkedList 中的每一个元素都可以称之为节点(Node),每一个节点都包含三个项目:其一是元素本身,其二是指向下一个元素的引用地址,其三是指向上一个元素的引用地址。...相比 ArrayList,LinkedList 有以下优势: 1、LinkedList 允许内存进行动态分配,这就意味着内存分配是由编译器在运行时完成的,我们无需在 LinkedList 声明的时候指定大小...,左子树上所有节点的值均小于它的根节点的值; 任意节点的右子树不空,右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树。...平衡二叉树本质上也是一棵二叉查找树,不过为了限制左右子树的高度差,避免出现倾斜树等偏向于线性结构演化的情况,所以对二叉搜索树中每个节点的左右子树作了限制,左右子树的高度差称之为平衡因子,树中每个节点的平衡因子绝对值不大于...其中用到的算法叫做哈希,就是把任意长度的输入,变换成固定长度的输出,该输出就是哈希值。像 MD5、SHA1 都用的是哈希算法。

    34400

    滑动窗口最大值

    示例: 输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3 输出: [3,3,5,5,6,7]  解释:    滑动窗口的位置                最大值 -...解题思路 最直观的做法是在滑动窗口时每次遍历一次窗口中的 k 个数取最大值,算法复杂度为 O(n x k) 使用双端队列可以将复杂度降为 O(n) (1)遍历数组,每次从队尾添加元素,注意这里添加到队列的是数组的下标不是数组的值...,需要判断队列中的数是否还在窗口中 (2)每次添加元素时,当前数组的值大于队尾则将队尾元素移除,直到小于队尾或者队列为空时才把数组下标添加到队尾 (3)判断队列中的元素个数,如果大于k或者队头存储的数组下标超出了窗口...,则移除队头 import java.util.Deque; import java.util.LinkedList; /** * 239、滑动窗口最大值 * https://leetcode-cn.com...&& deque.getFirst() < i-k+1) { deque.removeFirst(); } // 当前数大于队尾则移除队尾

    48510

    ArrayList Vector LinkedList(一)

    ArrayList Vector LinkedList 区别与用法 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计...后一个构造函数允许用户复制一个Collection。   如何遍历Collection中的每一个元素?...用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List 中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。   ...它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。...以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?

    43760

    Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法

    后一个构造函数允许用户复制一个Collection。   如何遍历Collection中的每一个元素?...用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。 和下面要提到的Set不同,List允许有相同的元素。   ...它允许所有元素,包括null。ArrayList没有同步。 size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。...以为在进行上述操作的时候集合中第i和第i个元素之后的所有元素都要执行位移的操作。这一切意味着什么呢?...比如,LinkList集合类在增加或移除集合中任何位置的元素所花费的时间都是一样的?

    1.5K80

    【Java】Java队列Queue使用详解

    无论使用哪种排序方式,队列的头 都是调用 remove() 或 poll() 所移除的元素。在 FIFO 队列中,所有的新元素都插入队列的末尾。其他种类的队列可能使用不同的元素放置规则。...offer 方法设计用于正常的失败情况,而不是出现异常的情况,例如在容量固定(有界)的队列中。 remove() 和 poll() 方法可移除和返回队列的头。...到底从队列中移除哪个元素是队列排序策略的功能,而该策略在各种实现中是不同的。...element() 和 peek() 返回但不移除队列的头。 Queue 接口并未定义阻塞队列的方法,而这在并发编程中是很常见的。...即使在允许 null 的实现中,也不应该将 null 插入到 Queue 中,因为 null 也用作 poll 方法的一个特殊返回值,表明队列不包含元素。

    82830

    LeetCode通关:栈和队列六连,匹配问题有绝招

    当 headStack 中没有元素时,将 tailStack 中所有的元素都 push 进 headStack 中。 这样一来,就用两个栈模拟了队列的出入顺序。...num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。...示例 3 : 输入:num = "10", k = 2 输出:"0" 解释:从原数字移除所有的数字,剩余为空就是 0 。...思路: 遍历字符串 s,若当前栈不为空并且栈顶元素的值大于当前遍历的元素值并且移除元素的个数没有达到要求 k,则栈顶元素出栈,count 值加 1。...若遍历完整个字符串而 count 移除的元素个数没有达到要求,示例:num = "123456", k = 3),此时直接将栈中的前三个元素依次出栈,即 " 654 " 出栈剩下的 " 321

    47220

    Java编程思想核心笔记

    Java编程思想 文章目录 简介 第一章 对象导论 伴随多态的可装换对象 单根继承 参数化类型 对象的创建和生命期 第二章 一切都是对象 必须由你创建所有的对象 方法、参数和返回值 第三章..., 组合是显式的放, 继承是隐式的放 向上转型 由导出类转型成基类, 一般称为向上转型 向上转型总是安全的 第八章 多态 “我曾经被问到’求教, Babbage 先生, 如果你向机器中输入错误的数字,..., 其它所有的方法都是后期绑定 向下转型与运行时类型识别 运行时类型识别: 在 Java 语言中, 所有的转型在运行期间都会得到检查(如果类型不争取, 会返回一个 ClassCastException...() 也完全一样, 移除并返回列表的头, 列表为空时抛出异常 NoSushElementException; poll() 稍有差异, 列表为空时返回 null removeLast() 移除并返回列表的最后一个元素...然而, 编译期间并不能找出所有的错误, 余下的问题必须在运行期间解决.

    56820

    LinkedList和Queue

    基于链表实现的方式使得LinkedList在插入和删除时更优于ArrayList,而随机访问则比ArrayList逊色些。 LinkedList实现所有可选的列表操作,并允许所有的元素包括null。...该构造函数首先会调用LinkedList(),构造一个空列表,然后调用了addAll()方法将Collection中的所有元素添加到列表中。...addLast(E e): 将指定元素添加到此列表的结尾。 移除方法 remove(Object o):从此列表中移除首次出现的指定元素(如果存在)。...null,然后迭代这个链表找到该元素节点,最后调用remove(Entrye),remove(Entrye)为私有方法,是LinkedList中所有移除方法的基础方法,如下: private E remove...: clear(): 从此列表中移除所有元素。

    48410

    40个Java集合类面试题和答案

    泛型允许我们为集合提供一个可以容纳的对象类型,因此,如果你添加其它类型的任何元素,它会在编译时报错。这避免了在运行时出现ClassCastException,因为你将会在编译时得到报错信息。...(4)用户自定义key类的最佳实践是使之为不可变的,这样,hashCode()值可以被缓存起来,拥有更好的性能。...(3)LinkedList比ArrayList消耗更多的内存,因为LinkedList中的每个节点存储了前后节点的引用。 26.哪些集合类提供对元素的随机访问?...当集合创建时,枚举集合中的所有元素必须来自单个指定的枚举类型,可以是显示的或隐示的。EnumSet是不同步的,不允许值为null的元素。...(4)总是使用类型安全的泛型,避免在运行时出现ClassCastException。 (5)使用JDK提供的不可变类作为Map的key,可以避免自己实现hashCode()和equals()。

    66630
    领券