- 博客(25)
- 收藏
- 关注
原创 数据结构之HashMap
package newdata.datastruct.binarytree;import java.util.ArrayDeque;import java.util.Objects;import java.util.Queue;public class HtqHashMap<K,V> { private static class Entry<K,V>{ int hash; boolean color; K key;
2020-07-15 23:46:09 198
原创 数据结构之TreeMap
package datastruct.binarytree;import java.util.Comparator;public class HtqTreeMap<K,V> { private static class Node<K,V>{ boolean color; K key; V value; Node<K,V> parent; Node<K,V> left
2020-07-14 23:57:40 263
原创 数据结构之二叉平衡搜索树(RBT)
package datastruct.binarytree;import java.util.Comparator;import java.util.Objects;public class RBTree<E> { private static class Node<E>{ boolean color; E item; Node<E> parent; Node<E> left;
2020-07-14 18:06:05 191
原创 数据结构之二叉平衡搜索树(AVL)
package datastruct.binarytree;import java.util.Comparator;import java.util.Objects;public class AVLTree<E> { private static class Node<E>{ E item; Node<E> parent; Node<E> left; Node<E>
2020-07-14 18:05:10 163
原创 数据结构之二叉搜索树
package datastruct.binarytree;import java.util.ArrayDeque;import java.util.Comparator;import java.util.Queue;import java.util.Stack;public class BinarySearchTree<E> { private static class Node<E>{ E item; Node<E>
2020-07-14 00:21:18 155
原创 数据结构之双端循环队列(ArrayDeque)
动态循环数组为了提高效率,ArrayDeque采用了循环数组的设计,也就是说虽然基础容器是一个普通的数组(默认容量16),但是在逻辑上,这个数组没有固定的开头或结尾,既可以直接向尾部添加数据,也可以直接向头部之前添加数据,不需要大面积地移动数据。所以ArrayDeque与之前写的ArrayList优化(CircleArrayList)类似CircleArrayList支持指定索引添加删除元素CircleArrayList对数组容量没有要求ArrayDeque的数组容量必须是2^n 每次扩容2倍
2020-07-13 17:52:48 371
原创 模运算解决方案
在源码里经常遇到需要取模的需求,但是模运算又十分消耗性能降低效率,源码都用巧妙的其他运算代替。加减法(index+head>=elementData.length)?(index+head-elementData.length): (index+head<0)?index+head+elementData.length:index+head位运算(head - 1) & (elements.length - 1)...
2020-07-13 16:52:29 149
原创 数据结构之栈原理(Vector)
栈接口public E push(E item);public synchronized E pop();public synchronized E peek();public boolean empty();public synchronized int search(Object o);底层实现是Vectorpublic class Stack extends Vector {…}采用是继承的方式,也就是说Stack也可以使用Vector其他方法。Vector分析构造方法创
2020-07-13 15:06:29 641
原创 help GC 犯的错
LinkedListJDK源码private E unlinkFirst(Node<E> f) { // assert f == first && f != null; final E element = f.item; final Node<E> next = f.next; f.item = null; f.next = null; // help GC first
2020-07-13 10:25:38 324
原创 数据结构之两个栈实现队列
package datastruct.linearlist;import java.util.Stack;public class HtqTwoStackQueue<E> { private Stack<E> enStack = new Stack<>(); private Stack<E> deStack = new Stack<>(); public int size(){ return en
2020-07-13 01:04:18 123
原创 数据结构之两个队列实现栈
package datastruct.linearlist;import java.util.ArrayDeque;import java.util.Queue;public class HtqTwoQueueStack<E> { private Queue<E> queue1 = new ArrayDeque<>(); private Queue<E> queue2 = new ArrayDeque<>();
2020-07-13 01:02:49 120
原创 数据结构之双向循环链表
package datastruct.linearlist;import java.lang.reflect.Array;import java.util.Objects;/** * 不用单向循环链表 * 不仅要在最后维护first和last * 还要注意linkBefore和unLink中的非空判断 */public class HtqCircleLinkedList<E> { private static class Node<E>{
2020-07-13 00:59:19 225
原创 数据结构之双向链表
package newdata.datastruct.linearlist;import java.lang.reflect.Array;import java.util.Objects;public class HtqLinkedList<E> { private static class Node<E>{ E item; Node<E> pre; Node<E> next;
2020-07-13 00:43:11 128
原创 数据结构之单向循环链表
package datastruct.linearlist;import java.lang.reflect.Array;import java.util.Objects;/** * 添加删除后维护尾头节点 * 不能用while null作为判断条件 */public class HtqSinglyCircleLinkedList<E> { private static class Node<E>{ E item; Node
2020-07-13 00:29:17 318
原创 动态循环数组(ArrayList优化)
测试结果分析动态数组有一个最大的弊端就是浪费内存空间,这个无法避免。还有一个弊端就是添加删除都需要移动数组元素,最坏情况下要从头移动到尾,也就是n次,致使时间复杂度为O(n) 。下面这个例子就解决了这个问题,通过判断索引位置,移动元素少的一端,可以至少节约一半的时间。这个对外使用是无感的,只是内部逻辑实现不同而已。初始化10,添加8个元素:CircleArrayList{size=8, head=0, elementData=[1, 2, 3, 4, 5, 6, 7, 8]}NewRealAr
2020-07-10 16:05:06 433 2
原创 数据结构之动态数组(ArrayList)
数据结构概述数据结构是计算机存储、组织数据的方式线性结构线性表数组链表栈队列树形结构二叉树AVL树红黑树B树堆Trie哈夫曼树并茶集图形结构邻接矩阵邻接表数组具有 n 个相同类型元素的有限序列( n ≥ 0 )一维数组数组定义默认初始化 / 动态初始化int[] arr = new int[1016];int arr[] = new int[1016];arr[0] = 1;arr[1] = 0;arr[2] = 1;arr[3] =
2020-06-29 16:27:23 493
原创 高效实现斐波那契数列(Fibonacci数列)
Fibonacci数列Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, …,在Fibonacci数列中的数我们称为Fibonacci数。给你一 个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数。常规方法首先看到题目,第一想法就是递归实现,简单方便,易于理解。public int fn(int n) { return n<=0?0:(n==1?1:fn(n-1)+
2020-06-23 12:40:30 711
原创 数据结构之单向链表
单向链表的定义public class Node{ int value; Node next; public Node(int value) { this.value = value; }}单向链表遍历public void list(Node head) { while (head!=null){ System.out.print(head.value+" "); head = head.next; } Sy
2020-06-20 17:26:13 175
原创 设计模式之软件设计七大原则
一、开闭原则(Open Closed Principle,OCP)一个软件实体如类,模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节提高软件系统的可复用性及可维护性下面是一个简单的Course实体:public interface ICourse { Integer getId(); String getName(); Double getPrice();}public class javaCoure implements ICourse {
2020-06-12 12:22:59 201
原创 Nginx反向代理与负载均衡
一、Nginx安装Nginx 是一款高性能的 http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。由俄罗斯的程序设计师伊戈尔·西索夫(Igor Sysoev)所开发,官方测试 nginx 能够支支撑 5 万并发链接,并且 cpu、内存等资源消耗却非常低,运行非常稳定。环境准备gcc编译器套件(C、C++、Fortran、Pascal、Objective -C、Java、Ada、Go)[root@oahzero]# yum install gcc-c++pcrePCRE
2020-06-03 11:16:26 272
原创 消息中间件之ActiveMQ
一、消息中间件MOM基本功能将信息以消息的形式,从一个应用程序传送到另一个或多个应用程序。MOM主要特点:避免传统的直接调用的方式,实现服务间完全解耦,同时也实现了服务间的异步调用。消息异步接受,类似手机短信的行为,消息发送者不需要等待消息接受者的响应,减少软 件多系统集成的耦合度;消息可靠接收,确保消息在中间件可靠保存,只有接收方收到后才删除消息,多个消息也 可以组成原子事务消息中间件的主要应用场景:在多个系统间进行整合和通讯的时候,通常会要求:可靠传输,数据不能丢失,有的时候,也
2020-06-03 00:36:54 308
原创 redis配置与使用
中文文档:http://www.redis.cn/一、redis安装[root@oahzero]# wget http://download.redis.io/releases/redis-4.0.8.tar.gz[root@oahzero]# tar xzvf redis-4.0.8.tar.gz[root@oahzero]# cd redis-4.0.8[root@oahzero]# make[root@oahzero]# cd src[root@oahzero]# make instal
2020-06-02 17:16:10 615
原创 Slf4j日志框架的使用及Logback、Log4j2的整合和性能对比
一、Slf4jslf4j(Simple Logging Facade for Java)是日志框架的一种抽象,那么也就是说 slf4j 是不能单独使用的必须要有其他实现日志框架来配合使用,并且如果要启用slf4j框架要导入slf4j-api-xxx.jar 这个包, 这个包是slf4j 实现各种支持的日志框架的包。如 log4j、log4j2、logback等。编码模式import org.slf4j.Logger;import org.slf4j.LoggerFactory;......pr
2020-06-02 14:46:33 1810
原创 Linux安装Maven、POM及配置文件详解
下载Maven下载地址 https://maven.apache.org/download.cgi下载maven安装包[root@oahzero]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz安装Maven[root@oahzero]# tar zvxf apache-maven-3.6.3-bin.tar.gzMave
2020-06-02 12:10:21 3395
原创 局域网环境搭建Jenkins
局域网环境搭建Jenkins一、准备安装包二、安装Jenkins三、修改配置文件四、Jenkins初始化五、Jenkins系统管理全局工具配置Maven 配置JDKMaven系统配置Maven项目配置Publish over SSHManaged files新建任务新建Install任务ss新建发布任务新建自动任务一、准备安装包因为服务器不能连接外网,所以不能使用yum下载安装二、安装Jenkins安装三、修改配置文件配置大于编码四、Jenkins初始化首次访问五、Jenkins系统管理
2020-06-01 00:25:27 1962
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人