Java知识点&刷刷算法
文章平均质量分 53
wangshuang1631
雄关漫道真如铁,而今迈步从头越
展开
-
迪杰斯特拉算法Java实现
public class Dijkstra { static int MAX=10000; public static void main(String[] args) { //邻接矩阵 int[][] weight = { {0,3,2000,7,MAX}, {3,0,4,2,MAX原创 2016-09-23 13:45:07 · 4464 阅读 · 0 评论 -
HashMap源码解读
HashMap是基于哈希表的Map接口实现,以key-value的形式保存数据。在HashMap中,系统会根据hash算法来计算key-value的存储位置。使用时,我们可以通过key值快速的存取value值。下面就一起来看一下HashMap的源码: 一、类定义public class HashMap<K,V> extends AbstractMap<K,V> implements原创 2016-10-20 10:14:27 · 1887 阅读 · 0 评论 -
ArrayList源码解读
一、 ArrayList概述: ArrayList是基于数组实现的,是一个动态数组,所谓动态,就是它的容量会自动增加,ArrayList的初始容量是10。ArrayList不是线程安全的,ArrayList实现了Serializable接口,支持序列化。 二、 ArrayList的实现: 1、私有属性private static final int DEFAULT_CAPACITY = 10;原创 2016-10-25 20:09:00 · 3037 阅读 · 0 评论 -
LinkedList源码解读
一、LinkedList概述: LinkedList与ArrayList一样,是实现了List接口。由于LinkedList是基于链表实现的,所以它执行插入和删除操作时比ArrayList更高效,而随机访问的性能要比ArrayList低。 二、LinkedList的实现: 1、构造方法//构造一个空的LinkedListpublic LinkedList() {}//接收一个Collec原创 2016-10-27 20:49:49 · 1768 阅读 · 0 评论 -
HashSet源码解读
HashSet实现Set接口,是由一个哈希表(实际上是一个HashMap实例)支持。HashSet不保证集合的迭代顺序,也不保证元素顺序随时间保持恒定。HashSet允许null元素。一、类定义public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable Hash原创 2016-11-15 14:38:25 · 1512 阅读 · 0 评论 -
ConcurrentHashMap源码解读
ConcurrentHashMap 结构分析ConcurrentHashMap 类中包含两个静态内部类 HashEntry 和 Segment。HashEntry 用来封装映射表的键 / 值对;Segment 用来充当锁的角色,每个 Segment 对象守护整个散列映射表的若干个桶。每个桶是由若干个 HashEntry 对象链接起来的链表。一个ConcurrentHashMap 实例中包含由若干个原创 2017-01-10 11:05:37 · 617 阅读 · 0 评论 -
关键字synchronized和volatile比较
1.关键字volatile是线程同步的轻量级实现,所以volatile性能肯定比synchronized要好,并且volatile只能修饰变量,而synchronized可以修饰方法和代码块。目前在开发中使用synchronized关键字的比率还是比较大的。 2.多线程访问volatile不会发生阻塞,而synchronized会出现阻塞。 3.volatile能保证数据的可见性,但是不能保证原原创 2016-12-14 17:09:08 · 1085 阅读 · 0 评论 -
方法join(long)与方法sleep(long)的区别
1.wait()方法与notify()方法wait()方法执行后,锁会被释放,而notify()方法执行后,不释放锁。2.方法join(long)与方法sleep(long)的区别方法join(long)的功能是在内部使用wait(long)方法实现的,由于wait(long)方法释放锁,所以join(long)释放锁。public final synchronized void join(long原创 2016-12-15 11:46:49 · 1282 阅读 · 0 评论 -
Java中StackOverflowError与OutOfMemoryError详解
使用Java开发,经常回遇到内存异常的情况,而StackOverflowError和OutOfMemoryError便是最常遇见的错误。 首先,看看这两种错误的解释: **如果当前线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常。 如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异常。** 这里把异常分为两种情况,原创 2016-12-20 15:31:57 · 2919 阅读 · 0 评论 -
最大连续子序列和----动态规划
public static int maxSub1(List<Integer> list){ int ThisSum,MaxSum,j; ThisSum = MaxSum =0; for(j = 0;j < list.size();j++) { ThisSum += list.get(j);原创 2016-12-20 18:08:06 · 1538 阅读 · 0 评论 -
裴波那契数列的递归实现与非递归实现
斐波那契数列是数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1] )以兔子繁殖为例子而引入,也称为“兔子数列”。指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)由于递归在计算过程中非常慢,所以本文提供了裴波那契原创 2016-08-12 10:22:47 · 6141 阅读 · 0 评论 -
求N以内素数个数--粗暴方式及筛选法
素数,是除了1和它本身之外不再被其他的除数整除。使用程序求N以内素数个数问题,在各种语言的基础教程中都会讲到。一般而言,求取素数可以使用粗暴的从2开始遍历到自己,每次拿自己整除这些遍历的数,若可以整除,则不是素数并跳出循环。若遍历到自己都不能被整除,则是素数。这种方法虽然简单,但是效率十分低下。有兴趣的可以测试一下程序,当N》=100000时,程序便会非常的慢了。另外一种比较高效的原创 2016-08-12 11:58:33 · 3269 阅读 · 0 评论 -
最小堆解决Top K问题
问题描述:有一组数据n个,要求取出这组数据中最大的K个值。 对于这个问题,解法有很多中。比如排序及部分排序,不过效率最高的要数最小堆,它的时间复杂度为O(nlogk)。 解题思路:取出数组的前n个元素,创建长度为n的最小堆。从n开始循环数组的剩余元素,如果元素(a)比最小堆的根节点大,将a设置成最小堆的根节点,并让堆保持最小堆的特性。循环完成后,最小堆中的所有元素就是需要找的最大的n个元素原创 2016-11-18 17:11:51 · 5973 阅读 · 1 评论 -
Java实现求一个整数的二进制数中1的个数
这题还是笔试的时候遇到的,当时没有想太多,直接用了最为直接的移位相加的方法,虽然可以得出结果,但是程序效率低。后来发现使用n=n&(n-1)的方法,效率会更高,先上代码。public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(Sys原创 2016-10-13 20:04:16 · 5269 阅读 · 2 评论 -
Java循环链表实现约瑟夫环
问题描述:约瑟夫环运作如下:1、一群人围在一起坐成[2] 环状(如:N)2、从某个编号开始报数(如:K)3、数到某个数(如:M)的时候,此人出列,下一个人重新报数4、一直循环,直到所有人出列[3] ,约瑟夫环结束使用循环链表实现约瑟夫环是一种解法,但是效率不高。public class yuesefu { static class Node {原创 2016-10-11 21:42:07 · 5905 阅读 · 2 评论 -
JavaScript中的坑---parseInt("08")和返回0
做了一个实验: alert(parseInt(“01”)),当这个里面的值为01—07时都是正常的,但是在”08”,”09”就会返回0这种现象出现在ie内核的浏览器中,如360浏览器就会出现这种错误,谷歌,火狐不受影响。查阅资料得知着这种现象原因,解释如下:01–07自然没有问题,但是09,08都是不合格的八进制形式,所以被按照0处理了。为了解决这个问题,可以利用parseInt函数的另一个参数,原创 2017-04-05 17:47:04 · 2451 阅读 · 0 评论