我正在考虑创建一个类(如String、StringBuffer等)。这可以在单线程和多线程环境中使用。我不知道开发人员可能正在使用哪种环境。预见到最坏的情况,我可以同步。但是,1.同步会影响性能。2.没有同步就不是线程安全的。所以,我有两个选择。保持类不同步-但使用此类的开发人员需要在适当的时候同步它。拥有所有同步方法-并降低性能。我已经看到Java中的许多(如果不是全部,例如ArrayListoverVector)类已经进化为采用第一种方法。在为我的类(class)决定这两个选项之前,我需要考虑哪些事项?或者换一种说法,只有当我肯定知道bar可以用于多线程环境,不应同时运行?编辑所以
嗯,在我有限的Java经验中,我从来没有真正使用过断言,并且想知道为什么我在很多网站和很多书上都阅读了处理断言的相同警告,即不应使用断言语句用于公共(public)方法中的参数检查?我想知道这是否与assert语句相对于Java中其他语句的执行顺序有关。 最佳答案 断言的目的是检查您的程序逻辑——断言失败是“停止一切——有错误!”适应症。特别是,断言失败表示“这里有错误”,但是“这里”是代码内部的某个地方,失败的原因只能真正确定通过检查您的代码(您的API用户不能也不应该这样做)。当您通过API获得错误数据时,您想表明“嘿!你给了我
如果我想检查是否存在某些先决条件以便运行Java程序,什么是最好的?做:System.exit(1);或者在main中抛出一个RuntimeException结束主线程?(还没有其他线程在运行) 最佳答案 理想情况下,您可以优雅地终止线程。System.exit(1)也可以工作,但是如果您的线程收到信号表明它们需要停止正在做的事情并通过完成正在做的事情来终止(即执行它们的方法直到结束)。这显然取决于您的设计。抛出RuntimeException似乎太不优雅了,可能会导致您做出您实际上不想要的行为。
当我们需要关闭输出流时,我们有两种选择。closeQuietly表示关闭流,不会抛出任何异常。try{close(out)}catch(IOExceptione){}关闭try{close(out)}catch(IOExceptione){throwanException;}众所周知,输出流在关闭时会在文件末尾写入一个/几个字符,如果这些写入错误,文件也无法正确打开,例如ZipoutputStream。如果我使用第一个,我将面临关闭失败的风险。如果我使用第二个,它会让我的代码变得不友好。有人可以给我一些建议吗?很抱歉,问题描述不清楚。我的意思是如何安全地进行IO操作。如果资源的发布失败
我有一个代码,它以一个二分图作为输入并返回一个带有键“1”的映射,其值为“set1中的节点”列表和键“2”,其值为“set2中的节点”列表”。现在,map是可变的。理论上我应该使用防御副本来返回map。但是,在这种情况下真的需要吗?这似乎有点矫枉过正。例如:classBiPartite{Graphgraph;MapbipartiteBipartite(graph){this.graph=graph;}voidcalcBipartite(){//calculatemap}MapgetMap(){//shouldimakedefensivecopy?Appearsoverkill.}}
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion我发现有一个使用散列的Set的实现(具有所有有用的结果,例如contains()等的O(1)等)声称在各个方面都比java.util.HashSet更高效:http://ontopia.wordpress.com/2009/09/23/a-faster-and-more-compact-set/http://alias-i.com/lingpipe/docs/api/com/aliasi/
我需要在数据结构中存储2到1500万个帐户(这是一个长度为15的String),用于查找目的和检查唯一性。最初我计划将它们存储在HashSet中,但我怀疑查找速度会因为哈希冲突而变慢,最终会比TreeMap(使用二分查找)慢。不需要对数据进行排序。我正在使用Java7。我有64G系统,其中48G专用于此应用程序。这个问题不是HashSetandTreeSetperformancetest的重复问题因为这个问题是关于将元素添加到Set的性能,而这个问题是关于检查现有Set的性能重复值。 最佳答案 如果您有48GB的专用内存来存储200
从设计的角度来看,我想知道我是否应该测试数据,特别是如果它是一个众所周知的数据(不是很容易配置的东西)——这可以应用于流行的文件扩展名、特殊IP地址等假设我们有一个紧急电话号码分类器:publicclassContactClassifier{publicfinalstaticStringEMERGENCY_PHONE_NUMBER="911";publicbooleanisEmergencyNumber(Stringnumber){returnnumber.equals(EMERGENCY_PHONE_NUMBER);}}我应该这样测试吗(“911”重复):@Testpublictes
在Swing应用程序中,可以从任何线程调用System.exit()吗?(例如在美国东部时间?) 最佳答案 如果可以的话,您不应该调用System.exit()。退出java进程最好的方法就是让所有线程正常退出。这将终止VM。在您的主JFrame中,您应该setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。然后可以调用frame.dispose()关闭JFrame并退出EDT。 关于java-在Swing应用程序中应该从哪个线程调用System.
Checkstyle提示以下内容:return(null==a?a:newA());并说parent是不必要的。虽然声明在没有它们的情况下肯定能正常工作,但在有它们的情况下似乎更具可读性——否则当我阅读它时,我倾向于看到:returnnull先要停下来再考虑剩下的==a?a:newA();部分,因为我的大脑已经走了一条路。此外,每当我看到三元运算符时,我倾向于做同样的事情,除非它被分组在括号中。那么:围绕三元组的括号应该是事实上的标准吗?有什么理由不把它们放在那里吗? 最佳答案 嗯,checkstyle是对的,括号对执行没用。但是对