java.util.HashMap和HashSet的内部实现

我一直在尝试理解java.util.HashMap和java.util.HashSet的内部实现。 以下是我脑海中浮现的疑惑: 什么是HashMap / HashSet中@Override public int hashcode()的重要性? 这个哈希码在内部使用在哪里? 我一般看到HashMap的键是一个像myMap这样的myMap 。 我可以将值映射到someObject (而不是String),如myMap吗? 我需要遵守的所有合同成功实现了什么? 提前致谢 ! 编辑: 我们是说密钥的哈希码(check!)是在哈希表中映射值的实际内容吗? 当我们做myMap.get(someKey); java在内部调用someKey.hashCode()来获取哈希表中要查找结果值的数字? 答:是的。 编辑2: 在java.util.HashSet ,从哪里为Hash表生成密钥? 它来自我们正在添加的对象,例如。 mySet.add(myObject); 那么myObject.hashCode()将决定它在哈希表中的位置? (因为我们不在HashSet中给出键)。 答:添加的对象成为关键。 价值是假的!

javax.net.ssl.SSLHandshakeException:收到致命警报:handshake_failure

我在尝试了两天的许多选项之后发布了这个问题。 以下是我尝试过的选项。 禁用ssl证书validation 通过从浏览器下载crt并转换为.jks并导入密钥库。 我仍然得到这个问题,提前非常感谢任何帮助。 javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure at sun.security.ssl.Alerts.getSSLException(Alerts.java:192) at sun.security.ssl.Alerts.getSSLException(Alerts.java:154) at sun.security.ssl.SSLSocketImpl.recvAlert(SSLSocketImpl.java:1943) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1059) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1294) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1321) at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1305) at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:523) at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185) at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296) at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) at com.honeywell.sensibo.api.NewMain.main(NewMain.java:73)

检查双重平等是否安全?

我有以下代码: double x = 0; { …do stuff …} if(x == 0){ } 我总是被告知你不应该检查花车的平等性。 检查它是否等于零任何不同?

将包含命令行参数的字符串拆分为Java中的String

与C#的这个线程类似,我需要将包含命令行参数的字符串拆分到我的程序中,这样我就可以让用户轻松运行多个命令。 例如,我可能有以下字符串: -p /path -d “here’s my description” –verbose other args 鉴于上述情况,Java通常会将以下内容传递给main: Array[0] = -p Array[1] = /path Array[2] = -d Array[3] = here’s my description Array[4] = –verbose Array[5] = other Array[6] = args 我不需要担心任何shell扩展,但它必须足够聪明,以处理单引号和双引号以及字符串中可能存在的任何转义。 有没有人知道在这些条件下shell会解析字符串的方法? 注意 :我不需要进行命令行解析,我已经使用joptsimple来做到这一点。 相反,我想让我的程序易于编写脚本。 例如,我希望用户能够在一个文件中放置一组命令,每个命令在命令行上都是有效的。 例如,他们可能会在文件中键入以下内容: –addUser admin –password Admin –roles administrator,editor,reviewer,auditor –addUser editor –password Editor –roles editor –addUser […]

Maven:编译包含Java 1.6源的aspectj项目

主要问题 我想做的事情相当容易。 或者你会想。 但是,没有任何工作正常。 要求:使用maven,使用AspectJ编译器编译Java 1.6项目。 注意:我们的代码无法使用javac进行编译。 也就是说,如果未编入方面,则编译失败(因为我们有方面可以软化exception)。 2011年 2月21日更新:有两个同样可行的解决方案(两种情况都使用aspectj-maven-plugin与maven-compiler-plugin结合 ): 将false到编译器插件中(感谢Pascal Thivent ) 将process-sources到aspectj编译器插件中(感谢Andrew Swan ) 有关这些解决方案的更多信息,请参阅答案部分。 我认为解决方案#2是更好的方法。 相关问题 问题(基于以下失败的尝试): 如何让maven运行aspectj:直接编译目标,而不运行compile:compile? 你怎么忽略编译的失败:编译? 你如何指定一个指向你自己的ajc编译器的自定义compilerId(即make compile:compile使用除了plexus之外的aspectj编译器)?* 感谢您的任何建议。 这些是我尝试过的导致我的问题/问题的事情: 尝试1(失败):指定aspectJ作为maven-compiler-plugin的编译器: org.apache.maven.plugins maven-compiler-plugin 2.2 1.6 1.6 aspectj org.codehaus.plexus plexus-compiler-aspectj 1.8 这失败并出现错误: org.codehaus.plexus.compiler.CompilerException: The source version was not recognized: 1.6 无论我使用的是什么版本的plexus编译器(1.8,1.6,1.3等),这都行不通。 我实际上阅读了源代码,发现这个编译器不喜欢Java 1.5以上的源代码。 尝试2(失败):使用附加到编译和测试编译目标的aspectJ-maven-plugin: org.codehaus.mojo aspectj-maven-plugin 1.3 1.6 1.6 […]

XML命名空间如何工作

上面的示例显示了具有多个名称空间的XML文件的示例。 这些命名空间的目的是什么,最重要的是,即使没有Internet连接,它们也可以工作? 我认为以xsi:schemaLocation开头的第二位包含用于validationXML文档结构的XML模式文件。 如果我在不在网络上的计算机上运行使用此配置文件的应用程序,为什么这些仍然有效? URL是否以某种方式别名为JAR文件?

如何在hadoop hdfs中列出目录及其子目录中的所有文件

我在hdfs中有一个文件夹,它有两个子文件夹,每个子文件夹有大约30个子文件夹,最后每个子文件夹包含xml文件。 我想列出所有xml文件,只给出主文件夹的路径。 在本地我可以使用apache commons-io的 FileUtils.listFiles()来做到这一点。 我试过这个 FileStatus[] status = fs.listStatus( new Path( args[ 0 ] ) ); 但它只列出了两个第一个子文件夹,它不会更进一步。 在hadoop有没有办法做到这一点?

Java中的电子邮件validation的正则表达式

我正在使用下面的正则表达式 (“.+@.+\\.[az]+”) 它接受#@#.com作为有效的电子邮件。 我应该使用什么样的模式?

为什么POST不尊重charset,但是AJAX请求呢? tomcat 6

我有一个基于tomcat的应用程序,需要提交一个能够处理utf-8字符的表单。 通过ajax提交时,数据从utf-8中的getParameter()正确返回。 通过表单发布提交时,数据将从iso-8859-1中的getParameter()返回。 我使用了fiddler,并确定了请求的唯一区别,就是在ajax调用中将charset = utf-8附加到Content-Type头的末尾(正如预期的那样,因为我明确地发送了内容类型)。 来自ajax的ContentType:“application / x-www-form-urlencoded; charset = utf-8” 来自表单的ContentType:“application / x-www-form-urlencoded” 我有以下设置: ajax post(正确输出chars): $.ajax( { type : “POST”, url : “blah”, async : false, contentType: “application/x-www-form-urlencoded; charset=utf-8”, data : data, success : function(data) { } }); 表格post(在iso中输出字符) xml声明: 文档类型: 元标记: jvm参数: -Dfile.encoding=UTF-8 我也尝试过使用request.setCharacterEncoding(“UTF-8”); 但似乎tomcat只是忽略了它。 我没有使用RequestDumper阀门。 根据我的阅读,POST数据编码主要取决于表单所在的页面编码。 据我所知,我的页面在utf-8中正确编码。 此页面中的示例JSP正常工作。 它只使用setCharacterEncoding(“UTF-8”); 并回复您发布的数据。 […]

Java主游戏循环

我正在编写游戏循环,我在下面的示例中找到了代码。 我还研究了其他方法来进行游戏循环,例如本文 。 我无法让任何那些工作。 所以我保留了第一个链接中的那个。 我想知道的是: 我编写游戏循环的方式是一种很好的方法吗? 有什么建议么? 我应该使用Thread.sleep(); 在我的游戏循环中? 这是我目前的代码: public void run(){ long lastLoopTime = System.nanoTime(); final int TARGET_FPS = 60; final long OPTIMAL_TIME = 1000000000 / TARGET_FPS; long lastFpsTime = 0; while(true){ long now = System.nanoTime(); long updateLength = now – lastLoopTime; lastLoopTime = now; double delta = updateLength / ((double)OPTIMAL_TIME); lastFpsTime […]