Java基础
复习基础
maybe宸
在有限的时光里,多做有意义的事。
展开
-
数据结构 之 链表
概念在物理上不连续的、通过节点间的引用形成的数据结构。所以在内存里链表是零散分配的。并不是连续内存空间。链表又细分为单向链表和双向链表,主要区别在于Node节点,单向链表只持有后驱节点的引用;而双向链表持有前驱节点和后驱节点两个引用。链表操作的时间复杂度增由于链表是通过Node节点的前驱和后驱节点引用实现的,当添加一个新的元素,无论添加到第几位。都只需要在被添加位的前驱节点的next指针指向被添加Node,将原来的Node作为被添加Node的next节点即可。无需遍历整个..原创 2020-11-13 16:20:15 · 163 阅读 · 1 评论 -
数据结构 之 数组
概念有限个相同类型变量的有序集合使用一块连续的内存区域,进行顺序存储访问时通过下标进行访问数组的下标是什么即:偏移量offset如果数组的首元素为a,a[0]即偏移量为0的位置。为什么下标从0开始下标为偏移量,所以如果从1开始第一个元素的偏移量为0.依此类推每次都要进行一次-1的减法操作。从0开始减少一次减法操作,性能达到极致。数组操作的时间复杂度增尾部添加,那么只需要在最后一位添加上新的元素即可,所以时间复杂度为O(1)。 头部添加或中间添加...原创 2020-11-13 15:57:58 · 164 阅读 · 0 评论 -
JAVA基础 之 volatile
Volatile-线程共享变量Volatile在汇编代码中添加lock前缀,lock会做两件事:将当前CPU的cache line中的数据写会系统内存。 写回内存的操作会使其他CPU里缓存了该内存地址的数据无效。进一步剖析:CPU为了提高处理速度先将数据载入L1 l2 l3缓存中再进行处理对声明了volatile的变 量进行写操作,JVM就会像CPU发送一条Lock前缀的指令,该指令会将变量的当前cache line数据写回系统内存。这时其他CPU中加...原创 2020-09-08 09:19:36 · 129 阅读 · 0 评论 -
JAVA基础 之 Thread源码浅析
好久没看源码了,上次写完一部分常见的集合类的源码分析之后,今天抽空看了看Thread的源码。今天也来记录分析一下。我们都知道创建线程,有两种方案。一个是继承Thread一个是实现runnable接口。具体的方法就不写了。我们直接从Thread类分析入手。先来看一下构造器这是Thread提供的构造器。我们看到有我们经常用到的一个空构造器,一个带入参为runnable的构造器。 ...原创 2019-06-12 15:21:27 · 239 阅读 · 0 评论 -
Java基础 之 synchronized使用
synchronized关键字给对象加锁。当请求进入该方法时或者代码块时,先检查是否有其他线程占用,如果有则等待其执行完释放锁才能获得锁。修饰对象不同,效果也不同。当修饰的是普通方法或者普通代码块时,只有是使用同一实例时,才能有锁的效果。当是不同实例的时候,锁无效。当修饰的是静态方法或者静态代码块时,无论使用的实例是否相同,都会有加锁的效果。因为类初始化时,静态方法和静态代码块都会...原创 2019-02-09 11:31:15 · 162 阅读 · 2 评论 -
Java基础 之 TreeSet源码分析
既然叫treeSet,那么顾名思义他是set接口的一个实现类。都说Set接口的实现都是具有排序和去重功能的。那么今天从源码分析I一下,TreeSet的去重和排序是如何做到的。我们再开看下这个类的定义和他的构造器。public class TreeSet<E> extends AbstractSet<E> implements NavigableSe...原创 2019-02-06 12:43:01 · 135 阅读 · 0 评论 -
Java基础 之 hashSet源码分析
说道set大家都知道无重复。那么到底是如何做到无重复的呢今天来看下Set接口的一个具体实现,hashSet的源码分析,因为并不难,所以简短说了。hashSetpublic class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Ser...原创 2019-02-03 11:25:55 · 149 阅读 · 0 评论 -
Java基础 之 集合的底层实现
前两天看了一个帖子,里面有一个面试题,正好我最忌也在写有关java基础源码方面的东西。所以来记录一下相关内容。ArrayList具体实现是数组,传送门:Java基础 之 ArrayList和LinkedList LinkedList具体实现是node链表,传送门:Java基础 之 ArrayList和LinkedList hashMap具体实现是hash表,传送门:...原创 2019-02-03 11:11:17 · 172 阅读 · 0 评论 -
Java基础 之 ArrayList和LinkedList
ArrayListArraylist是基于数组实现的 transient Object[] elementData;elementData是ArrayList真正用来保存数据的Object数组。构造器一边我们使用时都是:List<Object> arrayList = new ArrayList<>();默认使用空构造器 publ...原创 2019-02-03 11:03:27 · 166 阅读 · 0 评论 -
Java基础 之 TreeMap源码分析
最开始我直接去看的源码,发现一个问题,虽然我知道红黑树是什么,但是我对红黑树的一些概念甚是模糊。所以再了解源码之前,还是要先了解一下什么是红黑树。红黑树概念红黑树是二叉查找树的一种,再二叉树的基础上加入了color,所以也叫R-B tree。数据结构如图:红黑树的几个基本原则:1,每个节点都有一种颜色,非黑即红。2,根节点必须是黑色。3,每个叶节点或空节点必须...原创 2019-02-03 10:15:34 · 154 阅读 · 0 评论 -
Java基础 之 HashMap源码分析和hashcode及equal的对比
让我们先看一下map接口public interface Map<K,V> { //返回map的大小 int size(); //判断是否为空 boolean isEmpty(); //是否存在key boolean containsKey(Object key); //是否存在value boolea...原创 2019-01-30 00:08:26 · 943 阅读 · 2 评论 -
Java基础 之 运算符
运算符分类算术运算符 +:加法 - :减法 * :乘法 / :除法 %:余数 ++: 自加。这个如果放在左边,先自加1再运算;放右边先运算再自加1。 -- :自减。同上。 赋值运算符比较简单就不多说了,赋个贴图看一下就好了。 ...原创 2019-01-28 23:36:02 · 129 阅读 · 0 评论 -
Java基础 之 垃圾回收
之前我们了解过,当程序初始化一个类或者创建一个类的实例时,会在堆内存中为其分配一块内存。并且在栈内存中创建了一个变量指向了该实例的堆内存地址。但是当我们的变量不在指向该实例时,并且该实例不被任何变量引用时,那么他就会触发垃圾回收机制。 实例在内存中的状态 可达状态 当实例被创建时,有一个及以上的变量引用它,则这个对象处于可达状态。 可恢复状态...原创 2019-01-27 17:50:10 · 141 阅读 · 0 评论 -
Java基础 之 final
final含义 final可以用来修饰类,变量,方法。表示被修饰的内容仅可以赋值一次。内容不可变。 final修饰变量 变量分成员变量和局部变量。上一篇简述了他们的区别和初始化时在内存中的状态。final关键字会关闭java的自动赋值。final修饰变量分多种情况: 修饰静态变量 被final修饰的静态变量由于是在类初始化时就要...原创 2019-01-25 16:09:19 · 202 阅读 · 0 评论 -
Java基础 之 lambda、stream概念及实际使用举例
lambda什么是lambda 函数式编程,将代码块作为参数传入方法,用更简洁的方法创建一个函数式接口的实例。什么是函数式接口 一个有且只含有一个抽象方法的接口(可以有多个默认方法)。举个栗子:@FunctionalInterfacepublic interface Convert { Integer test(Integer aStrin...原创 2018-01-30 23:03:27 · 996 阅读 · 0 评论 -
Java基础 之 变量和内存
内存分为堆内存和栈内存。java的基本类型数据和引用类型的变量都是存放在栈内存中。而变量引用的对象及其成团变量和方法,都是存放在堆内存当中。比如:public class People { public static String typeName = "人"; private int id; public int getId() { return i...原创 2019-01-24 22:11:50 · 374 阅读 · 0 评论 -
Java基础 之 基本数据类型
Java数据类型都是强类型,强类型指1,所有变量必须先声明再使用。2,指定类型的变量只能接受与之匹配的值。 Java10中提供了var关键字,一个弱类型。但是其实这个类型再编译器编译后还是会转换成具体的类型,所以java还是一个强类型的数据类型。只不过为了最新的更新使java变得更智能可以在编译时自动转换成适当的类型。 位(bit)一个二进制数的一个0...原创 2019-01-24 21:15:10 · 154 阅读 · 0 评论 -
Java基础 之 面向对象
面向对象(OOP) 面向对象三大特征:抽象(不算面向对象独有,但也是一个java的特征): 将一个主题中我的业务所关心的那些方面抽象成一个对象。例如:汽车(Car),它有品牌,价格,排量,颜色,座位数几个属性。我只关心它的品牌、排量和颜色。那么我就抽象出来一个对象(车),他有三个属性(品牌、排量、颜色)。封装: 将抽象好的对象(车)进行...原创 2019-01-24 16:38:12 · 129 阅读 · 0 评论 -
Java基础 之 运行机制
最近快过年了,这一年看这看那的,感觉有点杂,需要回归基础沉淀一下。开一个新的系列吧。写点基础东西。也算是自己复习了。 java是什么型语言 java是一门特殊的编程语言,java程序需要先通过编译步骤,将程序编译成与平台无关的字节码文件(.class文件,并不是平台机器码),再通过解释器解释运行。所以java即是编译型语言也是解释性语言。 java...原创 2019-01-24 15:54:34 · 124 阅读 · 1 评论 -
JAVA基础 之 Thread的6种状态
最近太忙,好久没更新了,上次写的是Tread源码分析,这次再补上一个关于线程的几种状态吧。线程状态在Thread的源码中有一个子枚举state。里面定义了6种状态:1,NEW当我们新建一个线程对象时,此时线程是属于这个状态的。2,Runnable有了线程对象,当调用该线程的start()时,线程就从new转变成runnable。表示该线程准备就绪,可以分配CP...原创 2019-08-28 14:51:31 · 529 阅读 · 0 评论