
数据结构与算法
jacljh
程序匠人
展开
-
单链表的实现-JAVA
一、单链表的概念 链表是最基本的数据结构,其存储的你原理图如下图所示 上面展示的是一个单链表的存储原理图,简单易懂,head为头节点,他不存放任何的数据,只是充当一个指向链表中真正存放数据的第一个节点的作用,而每个节点中都有一个next引用,指向下一个节点,就这样一节一节往下面记录,直到最后一个节点,其中的next指向null。 链...转载 2018-11-09 10:24:17 · 163 阅读 · 0 评论 -
Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)
概要前面,我们已经学习了ArrayList。接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解。内容包括::1 fail-fast简介2 fail-fast示例3 fail-fast解决办法4fail-fast原理5 解决fail-fast的原理转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308762...转载 2019-06-03 22:29:06 · 98 阅读 · 0 评论 -
Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
概要上一章,我们学习了Collection的架构。这一章开始,我们对Collection的具体实现类进行讲解;首先,讲解List,而List中ArrayList又最为常用。因此,本章我们讲解ArrayList。先对ArrayList有个整体认识,再学习它的源码,最后再通过例子来学习如何使用它。内容包括:第1部分 ArrayList简介第2部分 ArrayList数据结构第3部分 ArrayLi...转载 2019-06-03 22:25:23 · 110 阅读 · 0 评论 -
Java 集合系列02之 Collection架构
概要首先,我们对Collection进行说明。下面先看看Collection的一些框架类的关系图:Collection是一个接口,它主要的两个分支是:List和Set。List和Set都是接口,它们继承于Collection。List是有序的队列,List中可以有重复的元素;而Set是数学概念中的集合,Set中没有重复元素!List和Set都有它们各自的实现类。为了方...转载 2019-06-03 22:20:58 · 117 阅读 · 0 评论 -
Java 集合系列01之 总体框架
Java集合是java提供的工具包,包含了常用的数据结构:集合、链表、队列、栈、数组、映射等。Java集合工具包位置是java.util.*Java集合主要可以划分为4个部分:List列表、Set集合、Map映射、工具类(Iterator迭代器、Enumeration枚举类、Arrays和Collections)、。Java集合工具包框架图(如下):大致说明:看上面的框架图,先抓住...转载 2019-06-03 22:17:09 · 100 阅读 · 0 评论 -
Java 集合系列18之 Iterator和Enumeration比较
概要这一章,我们对Iterator和Enumeration进行比较学习。内容包括:第1部分 Iterator和Enumeration区别第2部分 Iterator和Enumeration实例转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311275第1部分 Iterator和Enu...转载 2019-06-04 23:09:34 · 116 阅读 · 0 评论 -
Java 集合系列17之 TreeSet详细介绍(源码解析)和使用示例
概要这一章,我们对TreeSet进行学习。我们先对TreeSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeSet。内容包括:第1部分 TreeSet介绍第2部分 TreeSet数据结构第3部分 TreeSet源码解析(基于JDK1.6.0_45)第4部分 TreeSet遍历方式第5部分 TreeSet示例转载请注明出处:http://www.cnblogs.com...转载 2019-06-04 23:08:00 · 150 阅读 · 0 评论 -
Java 集合系列16之 HashSet详细介绍(源码解析)和使用示例
概要这一章,我们对HashSet进行学习。我们先对HashSet有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashSet。内容包括:第1部分 HashSet介绍第2部分 HashSet数据结构第3部分 HashSet源码解析(基于JDK1.6.0_45)第4部分 HashSet遍历方式第5部分 HashSet示例转载请注明出处:http://www.cnblogs.com...转载 2019-06-04 23:05:25 · 120 阅读 · 0 评论 -
Java 集合系列15之 Set架构
前面,我们已经系统的对List和Map进行了学习。接下来,我们开始可以学习Set。相信经过Map的了解之后,学习Set会容易很多。毕竟,Set的实现类都是基于Map来实现的(HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Set架构。(01) Set 是继承于Collection的接口。它是一个不允许有重复元素的集合。(02)...转载 2019-06-04 23:03:16 · 111 阅读 · 0 评论 -
Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
概要学完了Map的全部内容,我们再回头开开Map的框架图。本章内容包括:第1部分 Map概括第2部分 HashMap和Hashtable异同第3部分 HashMap和WeakHashMap异同转载请注明出处:http://www.cnblogs.com/skywang12345/admin/EditPosts.aspx?postid=3311126第1部分 Map概...转载 2019-06-04 23:01:26 · 142 阅读 · 0 评论 -
Java 集合系列13之 WeakHashMap详细介绍(源码解析)和使用示例
概要这一章,我们对WeakHashMap进行学习。我们先对WeakHashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用WeakHashMap。第1部分 WeakHashMap介绍第2部分 WeakHashMap数据结构第3部分 WeakHashMap源码解析(基于JDK1.6.0_45)第4部分 WeakHashMap遍历方式第5部分 WeakHashMap示例转载请...转载 2019-06-04 22:58:41 · 189 阅读 · 0 评论 -
Java 集合系列12之 TreeMap详细介绍(源码解析)和使用示例
概要这一章,我们对TreeMap进行学习。我们先对TreeMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用TreeMap。内容包括:第1部分 TreeMap介绍第2部分 TreeMap数据结构第3部分 TreeMap源码解析(基于JDK1.6.0_45)第4部分 TreeMap遍历方式第5部分 TreeMap示例转载请注明出处:http://www.cnblogs.com...转载 2019-06-04 22:55:43 · 365 阅读 · 0 评论 -
LeetCode —— 20 有效的括号
题目:20、有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出:...原创 2019-07-08 23:40:32 · 157 阅读 · 0 评论 -
Java面试题-算法篇十七
170,堆和栈在内存中的区别是什么?概念:栈(stack)是为执行线程留出的内存空间。当函数被调用的时候,栈顶为局部变量和一些bookkeeping数据预留块。当函数执行完毕,块就没有用了,可能在下次的函数调用的时候再被使用。栈通常用后进先出的方式预留空间;因此最近的保留块通常被最先释放。这么做可以使跟踪堆栈变的简单;从栈中释放块只不过是指针的偏移而已。 ...转载 2019-07-25 23:55:45 · 155 阅读 · 0 评论 -
Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例
概要前面,我们已经学习了ArrayList,并了解了fail-fast机制。这一章我们接着学习List的实现类——LinkedList。和学习ArrayList一样,接下来呢,我们先对LinkedList有个整体认识,然后再学习它的源码;最后再通过实例来学会使用LinkedList。内容包括:第1部分 LinkedList介绍第2部分 LinkedList数据结构第3部分 LinkedLi...转载 2019-06-03 22:32:35 · 100 阅读 · 0 评论 -
Java 集合系列06之 Vector详细介绍(源码解析)和使用示例
概要学完ArrayList和LinkedList之后,我们接着学习Vector。学习方式还是和之前一样,先对Vector有个整体认识,然后再学习它的源码;最后再通过实例来学会使用它。第1部分 Vector介绍第2部分 Vector数据结构第3部分 Vector源码解析(基于JDK1.6.0_45)第4部分 Vector遍历方式第5部分 Vector示例转载请注明出处:http://www....转载 2019-06-03 22:36:10 · 405 阅读 · 0 评论 -
Java 集合系列07之 Stack详细介绍(源码解析)和使用示例
概要学完Vector了之后,接下来我们开始学习Stack。Stack很简单,它继承于Vector。学习方式还是和之前一样,先对Stack有个整体认识,然后再学习它的源码;最后再通过实例来学会使用它。内容包括:第1部分 Stack介绍第2部分 Stack源码解析(基于JDK1.6.0_45)第3部分 Vector示例转载请注明出处:http://www.cnblogs.com/skywang...转载 2019-06-03 22:38:43 · 110 阅读 · 0 评论 -
用java实现七种排序算法。
很多时候,听别人在讨论快速排序,选择排序,冒泡排序等,都觉得很牛逼,心想,卧槽,排序也分那么多种,就觉得别人很牛逼呀,其实不然,当我们自己去了解学习后发现,并没有想象中那么难,今天就一起总结一下各种排序的实现原理并加以实现。 -WH一、文章编写风格总览 选择排序、插入排序、冒泡排序、归并排序、快速排序、希尔排序、堆排序、 ...转载 2018-11-10 12:07:49 · 195 阅读 · 0 评论 -
常见数据结构与算法整理总结(上)
数据结构是以某种形式将数据组织在一起的集合,它不仅存储数据,还支持访问和处理数据的操作。算法是为求解一个问题需要遵循的、被清楚指定的简单指令的集合。下面是自己整理的常用数据结构与算法相关内容,如有错误,欢迎指出。为了便于描述,文中涉及到的代码部分都是用Java语言编写的,其实Java本身对常见的几种数据结构,线性表、栈、队列等都提供了较好的实现,就是我们经常用到的Java集合框架,有需要的...转载 2018-11-07 17:06:26 · 162 阅读 · 0 评论 -
面试中最容易被问到的18个算法题(附答案!)
算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。而根据统计,以下这18个问题是面试中最容易遇到的,本文给出了一些基本答案,供算法方向工程师或对此感兴趣的程序员参考。1)请简单解释算法是什么?算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。2)解释什么是快速排序算法?快速排序算法能够快速排序列表或查...转载 2018-11-05 20:47:43 · 2167 阅读 · 0 评论 -
redis 数据类型详解 以及 redis适用场景场合
1. MySql+Memcached架构的问题 实际MySQL是适合进行海量数据存储的,通过Memcached将热点数据加载到cache,加速访问,很多公司都曾经使用过这样的架构,但随着业务数据量的不断增加,和访问量的持续增长,我们遇到了很多问题: 1.MySQL需要不断进行拆库拆表,Memcached也需不断跟着扩容,扩容和维护工作占据大量开发时间。 2.Memcach...转载 2019-03-12 23:16:42 · 170 阅读 · 0 评论 -
Redis常用数据类型
Redis中文网:http://www.redis.net.cn/Redis中文官网:http://www.redis.cn/Redis最为常用的数据类型主要有以下五种:String Hash List Set Sorted set在具体描述这几种数据类型之前,我们先通过一张图了解下Redis内部内存管理中是如何描述这些不同数据类型的: 首先Redis内...转载 2019-03-12 23:08:00 · 165 阅读 · 0 评论 -
可扩展性设计(二)
1.1 如何扩展数据库前面我们讲到了数据库扩展的一个大致流程,下面我们详细讲解每种扩展方案。1.1.1 X轴扩展—主从复制集群假设我们的service访问数据库的吞吐量在4500TPS,其中写为500TPS,这种典型的读多写少的场景,我们通常会采用读写分离,如图5-1所示,将所有的读请求分发到Slave上,Master只负责写,Master和Slave之间通过数据库自带同步机制复制数据...原创 2019-06-18 23:46:53 · 2482 阅读 · 0 评论 -
冒泡排序
冒泡排序原理:冒泡排序整个过程就像气泡一样往上升,假设从小到大排序,对于给定的n个记录,从第一个记录开始依次对相邻的两个记录进行比较,当前面的记录大于后面的记录时,交换位置,进行一轮比较后,第n位上就是整个记录中最大的数,然后在对前n-1个记录进行第二轮比较,重复该过程直到进行比较的记录只剩下一个为止。冒泡排序无疑是最为出名的排序算法之一,从序列的一端开始往另一端冒泡(你可以从左往右冒泡,也...原创 2019-06-29 11:06:29 · 151 阅读 · 0 评论 -
选择排序
选择排序原理:先将第一个位值上的数跟之后所有位置上的数依次进行比较,如果第一个位置上的数比第二个位置上的数大,则进行互换,然后继续将第一个位置上的数与第三个位置上的数进行比较,经过一轮的比较后,第一个位值上的数就是所有数中最小的一个,接着将第二个位置上的数与之后所有位置上的数进行比较,同样的规则,第二轮比较结束后,第二位放的就是所有数中第二小的数,依次往下比,直到最后一个位置结束。按照这种方法进...原创 2019-06-29 11:23:41 · 171 阅读 · 0 评论 -
插入排序
插入排序原理:给定的一组记录,将其分为两个序列组,一个为有序序列(按照顺序从小到大或者从大到小),一个为无序序列,初始时,将记录中的第一个数当成有序序列组中的一个数据,剩下其他所有数都当做是无序序列组中的数据。然后从无序序列组中的数据中(也就是从记录中的第二个数据开始)依次与有序序列中的记录进行比较,然后插入到有序序列组中合适的位置,直到无序序列组中的最后一个数据插入到有序序列组中为止。我们...原创 2019-06-29 12:00:06 · 105 阅读 · 0 评论 -
Java 集合系列11之 Hashtable详细介绍(源码解析)和使用示例
概要前一章,我们学习了HashMap。这一章,我们对Hashtable进行学习。我们先对Hashtable有个整体认识,然后再学习它的源码,最后再通过实例来学会使用Hashtable。第1部分 Hashtable介绍第2部分 Hashtable数据结构第3部分 Hashtable源码解析(基于JDK1.6.0_45)第4部分 Hashtable遍历方式第5部分 Hashtable示例转载...转载 2019-06-04 22:50:40 · 131 阅读 · 0 评论 -
Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
概要这一章,我们对HashMap进行学习。我们先对HashMap有个整体认识,然后再学习它的源码,最后再通过实例来学会使用HashMap。内容包括:第1部分 HashMap介绍第2部分 HashMap数据结构第3部分 HashMap源码解析(基于JDK1.6.0_45) 第3.1部分 HashMap的“拉链法”相关内容 第3.2部分 HashMap的构造函数 第3.3部分 ...转载 2019-06-03 22:47:42 · 128 阅读 · 0 评论 -
Java 集合系列09之 Map架构
概要前面,我们已经系统的对List进行了学习。接下来,我们先学习Map,然后再学习Set;因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的)。首先,我们看看Map架构。如上图:(01) Map 是映射接口,Map中存储的内容是键值对(key-value)。(02) AbstractMap 是继承于M...转载 2019-06-03 22:43:54 · 118 阅读 · 0 评论 -
Java 集合系列08之 List总结(LinkedList, ArrayList等使用场景和性能分析)
概要前面,我们学完了List的全部内容(ArrayList,LinkedList,Vector,Stack)。Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)Java 集合系列05之 LinkedList详细介绍(源码解析)和使用示例...转载 2019-06-03 22:41:19 · 95 阅读 · 0 评论 -
Java学习 —— 并发编程网
并发编程网:http://ifeve.com/原创 2019-07-26 00:04:00 · 209 阅读 · 0 评论