
java基础
我会jvav啊
此人很懒,已经转行摸鱼了
展开
-
HashMap解决冲突的四种方法
1. 开放地址法(1)线性探测再散列放入元素,如果发生冲突,就往后找没有元素的位置;(2)平方探测再散列如果发生冲突,放到(冲突+1平方)的位置,如果还发生冲突,就放到(冲突-1平方)的位置;如果还有人就放到(冲突+2平方)的位置,以此类推,要是负数就倒序数。优点记录更容易进行序列化操作如果记录总数可以预知,可以创建完美的哈希函数,尽量避免hash冲突,提高效率;缺点扩容成本太高;使用探测序列,造成额外计算时间;删除的时候需要设置删除标记,造成额外的空间和操作;2. 拉链法原创 2021-04-19 22:55:33 · 2831 阅读 · 2 评论 -
java中Runnable和Callable的区别
Runnable需要实现run()方法,Callable需要实现call()方法。我们都知道要自定义一个Thread有两种方法,一是继承Thread,而是实现Runnable接口,这是因为Thread本身就是一个Runnable的实现。Runnable是不返还值的,而Callable可以返回值。Runnable的run()方法定义没有抛出任何异常,所以任何的Checked Exception都需要在run()实现方法中自行处理。Callable的Call()方法抛出了throws Exceptio.原创 2021-04-19 22:50:21 · 436 阅读 · 0 评论 -
线程通信的几种方式
(1)等待通知机制两个线程通过对同一对象调用等待 wait() 和通知 notify() 方法来进行通讯。join() 方法(2)volatile 共享内存volatile 修饰修饰变量实现线程之间的可见性。(3)CountDownLatch 并发工具(4)CyclicBarrier 并发工具(5)线程响应中断(6)线程池 awaitTermination() 方法(7)管道通信详细参考...原创 2021-04-19 22:45:56 · 383 阅读 · 0 评论 -
valotile关键字
什么是valotile关键字?valotile是java中的关键字,用来修饰会被多个线程访问和修改的变量valotile关键字的作用1. 可见性如果不加valotile修饰的话每个线程会拷贝一份主存中的变量,某一个线程修改了其他线程是不知道的。而用valotile修饰的话多个线程访问同一个变量时,其中某一个线程修改了变量的值时其他线程都可以立刻看到修改后的值。**原理:**被valotile修饰的变量在被修改后会强制的修改到主存中,而其他线程访问自己的内存中的该变量时会发现其用valotile修原创 2021-04-17 22:06:02 · 1731 阅读 · 0 评论 -
Java反射是什么,为什么要用反射
什么是反射?反射就是程序运行时可以通过类的全限定名称动态的加载类,创建对象,并且可以调用类中的属性和方法。反射也只有在运行时才知道要操作的是什么类为什么要用反射?在写代码的时候如果我们使用了未定义的类,编译器会报错,用反射可以避免这个情况反射可以让代码更通用性和灵活性,易于扩展比如一段代码不用反射其实也可以一样实现,但是你想再扩展的话必须要修改代码违背了开闭原则——对扩展开方,对修改关闭,用反射可以解决改问题...原创 2021-04-17 21:08:43 · 463 阅读 · 0 评论 -
浅谈CAS机制
最近找实习在背八股文,了解到了在jdk1.6以前ConcurrentHashMap是用segment分段锁实现的线程安全,而在jdk1.8之后使用CAS和synchronized来实现线程安全的,那么究竟什么是CAS机制。synchronized关键字和CAS机制synchronized关键字实现线程安全会有大量的线程阻塞和重新调用,代价比较高,性能比较低。所以面对这种情况我们就可以使用Java原子类操作。所谓java原子类就是Atomic操作类如AtomicInteger,AtomicBoolen等原创 2021-04-16 21:27:27 · 199 阅读 · 0 评论 -
面试常问:什么是红黑树?
什么是红黑树? ———————————— 二叉查找树(BST)具备什么特性呢? 1.左子树上所有结点的值均小于或等于它的根结点的值。 2.右子树上所有结点的值均大于或等于它的根结点的值。 3.左、右子树也分别为二叉排序树。 下图中这棵树,就是一颗典型的二叉查找树: 1.查看根节点9: 2.由于10 > 9,因此查看右孩子13: 3.由于10 < 13,因此查看左孩子11: 4.由于10 < 11,因此转载 2021-04-13 12:00:33 · 186 阅读 · 0 评论 -
Java中BigInteger的用法
BigInteger abs() 返回大整数的绝对值BigInteger add(BigInteger val) 返回两个大整数的和BigInteger and(BigInteger val) 返回两个大整数的按位与的结果BigInteger andNot(BigInteger val) 返回两个大整数与非的结果BigInteger divide(BigInteger val) 返回两个大整数的商double doubleValue() 返回大整数的double类型的值float fl原创 2021-03-31 14:05:27 · 483 阅读 · 0 评论 -
Java 面试题之“Arraylist和Linkedlist的区别”
ArrayList和LinkedList是两个集合类,用于存储一系列的对象引用(references)。例如我们可以用ArrayList来存储一系列的String或者Integer。那么ArrayList和LinkedList在性能上有什么差别呢?什么时候应该用ArrayList什么时候又该用LinkedList呢?Arraylist:底层是基于动态数组,根据下表随机访问数组元素的效率高,向数组尾部添加元素的效率高;但是,删除数组中的数据以及向数组中间添加数据效率低,因为需要移动数组。例如最坏的情况是删原创 2021-03-17 22:57:50 · 364 阅读 · 6 评论 -
Java 遍历Map集合的几种方法
方法一:通过Map.keySet,遍历key和valueMap<String, Object> map = new HashMap<>();for (String key : map.keySet()) { System.out.println("key=" + key + ", value=" + map.get(key));}方法二:通过Map.values(),遍历所有的value,但不能遍历keyMap<String, Object> map原创 2021-03-17 22:42:09 · 160 阅读 · 0 评论 -
Java中二维数组的创建和约束性排序
二维数组的创建定义时分配长度int[][] arr = new int[3][5];定义不规则二维数组int[][] arr = new int[5][];定义不规则的2维数组同时赋初始值int[][] arr = new int[][]{{1,3},{2,6,7},{8},{15,18}};//二维数组的约束性排序(根据某一列的值排序) Arrays.sort(intervals, (a, b) -> a[0]-b[0]);//升序a[0]-b[0]降序b[0]-a[0]..原创 2021-01-21 15:46:19 · 170 阅读 · 0 评论 -
Java将一个List中的值赋值给另一个List
刷leetcode中的一道dfs题时,添加结果集时如果不新创建list所有添加的list都是同一个,并且回溯得到时候会删掉所有元素。Java中 "="的作用有两个:1.赋值2.指向地址 当对基本数据类型进行赋值时 "="的作用就是单纯的赋值,例如:int i=1,int j=2;而当对引用数据类型进行赋值时"="的作用就是将被赋值对象的地址指向赋值对象的地址,例如:List A =new ArrayList<>(); List B =new ArrayList<>();原创 2021-01-14 18:20:34 · 6838 阅读 · 2 评论