java相关
魏什么h
这个作者很懒,什么都没留下…
展开
-
ClassLoader类加载器
类加载器:运行java程序时,首先运行JVM,再将java class加载到JVM中运行,负责加载java class的这部分就叫ClassLoader(把二进制文件识别、读取到内存中的功能模块)JDK内置的三大类加载器:BootStrap:启动类加载器(加载object,String等基础类)负责将存放于java_HOME\lib目录下的能被jvm识别的所有类库(例如rt.jar等jav...原创 2019-08-08 12:01:04 · 87 阅读 · 0 评论 -
枚举实现单例模式
已经有了双重判断加锁的单例模式,为什么还要用枚举实现单例模式?枚举的单例模式可以避免反射破坏封装先来观察反射实现的单例:public class ReflectDemo { public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTar...原创 2019-08-29 11:41:42 · 106 阅读 · 0 评论 -
判断链表有没有环以及求环的入口问题
判断链表有没有环:思想:快慢指针法,定义两个变量,都指向链表的头结点,一个变量一次移动两个位置,一个节点一次移动一个位置若一个链表中有环存在,那么这两个变量一定会在环中相遇,这就好比你在操场跑步,跑的快的人一定会在环形跑道中和跑的慢的相遇,只不过是时间问题public class Solution { public boolean hasCycle(ListNode head) {...原创 2019-08-23 10:22:06 · 86 阅读 · 0 评论 -
求链表相交节点问题
判断链表是否相交方法:遍历两个链表,分别保存两个链表的末尾节点,若两节点相等,就认为两节点相交链表交叉,并找出交叉点:方法:当两个链表相交时,当链表1遍历完自己的节点后,让链表1从链表2的头结点开始遍历,(链表2也同时执行同样操作步骤)这样我们可以发现,当这两个链表同时开始遍历,在一定会在第二次经过相交节点时相与,此时遍历链表的两个变量相等,那么证明找到了相交点,返回即可public cl...原创 2019-08-22 17:38:59 · 225 阅读 · 0 评论 -
删除链表的倒数第N个结点
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点给定一个链表: 1->2->3->4->5, 和 n = 2当删除了倒数第二个节点后,链表变为 1->2->3->5class Solution { public ListNode removeNthFromEnd(ListNode head, int n) { ...原创 2019-08-22 15:40:22 · 102 阅读 · 0 评论 -
异常处理
异常处理:首先看一段出现异常的代码:public class ExcDemo { public static void main(String[] args) { int[] arr = new int[3]; System.out.println("------begin-----"); System.out.println(arr[4...原创 2019-08-22 14:52:52 · 81 阅读 · 0 评论 -
Java异常体系
异常在进行编写代码时,有的异常是不能避免的,如读取的文件不存在,或输入的数据格式不匹配都会导致异常的发生,异常机代表一种错误,又代表一种信息,遇到不是代码问题产生的不正常的现象,程序需要将这种异常的情况包装起来,告知用户,由用户来决定如何处理异常的结构所有的异常都是继承Throwable类而来的Error程序无法处理的错误,比如当JVM执行操作时没有需要的内存时,会出现OutofMem...原创 2019-08-22 12:17:29 · 94 阅读 · 0 评论 -
TOPK
LeetCode:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。例如:输入 : [3,2,1,5,6,4] 以及 k = 2输出: 5核心思想:选定基准值,划分大于小于区,使得比基准值大的元素都在大于区,比基准值小的元素都在大于区域,划分完成后返回等于区的第一个元素的下标public int partati...原创 2019-08-22 14:54:06 · 113 阅读 · 0 评论 -
Collection—Set
Collection接口下的另一个子接口Set:不允许数据重复、没有扩充方法(get()是List接口的方法)Set集合的本质:Set集合就是Value值相同的Map集合,先有Map才有Set,底层是哈希表+红黑树Set接口下的子类HashSet:特点:无序存储(存取数据不一致)允许存放nullHashSet 是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能...原创 2019-07-29 17:19:41 · 84 阅读 · 0 评论 -
集合遍历、fail-fast机制
集合类的遍历:1.使用Iterator接口调用Collection集合子类的Iterator方法取得内置的迭代器,使得以下输出格式//取得集合迭代器Iterator<String> iterator = list.iterator();while (iterator.hasNext()){ System.out.println(iterator.next());}...原创 2019-08-06 17:32:26 · 120 阅读 · 0 评论 -
工厂模式—抽象工厂模式
抽象工厂模式:抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。举个例子:比如有AB产品接口,A接口有两个产品实现类,A1,A2;B接口有两个产品实现类,B1,B2,现在有一个工厂接口F,有两个实现这个接口的工厂类,F1,F2,这两个类覆写工厂接口中的方法,分别为实例化A产品的方法和实例化B产品的方法。这是要向得到产品实例,调用工厂1,就...原创 2019-08-02 15:09:04 · 62 阅读 · 0 评论 -
工厂模式—工厂方法模式
工厂方法模式:为了解决简单工厂在工厂类内部修改代码的问题,就提出了将每个生产产品实例的方法封装在不同的工厂类中,这时就增加了一个用于创建实例的接口,工厂接口,不同的工厂类去继承工厂接口,从而去产生产品类的实例化对象。举个例子:现在有A、B两种产品,那么就开两个工厂。工厂A只负责生产A产品,工厂B只负责生产B产品(其实从本质来看还是封装了简单工厂模式的不同分支,这样操作符合开闭原则,当产品类增...原创 2019-08-02 14:43:05 · 75 阅读 · 0 评论 -
工厂模式—简单工厂模式(传统,加反射)
简单工厂模式:核心:一个接口,一个继承接口的集具体类,一个工厂类本质:工厂类的生产产品实例根据创建实例时传入参数的不同,动态的选择应该创建哪一个具体类的实例。interface IFruit{ public void eat();}//产品类class Apple implements IFruit{ @Override public void eat() {...原创 2019-08-02 14:20:45 · 273 阅读 · 0 评论 -
反射
反射:在运行状态中,对于任意一个类都能知道这个类的所有属性和方法,对于任意一个对象,都能够调用任意一个方法和属性。简单来说就是:根据现有对象倒推类的组成反射的作用:反编译过程:使得在运行时就可获得class文件的信息取得Class对象的三种方法:1.使用Object类的getClass():但要用这个类的实例来调用2.类名.calss3.使用Class类提供的forName(Stri...原创 2019-08-02 17:46:08 · 103 阅读 · 0 评论 -
单例模式
懒汉单例(线程不安全的)public class Singleton { private Singleton(){} private static Singleton instance = null; public static Singleton getInstance(){ //在第一次调用实例方法时才进行对象的实例化 if (in...原创 2019-08-08 18:38:29 · 118 阅读 · 0 评论 -
Map—HashMap源码剖析
Map接口是java中保存二元偶对象(键值对)的最顶层接口Map接口下的常用子类HashMap(使用频率最高)、TreeMap、Hashtable、ConcurrentHashMap**Map集合的遍历:**将Map集合转化为Set集合进行遍历使用迭代器进行输出:Iterator Set<Map.Entry<Integer,String>> entrySet =...原创 2019-07-31 10:15:04 · 99 阅读 · 0 评论 -
设计模式——代理模式
代理:为其他对象提供一种代理以控制对这个对象的访问有时委托类不适合或不能直接引用另一个对象时,代理类就在两方之间起到一个桥梁的作用。代理设计模式符合开闭原则 ,在不修改原有类的基础上,增强原有类的功能逻辑。静态代理:代理类和委托类的关系在程序运行前就确定了,代理类和委托类实现同一接口//定义了这个服务具备什么功能interface Buy { void buyMac(); ...原创 2019-08-01 16:36:57 · 127 阅读 · 0 评论 -
牛客:进制转换
进制转换:将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。import java.util.*;import java.math.BigInteger;public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); ...原创 2019-09-06 10:18:50 · 306 阅读 · 0 评论