算法和数据结构
文章平均质量分 81
算法和数据结构
斗锋在干嘛
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HashMap 深度解析与并发集合框架
混淆代码,第三方加密,分渠道打包,渠道统计,上传需要投放的市场,自动更新 代码混淆 在build.gradle里面配置代码 参考图1 需要混淆配置的文件 参考图2 在build.gradle里面进行配置 studio混淆需要配置的文件原创 2016-05-16 20:19:40 · 1761 阅读 · 0 评论 -
HashMap put() 方法底层原理及冲突处理机制
Android动画背景图自动播放的实现我们在开发android应用的时候,经常会遇到类似从网络加载大图,在加载的过程中,在图片要显示的ImageView位置,先显示一个转圈的loading动画图,给用户的体验会更好一些,要实现这个动画图很简单,使用在/res/anim中定义xml的方式,通常使用…. 来实现。 例如:<animation-list xmlns:android="h原创 2016-07-15 15:35:54 · 854 阅读 · 0 评论 -
HashMap实现原理深度解析
理解HashMap的实现原理不仅有助于面试,更能帮助开发者在实际应用中做出合理的设计选择,避免性能陷阱。红黑树的查找时间复杂度为O(log n),链表为O(n),n较小时链表性能更好。:当树节点数 ≤ UNTREEIFY_THRESHOLD(默认6)时退化为链表。JDK8优化:节点在新数组中的位置要么是原位置,要么是原位置+原容量。:如果迁移时发现是树节点,会将树拆分为两个链表,必要时退化为链表。:JDK7扩容时链表倒置可能导致环形链表(JDK8已修复):JDK8新增,当链表过长时转换为红黑树以提高性能。原创 2016-07-15 15:38:59 · 3495 阅读 · 0 评论 -
ArrayList、HashMap、LinkedHashMap 解析
分层回答:根据面试官级别调整回答深度结合源码:适当引用关键源码片段展示理解深度实际案例:结合项目经验说明使用场景和问题解决性能对比:在不同场景下对比三种数据结构的优劣扩展思考:展示对技术演进的了解和未来改进方向的思考。原创 2016-07-15 15:40:46 · 8624 阅读 · 0 评论 -
ArrayList线程安全解决方案
ArrayList本身是线程不安全的容器,除了使用关键字外,还有多种方式可以保证其线程安全性。原创 2016-07-15 15:43:00 · 1761 阅读 · 1 评论 -
二叉树遍历详解
样式和主题资源都是用于对Android应用进行美化的。一、样式:(一)、介绍:1、概念:Android中的样式和CSS样式作用相似,都是用于为界面元素定义显示风格,它是包含一个或者多个view控件属性的集合。如:需要定义字体的颜色和大小。2、作用:将一些常用的属性组合成样式,便于重复使用,减少给View控件指定类似属性的重复工作。Android Style类似网页设计中原创 2016-07-15 15:45:04 · 974 阅读 · 0 评论 -
对称加密、非对称加密与MD5原理详解
哈希函数:将任意长度输入→固定长度输出(128位)不可逆:无法从哈希值恢复原文抗碰撞性:已不满足安全要求(已被破解)特性对称加密非对称加密MD5(哈希)密钥机制单密钥密钥对无密钥速度快(MB/s级)慢(KB/s级)快(GB/s级)安全性基础混淆扩散数学难题哈希非线性主要用途数据加密密钥交换/签名完整性校验量子安全AES-256安全传统算法不安全已不安全。原创 2016-07-15 15:46:42 · 3025 阅读 · 0 评论 -
对称加密与非对称加密算法深度对比
理解这些差异可以帮助开发者根据安全需求、性能要求和系统架构选择最合适的加密方案。:RSA至少2048位(3072位更安全):使用OAEP而非PKCS#1 v1.5。基于哈希:SPHINCS+(数字签名):避免使用DES/3DES等弱算法。:GCM模式需保证每次IV唯一。:ECDSA(P-256曲线)基于格:Kyber(密钥封装):用非对称加密传输对称密钥。:ECDH或RSA-KEM。:X25519(椭圆曲线):用对称密钥加密实际数据。:AES-NI指令集优化。原创 2016-07-15 15:48:49 · 2070 阅读 · 0 评论 -
Android生产者消费者模型深度解析
一、介绍:(一)、概念: 如果要实现以下操作流程,使用Java代码来实现: 多个蛋糕师生产蛋糕,多个消费者购买蛋糕; 蛋糕的最大库存为5个; 早生产的蛋糕先被销售,最后被生产的蛋糕要最后被售出 如果要实现这个过程,一定要借助Java线程的并发协作来做。其实这在Java中叫做生产者消费者模型(确切说应该是“生产者-消费者-仓储”模原创 2016-07-19 17:45:36 · 493 阅读 · 0 评论 -
构造哈夫曼树的算法
①、编写哈夫曼树中每个节点结构;②、构造哈夫曼树的算法;③、编写一个存放每个节点哈夫曼编码的类型;④、编写哈夫曼树求对应的哈夫曼编码的算法;⑤、编写主函数。代码如下:#include#include#include#include//①:typedef struct{ char data; float weight; int parent; int原创 2016-02-02 18:43:44 · 2314 阅读 · 1 评论 -
编写创建二叉树的算法
①、编写创建二叉树的算法;②、编写查找节点的算法;③、编写找孩子节点的算法;④、编写求二叉树高度的算法;⑤、编写输出二叉树的算法;⑥、编写先序遍历递归算法;⑦、编写主函数。代码如下:#include#include#include#include#define MaxSize 50//①:void CreateBTNode(BTNode * &b,cha原创 2016-02-02 18:40:41 · 1795 阅读 · 0 评论 -
冒泡排序
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进 行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 算法步骤: 1)比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2)对每一对相邻元素原创 2015-11-06 16:49:03 · 332 阅读 · 0 评论 -
选择排序
选择排序(Selection sort)也是一种简单直观的排序算法。思想:还是先来看看选择排序的思想。选择排序的思想非常直接,从所有序列中先找到最小的,然后放到第一个位置。之后再看剩余元素中最小的,放到第二个位置……以此类推,就可以完成整个的排序工作了。可以很清楚的发现,选择排序是固定位置,找元素。相比于插入排序的固定元素找位置,是两种思维方式。 算法步骤: 1)首先在未排序序原创 2015-11-05 12:50:24 · 615 阅读 · 0 评论 -
插入排序全方位解析
插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法步骤: 1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入原创 2015-11-01 20:55:45 · 387 阅读 · 0 评论 -
希尔排序全方位解析
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: ●插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率 ●但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位 希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接原创 2015-11-04 21:18:33 · 761 阅读 · 0 评论 -
快速排序
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。 快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分原创 2015-11-08 16:37:48 · 368 阅读 · 0 评论 -
堆排序深度解析
最大堆:每个节点的值都大于或等于其子节点的值最小堆:每个节点的值都小于或等于其子节点的值。原创 2015-11-11 21:04:18 · 411 阅读 · 0 评论 -
堆与栈的深度解析
堆(Heap)和栈(Stack)是计算机系统中两种重要的内存管理方式,它们在内存分配、生命周期管理、使用方式等方面有着本质区别。下面从多个维度进行深度分析。原创 2015-11-21 20:37:54 · 426 阅读 · 0 评论 -
基数排序
基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。 说基数排序之前,我们简单介绍桶排序: 算法思想:是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果原创 2015-11-26 15:13:26 · 653 阅读 · 0 评论 -
归并排序
归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 算法步骤: 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下原创 2015-11-07 18:21:38 · 439 阅读 · 0 评论
分享