Java基础
Java基础
起个名字都这么男
Stay hungry,Stay foolish!
展开
-
算法实验四-01背包问题
实验名称动态规划(0/1背包)实验目的1.掌握动态规划的基本思想;2.学习写动态规划递推方程;3.编写动态规划算法。实验内容采用动态规划法求解0-1背包问题。实验环境操作系统:Win10;编程语言:Java;开发工具:IDEA;问题描述有n 个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?总体思路根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01原创 2020-12-28 10:48:11 · 839 阅读 · 0 评论 -
Java通过基姆拉尔森公式判断当前日期是不是工作日
基姆拉尔森公式算法如下:基姆拉尔森计算公式W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400+1)%7在公式中d表示日期中的日数,m表示月份数,y表示年数。注意:在公式中有个与其他公式不同的地方:把一月和二月看成是上一年的十三月和十四月,例:如果是2004-1-10则换算成:2003-13-10来代入公式计算。判断当前日期是不是工作日Java实现工作日:周一 —— 周五如果是工作日返回true,不是返回false。 /** * 判断一个日期是不是工作日原创 2020-12-11 10:46:45 · 740 阅读 · 0 评论 -
ReentrantLock-源码解析
公平锁与非公平锁的实现,获取锁与释放锁,ReentrantLock与AQS的关系原创 2020-09-20 10:23:16 · 86 阅读 · 0 评论 -
CopyOnWriteArrayList设计思路与源码分析
CopyOnWrite思想,对集合写的时候复制一份,写到新的集合中,读取的时候是旧数组原创 2020-09-14 17:08:41 · 86 阅读 · 0 评论 -
Thread线程源码解析,Java线程的状态,线程之间的通信
线程的基本概念什么是线程现代操作系统在运行一个程序的时候,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。线代操作系统调度的最小单位是线程。也叫做轻量级进程。在一个进程里可以创建多个线程,这些线程都拥有自己的程序计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉这些线程在同时执行。进程是资源分配的基本单位,线程时系统调用的基本单位。实际上Java本身就是多线程程序,因为执行main方法的时候就是一个main线程,其实平时原创 2020-05-30 16:38:33 · 262 阅读 · 0 评论 -
【Java并发集合】ConcurrentHashMap源码解析基于JDK1.8
concurrentHashMap(基于jdk1.8)类注释所有的操作都市线程安全的,我们在使用时无需进行加锁。多个线程同时进行put、remove等操作时并不会阻塞,可以同时进行,而HashTable在操作时会锁住整个Map。在迭代过程中,即使Map及结构被修改,也不会抛出ConcurrentModificationException 。除了数组+链表+红黑树的基本结构外,新增了转移节点,是为了保证扩容时的线程安全的节点。提供了很多的Stream方法,比如:foreach、search、re原创 2020-05-21 17:06:26 · 231 阅读 · 0 评论 -
【Java集合】HashSet源码解析以及HashSet与HashMap的区别
HashSet前言HashSet是一个不可重复且元素无序的集合。内部使用HashMap实现。我们可以从HashSet源码的类注释中获取到如下信息:底层基于HashMap实现,所以迭代过程中不能保证和增加时的顺序相同。add,remove,contains,size等方法的耗时性能,是不会随着数据量的增加而增加的。在不考虑Hash冲突的情况下时间复杂度都是O(1)。线程不安全的集合,如果在多线程的场景下建议使用 //Collections#synchronizedSetCollections原创 2020-05-15 15:50:09 · 397 阅读 · 0 评论 -
最全的HashMap源码解析!
HashMap源码解析HashMap采用键值对形式的存储结构,每个key对应唯一的value,查询和修改的速度很快,能到到O(1)的平均复杂度。他是非线程安全的,且不能保证元素的存储顺序。他的关系结构图HashMap继承了AbstractMap,而AbstractMap的父类又是Map接口,所以HashMap也间接实现了Map接口,并且实现了Serializable接口,能被序列化,还实现了Cloneable接口可被克隆(浅拷贝)。在Java8中HashMap采用了数组+链表+红黑树的数据结构。数原创 2020-05-10 14:46:11 · 281 阅读 · 0 评论 -
LinkedList源码解析
LinkedList源码解析源码基于java8LinkedList整体结构LinkedList是实现了List接口和Deque接口,他的结构类似于双端链表。实现Cloneable接口表示节点可以被浅拷贝,实现了Serializable接口代表可被序列化。LinkedList是线程不安全的,如果想变成线程安全的可以使用Collections中的synchronizedList方法。我们可以先看一下node的组成结构 private static class Node<E> {原创 2020-05-09 10:18:17 · 154 阅读 · 0 评论 -
ArrayList源码解析--值得深读
ArrayList源码解析基于jdk1.8ArrayList的定义类注释允许put null值,会自动扩容;size isEmpty、get、set、add等方法时间复杂度是O(1);是非线程安全的,多线程情况下推荐使用CopyOnWriteArrayList或者Vector。增强for循环或使用迭代器过程中,如果数组大小被改变会抛出异常。public class ArrayL...原创 2020-05-07 16:52:24 · 148 阅读 · 0 评论 -
深入理解static、volatile关键字
static意思是静态的,全局的。被修饰的东西在一定范围内是共享的,被类的所有实例共享,这时候需要注意并发读写的问题。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内找到他们。所以,static对象可以在他的任何对象创建之前访问,无需引用任何对象。static可以修饰变量、方法和代码块。当static修饰类变量的时候,被修饰的变量叫做静态变量或者类变量;如果该变量的访问...原创 2020-05-06 10:54:45 · 1352 阅读 · 0 评论 -
详细的String源码解析
我们常常把String类型的字符串作为HashMap的key,为什么要这样做呢?因为String是不可变的,一旦初始化就不再改变了,如果被修改将会是一个新对象。 @Test public void testString() { String s = "Java"; logger.info(s); System.out.println(s...原创 2020-05-05 16:36:03 · 500 阅读 · 0 评论 -
java8新特性之stream流
Stream 流是 Java 8 提供给开发者一套新的处理集合的API,他把我们将要处理的集合作为流,就像流水线一样,我们可以对其中的元素进行筛选,过滤,排序等中间操作,只不过这种操作更加简洁高效。Stream的创建:1.可以通过Collection系列的集合提供的stream()或者parallelStream()方法,集合的stream方法创建的是串行流,parallelStream方法...原创 2020-01-22 13:57:22 · 256 阅读 · 0 评论 -
java8新特性之Lambda表达式
一、Lambda 表达式的基础语法java8中引入了一个新的操作符‘->’该操作符称为箭头操作符或lambda操作符,箭头操作符将Lambda表达式拆分成两部分左侧:lambda表达式的参数列表右侧:lambda表达式中所需执行的功能,即Lambda代码块lambda表达式其实就是java的语法糖,最后运行的代码还会转换成平时的格式编译运行。只是写的格式较为简单。//语法格式一对...原创 2020-01-22 13:03:07 · 165 阅读 · 0 评论 -
java环境配置-win10(傻瓜式教程)
java环境配置– 小学弟要开始学java了,由于本人较懒,表达能力有限,所以来这,写一篇简单的指导,帮学弟装下java环境。首先打开浏览器,输入这个网址https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html或者点击下面的链接[https://www.oracle.com/tec...原创 2019-12-21 11:08:59 · 371 阅读 · 0 评论