Java基础
文章平均质量分 57
Java基础知识的学习分享
初学者↑
精于基础,广于实现
展开
-
详解Java8的Optional类到底是怎样去避免空指针异常的
大家都说Optional类可以有效地避免空指针异常,到底是怎么避免的,今天我们好好来讲讲原创 2021-12-13 14:37:44 · 1127 阅读 · 0 评论 -
共变数组和类型擦除
共变数组和类型擦除数组的共变性,也称为协变性数组的共变性(covariant)是指:如果类Base是类Sub的基类,那么Base[]就是Sub[]的基类数组的共变性可能会导致一些错误,比如下面的代码:public static void main(String[] args) { Object[] array = new String[10]; array[0] = 10;}它是可以编译通过的,因为数组是共变的,Object[]类型的引用可以指向一个String[]类型的对象但是运行的时原创 2021-11-23 09:06:26 · 350 阅读 · 0 评论 -
volatile关键字实现原理
将当前处理器缓存行的数据写回到系统内存这个写回内存的操作会使在其他CPU里缓存了该内存地址的数据无效。为了提高处理速度,处理器不直接和内存进行通信,而是先将系统内存的数据读到内部缓存(L1,L2或其他)后再进行操作,但操作完不知道何时会写到内存。如果对声明了volatile的 变量进行写操作,JVM就会向处理器发送一条Lock前缀的指令,将这个变量所在缓存行的数据 写回到系统内存。但是,就算写回到内存,如果其他处理器缓存的值还是旧的,再执行计算操 作就会有问题。所以,在多处理器下,为了保证.原创 2021-08-18 14:38:24 · 209 阅读 · 0 评论 -
List集合根据指定字段去除重复值
主要通过反射获取指定对象属性,然后利用set集合,对指定属性的值进行比较,结果相等则代表重复原创 2020-06-05 16:03:46 · 12236 阅读 · 1 评论 -
Java字符串、集合等工具类合集
自己造了一些轮子,由于水平有限,如有错误或缺陷(必定会有的),欢迎大家提出。项目地址:全球同性交友网站这里贴上部分工具类代码,完整代码可以点击上面的链接获取字符串工具类 StringUtil:1. MD5加密2. 创建指定长度的随机字符串3. 字符串和ASCII码互转4. 字符串判空...package com.dengweiping.String;import java.io.UnsupportedEncodingException;import java.security.M原创 2020-06-02 11:20:44 · 417 阅读 · 0 评论 -
如何快速理解Java的IO流
初学者觉得IO流复杂是很正常的,归根结底是没有理解JavaIO框架的设计思想:可以沿着这条路想一想:1,学IO流之前,我们写的程序,都是在内存里自己跟自己玩。比如,你声明个变量,创建个数组,创建个集合,模拟一个链表,使用一些常用API,现在回想一下,是不是在只是自己在内存里玩一玩?计算机组成包括运算器,控制器,存储器,输入设备,输出设备。那么你前面的工作,仅仅够你的程序和内存以及CPU打交道,如果你需要操作外部设备呢?比如键盘,显示器,再比如,最常见的外设:硬盘?2,所以程序设计语言必须要提供程序与外部转载 2020-05-28 08:44:51 · 406 阅读 · 1 评论 -
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “wke”,所...原创 2019-04-25 13:49:32 · 20689 阅读 · 1 评论 -
个人博客系统开发记录
1.用户登录、注册目前使用bootstrapt模态框简单实现。(1)个人信息栏默认不加载;(2)登录时会根据用户名、密码,经过md5加密算法处理后去数据库验证,成功则将用户信息保存到cookie中,并加载个人信息栏;(3)注册时会先判断输入的用户名是否存在,如存在则提示“该用户名已存在,请重新输入”,注册成功则将用户信息保存到cookie中,并加载个人信息栏2.动态发布(1)在发布动...原创 2019-05-27 13:45:38 · 16596 阅读 · 12 评论 -
如何将数字金额转成中文人民币大写
直接上干货,复制即用原创 2019-03-13 11:04:15 · 1583 阅读 · 0 评论 -
ConcurrentHashMap原理分析(JDK1.7与1.8)
前言前面写过介绍HashMap的文章(https://blog.csdn.net/qq_27574367/article/details/88526194 ),文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果ha...转载 2019-03-13 10:58:54 · 302 阅读 · 0 评论 -
HashTable原理和底层实现
1. 概述上次讨论了HashMap的结构,原理和实现,本文来对Map家族的另外一个常用集合HashTable进行介绍。HashTable和HashMap两种集合非常相似,经常被各种面试官问到两者的区别。对于两者的区别,主要有以下几点:HashMap是非同步的,没有对读写等操作进行锁保护,所以是线程不安全的,在多线程场景下会出现数据不一致的问题。而HashTable是同步的,所有的读写等操作都...原创 2019-03-13 10:46:32 · 17252 阅读 · 1 评论 -
LinkedHashSet 和 LinkedHashMap源码剖析
总体介绍LinkedHashSet和LinkedHashMap在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说LinkedHashSet里面有一个LinkedHashMap(适配器模式)。因此本文将重点分析LinkedHashMap。LinkedHashMap实现了Map接口,即允许放入key为null的元素,也允许插入value为null的元素。从名字上可以看出该容器是li...转载 2019-03-13 10:43:22 · 191 阅读 · 0 评论 -
HashSet and HashMap源码剖析
总体介绍之所以把HashSet和HashMap放在一起讲解,是因为二者在Java里有着相同的实现,前者仅仅是对后者做了一层包装,也就是说HashSet里面有一个HashMap(适配器模式)。因此本文将重点分析HashMap。HashMap实现了Map接口,允许放入null元素,除该类未实现同步外,其余跟Hashtable大致相同,跟TreeMap不同,该容器不保证元素顺序,根据需要该容器可能会...转载 2019-03-13 10:00:57 · 253 阅读 · 0 评论 -
LinkedList源码剖析
总体介绍LinkedList同时实现了List接口和Deque接口,也就是说它既可以看作一个顺序容器,又可以看作一个队列(Queue),同时又可以看作一个栈(Stack)。这样看来,LinkedList简直就是个全能冠军。当你需要使用栈或者队列时,可以考虑使用LinkedList,一方面是因为Java官方已经声明不建议使用Stack类,更遗憾的是,Java里根本没有一个叫做Queue的类(它是个...转载 2019-03-13 09:58:28 · 165 阅读 · 0 评论 -
java中创建线程的两种方法及比较
1.继承Thread类,重写run()方法2.实现Runnable接口,实现run()方法原创 2017-11-20 11:53:46 · 209 阅读 · 0 评论 -
集合框架之List集合详解
List集合及其子类详细介绍并进行比较原创 2017-12-06 14:53:05 · 446 阅读 · 0 评论 -
集合框架之Set集合详解
无序,不重复(比较的是值,不是地址)一旦对象丢进Set集合,集合里多个对象之间没有明显的顺序。Set集合与Collection基本完全一样,没有提供任何额外的方法。Set集合不允许包含相同的元素,如果试图把两个相同元素加入到同一个Set集合中,则添加失败,add方法返回false,且新元素不会被加入。Set判断两个对象相同不是使用==运算符,而是根据equals方法。也就是说,如果只要两个对象用eq原创 2017-12-06 15:16:36 · 597 阅读 · 0 评论 -
集合框架之Map集合详解
一次添加一对元素,Map集合中存储的是键值对,Map集合中必须保证键的唯一性。常用方法: 1. 添加 value put(key,value);返回前一个和key关联的值,如果没有返回null;2. 删除 void clear();清空Map集合; value remove(key);根据指定的key删除这个键值对3. 判断 boolean containsKey(key原创 2017-12-15 20:17:35 · 451 阅读 · 0 评论 -
java集合框架详解
集合的特点: 一个数组中只能存储同一数据类型,一个集合中可以存储不同数据类型的数据,集合用于存储多个对象。 数组是固定长度,集合是可变长度。 集合中不可以存储基本数据类型值,数组可以。集合框架体系图: Collection集合:具有的方法: boolean add(E e):添加元素 boolean addAll(Collection e);添加多个(集合) boolean remov原创 2017-12-06 14:35:56 · 440 阅读 · 0 评论 -
从为什么String=String谈到StringBuilder和StringBuffer
有这么一段代码: public class TestMain { public static void main(String[] args) { String str0 = "123"; String str1 = "123"; System.out.println(str0 == str1); }}运行结果是什么?转载 2017-12-18 10:43:04 · 217 阅读 · 0 评论 -
java基本数据类型及包装类详解
基本数据类型 整型byte:byte数据类型是1字节,8位、有符号的,以二进制补码表示的整数; 最小值是-128(-2^7); 最大值是127(2^7-1); 默认值是0; byte类型用在大型数组中节约空间,byte变量占用的空间只有int类型的四分之一;short:short数据类型是2字节、16位、有符号的以二进制补码表示的整数 最小值是-32768(-2^15)...原创 2018-03-21 08:53:27 · 264 阅读 · 0 评论 -
Java BigDecimal详解
1.引言 float和double类型的主要设计目标是为了科学计算和工程计算。他们执行二进制浮点运算,这是为了在广域数值范围上提供较为精确的快速近似计算而精心设计的。然而,它们没有提供完全精确的结果,所以不应该被用于要求精确结果的场合。但是,商业计算往往要求结果精确,这时候BigDecimal就派上大用场啦。先看下面代码 public static void main(String[] a...转载 2019-03-14 09:49:47 · 422 阅读 · 0 评论 -
Java字符串处理函数汇总
public String concat(String str) //该方法的参数为一个String类对象,作用是将参数中的字符串str连接到原来字符串的后面.public int length() //返回字串的长度,这里的长度指的是字符串中Unicode字符的数目.public char charAt(int index)//该方法在一个特定的位置索引一个字符串,以得到字符串中指定...原创 2019-03-14 09:51:19 · 6477 阅读 · 1 评论 -
LeetCode:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标
题目:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]解法1:cl...原创 2019-03-20 16:10:13 · 1145 阅读 · 0 评论 -
ArrayList源码剖析
总体介绍ArrayList实现了List接口,是顺序容器,即元素存放的数据与放进去的顺序相同,允许放入null元素,底层通过数组实现。除该类未实现同步外,其余跟Vector大致相同。每个ArrayList都有一个容量(capacity),表示底层数组的实际大小,容器内存储元素的个数不能多于当前容量。当向容器中添加元素时,如果容量不足,容器会自动增大底层数组的大小。前面已经提过,Java泛型只是编...转载 2019-03-13 09:54:09 · 177 阅读 · 0 评论 -
浅谈this关键字的三种常用用法
1.区分成员变量与局部变量2.通过this调用构造方法3.在方法中需要引用该方法所属类的当前对象时,直接用this原创 2017-11-20 10:11:05 · 3658 阅读 · 1 评论