- 浏览: 265821 次
- 性别:
- 来自: 杭州
博客专栏
-
LeetCode题解
浏览量:53708
最新评论
-
Cwind:
scchenzhipan 写道我必须要赞一下 看来亲踩了一样的 ...
IDEA设置JDK无效问题解决方案 -
scchenzhipan:
我必须要赞一下
IDEA设置JDK无效问题解决方案 -
Cwind:
faradayroger 写道class StringBuff ...
StringBuffer与StringBuilder的线程安全性验证 -
faradayroger:
class StringBufferTaskThread这个类 ...
StringBuffer与StringBuilder的线程安全性验证 -
Cwind:
java-lxm 写道 没看懂补充了一点示例程序和输出结果说明 ...
StringBuffer与StringBuilder的线程安全性验证
文章列表
谈起Java Stream API,我们希望能够弄明白它究竟是什么,能够用来做什么,有什么优势,并能够应用于具体场景。分别简述如下。
不是什么
Java Stream API 不是输入输出流,与java.io包里的InputStream和OutputStream概念完全不同
不是用于解析XML的XMLStream
不是Valve公司的游戏平台
也不是集合元素,不是数据结构不保存数据
是什么
是Java 8 中引入的新特性,是对集合(Collection)对象功能的增强
是关于算法和计算的,更像一个高级版本的迭代器(Iterator)
能够用来做什么
用于对集 ...
IDEA设置JDK无效问题解决方案
- 博客分类:
- Tools
IDEA中所有jdk类库方法找不到,调用代码报红,设置jdk也无效的问题解决方案
今天敲代码的时候电脑意外蓝屏(没错,系统是Windows10),重新启动IDEA的时候代码里面一片红,提示JDK找不到。而事实上JDK已经被正确配置并导入,更换了多个版本,代码无数次地重新导入,一切如故——IDEA一直提示JDK未设置。
项目设置如下图,一切看起来都完全ok。
设置之后问题依旧:
问题排查思路:
对于国内面试中经常问“StringBuffer和StringBuilder有何区别”,知乎上曾有一番讨论。
我以为,好的面试官可以在这个问题上直接进一步,“你不知道这两个的区别没关系,我可以告诉你,我们聊聊短生命周期对象管理和线程安全性吧。”所以取而代之的这样的一个问题就更有意义了:请写一个程序来验证StringBuffer和StringBuilder的线程安全性。
线程安全性是指,当对一个复杂对象进行某种操作时,从操作开始到操作结束之前,该对象会经历若干中间状态,直到操作完全结束,该对象才会会到完全可用的状态。如果其他线程能够访问处于不可用中间状态的对象,使该对象产生无法预料的结 ...
通常,使用Java开发并发程序时,我们创建Runnable对象,然后创建对应的线程Thead对象来执行它们。Java 5之后,Java并发API提供了Executor框架,主要包括Executor接口,它的子接口ExecutorService,以及实现上述两个接口的ThreadPoolExecutor类 ...
相对于HashMap,ConcurrentHashMap提供了内部实现的并发支持。使得开发者在多线程应用中访问ConcurrentHashMap时,不必使用synchronized同步代码块。
//Initialize ConcurrentHashMap instance
ConcurrentHashMap<String, Integer> m = new ConcurrentHashMap<String, Integer>();
//Print all values stored in ConcurrentHashMap instance
for ...
原题链接:#122 Best Time to Buy and Sell Stock II
要求:
假定你有一个包含n个元素的整型数组,其中的第i个元素是指定股票在第i天的价格。
设计一个算法来计算在这n天里可能获得的最大利润。注:只考虑单只该股票的买入和卖出时机,一天内可以买卖多次,但不允许同一时间内存在多次交易(即:再次买入之前,必须买入该股票)
难度:中等
分析:
贪心算法:在对问题求解时,总是做出在当前看来最好的选择。即:不从整体上最优加以考虑,只求局部最优解。
对于此题情境,获得可能的最大利润的手段为:买入后的次日,只要股价上涨就卖出。同时如果后一天股价 ...
原题链接:#148 Sort List
要求:
给一个单向链表排序,要求时间复杂度为O(nlogn)且空间复杂度为O(1)。
单向链表定义如下:
class ListNode{
int val;
ListNode next;
ListNode(int x){
this.val = x;
}
}
难度:中等
分析:
若没有时间复杂度及空间复杂度的限制,解法将会很多。譬如先遍历一遍链表,将其所有元素放在一个数组内,以任一种排序算法排序后重新生成单向链表,比如最简单的冒泡。这种思路并非不可取,毕竟出于解决问题 ...
事实上“轻量级”与“重量级”并没有确切的定义。轻重量级之分应当考虑如下几个方面:
加载的资源
Spring相对于EJB是轻量级的,但这就好像说大象比鲸轻。
如果你想要运行一个Java EE应用程序,你不能够简单地创建一个应用并直接运行它本身。需要一个JavaEE服务器来运行应用,例如Glassfish,WebLogic或WebSphere。多数应用服务器都是非常巨大并且复杂的,并不容易安装和配置。
EJB应用启动时要消耗大量的资源,内存、CPU等,把所有的服务都加载进来;Spring则是可定制服务,需要什么加载什么。
侵入性(或曰框架依赖性,耦合性)
重量级框架( ...
原题链接:#242 Valid Anagram
要求:
给定两个字符串s和t,写一个函数,判断t是否是s的变位词。
如果t跟s包含相同字符但排列顺序不同,则称t是s的变位词。
例如:
s = "anagram", t ="nagaram",返回true
s = "rat", t = "car",返回false
注意:可以假定字符串只包含小写字母。
难度:容易
分析:
解这个问题有两种思路,由于题目限定字符串中只包含小写字母,那么分别计算两个字符串中每个字母出现次数,然后再比较即 ...
原题链接:#5 Longest Palindromic SubString
要求:
给定一个字符串S,找出它的最长回文子串。假定S的最大长度为1000,且最长回文子串唯一
难度:中等
分析:
假定字符串s为回文字符串,则在s头部和尾部分别添加相同字符串[x],所得结果s'=[x]s[x]也为回文字符串(论述1)。可使用动态规划方法解决此问题,递推公式便基于此特性。
创建一个布尔二维数组plain,plain[i][j]为true表示原字符串从索引i到索引j这一段子串为回文。而plain[i][j]为true的前提是s.charAt(i)与s.charAt(j)相同 ...
原题链接:#198 House Robber
要求:
原题是要为某盗贼设计一个能使其利益最大化的方案(这个场景并不和谐,在保持题意的情况下重新描述一个场景)。假设某糖果工厂有若干糖果机,每台糖果机每天产出不同数量的糖果,每天取糖果时不能同时取相邻两台糖果机的糖果(别问为什么),问每天能取得的最大糖果数量是多少。
糖果机产生的糖果数量集合可以看成一个整型数组。
难度:简单
分析:
考虑使用动态规划来解决此问题。当糖果机只有1台时,取走这台产出的所有糖果;当糖果机有两台时,取走产出较多的糖果。当糖果机有三台时,有两种取法,取走第二台的产出的糖果,或取出第一台与第 ...
原题链接:#217 Contains Duplicate
要求:
给定一个整型数组,判断它是否包含重复元素。当任一元素函数应当返回true,当所有元素各不相同时返回false。
难度:简单
分析:
与#1 Two Sum类似,可以两次循环遍历,依次判断每一个元素是否在其后出现;或者使用一个HashSet作为辅助结构,遍历数组,若某元素不在HashSet中则将其加入Set,若在Set中已存在则直接返回true。
解决方案:
Java - 460ms
public boolean containsDuplicate(int[] nums) {
...
原题链接:#1 Two Sum
要求:
给定一个整数数组,找出其中的两个数,使之相加能够得到目标数字。
函数twoSum应当返回这两个数的索引,index1应小于index2。请注意,这两个索引并非从零开始计数。
假定每个输入都有且只有一个解。
例:
输入:numbers{2, 7, 11, 15}, target=9
输出:index1=1, index2=2
难度:中等
分析:
对于这个问题,很直白的一个解是如方案1的一个双重循环。由于有且只有一个解,只要遍历时发现两个元素相加为目标值,便跳出循环并将这两个元素的索引返回即可。此方案最坏情况下的 ...
原题链接:#3 Longest Substring Without Repeating Characters
要求:
给定一个字符串,找到它没有重复字符的最长子串的长度。例如,"abcabcbb"的无重复字符最长子串为"abc",其长度为3。对于由相同字符组成的字符串"bbbbb",其最长子串为"b",故返回长度为1。
难度:中等
分析:
遍历给定字符串,对于每一个字符c,若c不在临时字符串temp(初始化为空字符串)中,则将其加入temp;若temp包含c,则计算当前temp的长度并将 ...
原题链接:#2 Add Two Numbers
要求:
给定两个以链表表示的非负整数,链表中的每个节点保存整数中的一位,以倒序排列(例如,321表示为1->2->3)。把这两个数字相加,作为一个链表返回。
输入:(2->4->3) + (5->6->4)
输出:7->0->8
难度:中等
分析:
本题思路比较直接,以两个指针分别遍历两个链表。值得注意的是需要进位的情况的处理。当两个指针指向的节点的值相加大于10时,设置进位标记,结果节点的值设为其和除以10取余。当一个链表遍历完成,则关注另一个链表剩余部分的进 ...