java
萧逸才
这个作者很懒,什么都没留下…
展开
-
java Map(HashMap)的5种遍历方式解析
package com.websocket;import java.util.HashMap;import java.util.Iterator;import java.util.Map;/** * Created by xyc on 2017/4/9 0009. */public class MapDemo { public static void main(String[] a原创 2017-04-09 18:11:19 · 382 阅读 · 0 评论 -
红黑树-旋转
此篇博客我们讨论红黑树的旋转(左旋和右旋),为了更好的理解旋转,我们只关注红黑树中关于二叉查找树部分的规则,而不关注红黑树中关于本身红黑树定义部分的规则。二叉查找树规则 规则一:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;规则二:若右子树不空,则右子树上所有结点的值均大于它的根结点的值;规则三:左、右子树也分别为二叉查找树;左旋 现有红黑树结构如下:...原创 2018-05-02 21:07:37 · 558 阅读 · 1 评论 -
红黑树-起步
定义说到红黑树(R-B Tree),首先要知道它是一颗二叉查找树(二叉查找树(Binary Search Tree),又称二叉排序树(Binary Sort Tree),亦称二叉搜索树,下文统称为二叉查找树),其次才作为一颗红黑树。所以它不仅要满足二叉查找树的规则,而且要满足红黑树的规则。如下: - 二叉查找树 - 规则一:若左子树不空,则左子树上所有结点的值均小于它的根结点的值;...原创 2018-05-04 10:20:21 · 204 阅读 · 0 评论 -
红黑树-插入
前言本篇博客我们说一说如何从无到有创建一颗红黑树,并在创建红黑树的过程中理解其构造原理。红黑树规则首先我们复习一下红黑树的五项规则,如下: - 规则一:每个节点或者是黑色,或者是红色; - 规则二:根节点是黑色; - 规则三:每个叶子节点(NIL/NULL)是黑色; - 规则四:如果一个节点是红色的,则它的子节点必须是黑色的; - 规则五:从一个节点到该节点的子孙节点的所有路...原创 2018-05-05 16:12:57 · 4586 阅读 · 1 评论 -
Gson工具类
maven依赖 <!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --> <dependency> <groupId>com.google.code.gson</groupId> ...原创 2018-08-23 16:53:47 · 1213 阅读 · 0 评论 -
动态代理的注意点(一)
估计很多人都使用过动态代理,特别是处理事务时,动态代理是一个很好的解决方案,但是其中有一些注意点我们还是需要了解一下;举例伪代码如下:UserService { void a(){ this.b(); } void b(){ }}OrderService { UserService userService;...原创 2018-09-05 17:52:42 · 312 阅读 · 0 评论 -
ClassLoader的getResource和getResources
package org.eve.framework.nuwatest.resource;import java.io.IOException;import java.net.URL;import java.util.Enumeration;public class ResourceTest { public static void main(String[] args)...原创 2018-09-06 14:54:46 · 1971 阅读 · 0 评论 -
如何获取Class的根路径
package org.eve.framework.nuwatest.resource;/** * @author xiayc * @date 2018/9/6 */public class ClassRootPath { public static void main(String[] args) { //获取ClassRootPath类的根路径 ...原创 2018-09-06 15:10:58 · 678 阅读 · 0 评论 -
字符串连接工具类
JoinTypepackage org.eve.framework.string.join;/** * 连接类型 * * @author xiayc * @date 2018/9/7 */public enum JoinType { /** * 连接符:_ * aaa_bbb_ccc */ STR_STR;}Strin...原创 2018-09-07 15:07:36 · 665 阅读 · 0 评论 -
关于Map.getOrDefault方法的一个小坑
场景对于某些情况下,我们不希望Map返回的值为null,所以理所当然的想到了getOrDefault方法,我之前的想法是getOrDefault方法会在get到的结果为null时返回默认值,然而却不是。代码Map<String, Integer> map = new HashMap<>();map.put("a", null);map.put("b", 2);...原创 2018-12-20 19:18:45 · 7406 阅读 · 5 评论 -
记一次Hive平台清洗数据
场景(简化)现有文章表Article和评论表Comment;一篇文章可以有多个评论;文章表Article主要字段(articleId);评论表Comment主要字段(commentId,articleId,content,createTime,lastChangeTime);问题描述发现很多文章下出现了评论内容一样的评论,所以需要对文章的评论进行数据清洗,即同一文章下相同内容的点评只保...原创 2019-01-03 16:10:01 · 4426 阅读 · 0 评论 -
从项目迁移看项目分层
最近在进行.net项目的转java工作,尽管本身是个.net小白,但得益于这两个语言的相似性,在语法上并没有碰到什么大的困难,有时候有问题也有一些同事可以请教,最大的问题反而是非语言层面的,例如其中的一点:项目分层! 其实我一向认为一个运行中的项目,不管它的代码多么差,但是只要它能正常稳定的完成预期的工作,那它就是一段好代码,我们也轻易不要去优化它。可是现在我们需要转项目,到了不得不动它的...原创 2019-04-08 15:41:37 · 180 阅读 · 0 评论 -
在java中如何正确的判断字符串是否为"空"
其实对于字符串判空来说不是什么有难度的操作,甚至是低难度的,只是对于’\u0000’这个字符有的人可能还是比较陌生,而它就是这篇博客的重点!我们先看一下’\u0000’打印出来的效果是什么样的吧,如下:打印代码public static void main(String[] args) { System.out.println("----\u0000----");}打...原创 2019-08-11 13:52:44 · 1270 阅读 · 0 评论 -
java中的单例模式为什么需要懒加载?
想必很多朋友在java中都使用过单例模式,在网上搜索的时候也都查到过各种单例模式的实现,比如我之前写的一篇博客:单例模式的7种实现方式及分析(https://blog.csdn.net/xyc_csdn/article/details/78165948),在这些博客中基本都会提到一个词,就是“懒加载”,但是也没有具体解释,让人感到头大。但是当你细想的时候你就会发现有些不对劲,因为JVM加载一个类...原创 2019-09-11 23:07:21 · 1006 阅读 · 0 评论 -
使用synchronized的注意点(补充)
在这篇博客https://blog.csdn.net/xyc_csdn/article/details/78159259中我提到了一些使用synchronized时的注意点,但是还是比较浅薄,特别通过最近的面试,认识到以前的总结还是有些不足,所以在这里再次完善一下。先看代码abstract class AbstractSynchronized { protected...原创 2018-04-12 21:00:50 · 1286 阅读 · 0 评论 -
java之list循环优化(一)
将for (int i = 0; i < list.size(); i++)改为int j = list.size(); for (int i = 0; i < j; i++),当数据量很大时list.size()消耗的额外性能也是可观的。public class ListDemo { public static void main(String[] args) { Lis原创 2017-04-08 11:01:48 · 3590 阅读 · 2 评论 -
使用synchronized的注意点
在http://blog.csdn.net/xyc_csdn/article/details/78155932这篇博客中详细讲了一下synchronized关键字的使用方法。在这里补充几个使用synchronized时需要注意的点。先看代码ObjectLock.javapackage com.xiayc.sync;public class ObjectLock ...原创 2017-10-04 20:22:53 · 449 阅读 · 0 评论 -
Java 8之Stream的简单应用
尽管java 8已经出现很久了,但很可惜最近才真正的使用它,特别是其提供的新特性Stream,真的特别强大,也很方便。在网上看了一些资料,发现都讲的特别多,特别泛,很官方。所以就想写一篇十分简单易懂的应用场景。操作对象首先提供一个测试用的操作对象CodeItempublic class CodeItem { private String code; private String n原创 2016-09-01 23:10:55 · 413 阅读 · 0 评论 -
Java中的队列(Queue)简单使用
什么是队列 队列是一种先进先出(First In First Out,FIFO)的数据结构,如果你将两个元素加入队列,先加入的元素将在后加入的元素之前出队。 更新队列时,使用术语“入队”和“出队”,但也可能遇到术语“压入”和“弹出”。压入大致相当于入队,而弹出大致相当于出队。代码 Queue<Integer> queue = new LinkedList<>(); queu原创 2017-04-15 17:01:27 · 18315 阅读 · 2 评论 -
算法之广度优先搜索
查找最短路径 广度优先搜索可回答两类问题: 第一类问题:从节点A出发,有前往节点B的路径吗? 第二类问题:从节点A出发,前往节点B的哪条路径最短?数据结构队列:队列是一种先进先出(First In First Out,FIFO)的数据结构,如果你将两个元素加入队列,先加入的元素将在后加入的元素之前出队。图:图(有向图)由节点和边组成。一个节点可能与众多节点直接相连,这些节点被称原创 2017-04-15 18:28:28 · 302 阅读 · 0 评论 -
new ArrayList、subList和Arrays.asList浅析
在Java中List是我们很常用的数据结构,对此我们有必要简单了解一下创建List的三种方式并对它们进行一些简单的测试。new ArrayListList<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);list.add(4);list.add(5);System.out.println("--原创 2017-04-16 12:48:48 · 1394 阅读 · 0 评论 -
java中的值传递和引用传递
因为在工作中踩过这方面的坑,所以整理了一下这方面的知识。 首先需要注意的是java中是没有指针的,这是和C语言一个很大的不同;其次java中只存在值传递!!!,包括对象(数组,类,接口)等传递的也是引用的地址值,所以还是按值传递。/** * Created by xyc on 2017/4/30 0030. */public class TestObjectChange { p原创 2017-04-30 17:48:38 · 292 阅读 · 0 评论 -
List循环添加对象的推荐方式
先看两段代码代码AList<User> userList = new ArrayList<>();User user = null;for (int i = 0; i < 10; i++) { user = new User("username_" + i, "password_" + i); userList.add(user);}userList.forEach(ui原创 2017-05-17 21:45:10 · 12910 阅读 · 4 评论 -
Intellij IDEA自动生成serialVersionUID配置
完整操作流程:Setting->Editor->Inspections->Java->Serialization issues->Serializable class without ‘serialVersionUID’(选择勾上) 配置完成后,如果你的Class实现了Serializable接口,那么将光标停留在类名上,然后按Alt+Enter就会提示自动创建serialVersionUID了。原创 2017-06-05 11:34:49 · 16365 阅读 · 1 评论 -
关于Java的String字符串常量的长度问题
虽然这种问题应该很难遇到,但是遇到了也会感到莫名其妙。不知道大家有没有遇到那种在java代码里用字符串写sql语句的情况,但是如果sql语句字符串的长度太长的话就会报错。代码如下:代码AString str = "567890123456789...0123456789";//由于字符串长度太长,所以省略一部分,长度是65535System.out.println(str.length());原创 2017-05-20 16:56:18 · 35077 阅读 · 2 评论 -
浅谈CountDownLatch的用法
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。 CountDownLatch是在java1.5被引入的,跟它一起被引入的并发工具类还有CyclicBarrier、Semaphore、ConcurrentHashMap和BlockingQueue,它们都存在于java.util.concurrent包下。CountDownLat原创 2017-09-16 11:06:29 · 558 阅读 · 0 评论 -
synchronized锁的重入问题
我们知道通过synchronized关键字修饰的方法或代码块在同一时刻只能被一个线程访问,还有一种就是锁的重入问题,就是一个线程可以访问多个被synchronized修饰的方法或代码块,代码如下:代码package com.xiayc.sync;public class ReentrantSynchronized { public class Super{ public sy原创 2017-10-05 14:32:01 · 531 阅读 · 0 评论 -
java多线程之volatile
在了解之前我们需要先了解一下Java内存模型(区别与JVM的内存模型)。Java内存模型 Java 内存模型来屏蔽掉各种硬件和操作系统的内存差异,达到跨平台的内存访问效果。JLS(Java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model) Java内存模型规定了所有的变量都存储在主内存中,此处的主内存仅仅是虚拟机内存的一部分,而虚拟机内存也仅仅是计算机物理内存的原创 2017-10-05 15:16:32 · 284 阅读 · 0 评论 -
多线程Object之wait、notify
代码package com.xiayc.waitnotify;import java.util.ArrayList;import java.util.List;/** * 1、wait、notify和notifyAll方法是Object类提供的,换句话说Java中所有的对象都有这三个方法; * 2、wait、notify和notifyAll方法要配合synchronized关键字同步操作才有意原创 2017-10-06 16:17:38 · 270 阅读 · 0 评论 -
Java多线程之synchronized
一、什么是synchronized synchronized是java提供的关键字,被synchronized修饰的代码在同一时刻只能被一个线程访问。用于解决java代码中多个线程的共享存储空间的访问冲突问题,有效避免了同一个数据对象被多个线程同时访问。二、synchronized的使用方式使用synchronized关键字修饰在成员方法/静态方法前,如:public synchronize原创 2017-10-03 19:39:55 · 327 阅读 · 0 评论 -
使用枚举来实现单例模式
单例模式的实现方式有很多种,详情可以参考单例模式的7种实现方式及分析,从线程安全以及懒加载等角度来看其中第6种(double check)和第7种(静态内部类)的实现方式都是值得推荐并且应用广泛的,但是它们(包括第1到第7种)都有一个痛点,就是无法阻止通过反射或者序列化来破解单例对象的唯一性反射破解下列代码以double check方式实现的单例模式为示例,详情如下:代码publi...原创 2019-09-17 00:38:07 · 793 阅读 · 0 评论