小编Bas*_*que的帖子

Java - TreeSet和hashCode()

我有一个关于TreeSet集合和hashCode方法的快速问题.我有一个TreeSet并且我正在添加对象,在添加对象之前,我检查它是否存在于TreeSet使用该contains方法中.

我有2个不同的对象,每个对象使用我的hashCode方法实现产生一个不同的hashCode,例如:

public int hashCode()
{
    int hash = 7;
    hash = hash * 31 + anAttribute.hashCode();
    hash = hash * 31 + anotherAttribute.hashCode();
    hash = hash * 31 + yetAnotherAttribute.hashCode();
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

特定运行的hashCodes是:76126352和76126353(对象在一个属性中仅相差一位).

即使hashCodes不同,contains方法也会为这些对象返回true.有什么想法吗?这真的令人困惑,真的很感激帮助.

java hashcode treeset

18
推荐指数
1
解决办法
1万
查看次数

在日期时间字符串中解析日期的序数指示符(st,nd,rd,th)

我检查了SimpleDateFormatjavadoc,但是我无法找到一种方法来解析日期格式的序数指示符,如下所示:

 Feb 13th 2015 9:00AM
Run Code Online (Sandbox Code Playgroud)

我试过了"MMM dd yyyy hh:mma",但是这个日子必须要有数字才能正确吗?

是否可以使用a解析"第13"日期SimpleDateFormat而不必截断字符串?

java date-parsing simpledateformat

18
推荐指数
2
解决办法
9943
查看次数

从ResultSet获取日期以与java.time类一起使用

反正有没有得到一个java.time(Java 8中新的)兼容时间类ResultSet

我知道你可以使用ResultSet's getDate或者getTimestamp这些方法返回java.sql.Date/ java.sql.Timestamp对象现在已被弃用,所以使用它们来创建一个ZonedDateTime或类似的似乎是不好的做法.

resultset getdate java-8 java-time

18
推荐指数
3
解决办法
1万
查看次数

18
推荐指数
1
解决办法
1231
查看次数

为什么IntelliJ想要接受传入的网络连接?

➠IntelliJ中的哪些功能充当接收传入连接的服务器?

首次运行IntelliJ 2017.1.1时,我收到一个对话框,询问传入网络连接的权限.

您是否希望应用程序"java"接受传入的网络连接?

单击"拒绝"可能会限制应用程序的行为.可以在"安全和隐私"首选项的"防火墙"面板中更改此设置.

[否认允许]

请求权限接受传入网络连接的对话框的屏幕截图

单击Maven选项卡时,在New Project向导中全新安装IntelliJ 2017.2 Ultimate Edition时出现的对话框示例.

Apple Project macOS防火墙消息的屏幕截图,在New Project向导的Maven选项卡中询问

为什么IntelliJ会导致此提示?运行NetBeans时我没有遇到这样的事件.

否认或接受的影响究竟是什么?我担心让Java进程接受外部网络连接,因为这样做会带来严重的安全风险.

可能与:


这个问题不是关于消息的来源.源是Apple macOS 应用级防火墙.您可以允许或阻止应用程序侦听传入的网络连接.允许这是一个安全风险.

IntelliJ要求添加到允许侦听传入消息的应用程序列表中.我的问题是,"为什么IntelliJ需要接受传入的网络连接?".

屏幕截图的macOS>系统偏好设置>安全和隐私>防火墙

java security intellij-idea

18
推荐指数
2
解决办法
3861
查看次数

使用 Set.of 时的 JDK 11 泛型问题

使用 JDK 11 时,我无法理解以下类型安全问题。谁能解释当我直接传递Set.of参数时没有收到编译错误的原因:

public static void main(String[] args) {
    var intSet1 = Set.of(123, 1234, 101);
    var strValue = "123";
    isValid(strValue, intSet1);// Compilation error (Expected behaviour)
    **isValid(strValue, Set.of(123, 1234, 101));// No Compilation error**
}

static <T> boolean isValid(T value, Set<T> range) {
    return range.contains(value);
}
Run Code Online (Sandbox Code Playgroud)

您可以在 IdeOne.com 上实时运行此代码

java generics static-factory openjdk-11

18
推荐指数
3
解决办法
740
查看次数

项目loom,当虚拟线程进行阻塞系统调用时会发生什么?

我正在研究Project Loom 的运作方式以及它能为我的公司带来什么样的好处。

\n

所以我理解其动机,对于基于标准 servlet 的后端,总是有一个执行业务逻辑的线程池,一旦线程因为 IO 而被阻塞,它除了等待之外什么也做不了。假设我有一个具有单个端点的后端应用程序,该端点背后的业务逻辑是使用 JDBC 读取一些数据,该 JDBC 内部使用 InputStream,后者将再次使用阻塞系统调用(就 Linux 而言,为 read())。因此,如果我有 20000 个用户到达此端点,我需要创建 200 个线程,每个线程等待 IO。

\n

现在假设我将线程池切换为使用虚拟线程。根据 Ben Evans 在《深入 Java\xe2\x80\x99s Project Loom 和虚拟线程》一文中的说法:

\n
\n

相反,当进行阻塞调用(例如 I/O)时,虚拟线程会自动放弃(或让出)其承载线程。

\n
\n

据我了解,如果我的操作系统线程数量等于 CPU 核心数量和无限数量的虚拟线程,则所有操作系统线程仍将等待 IO,并且执行程序服务将无法为虚拟分配新工作线程,因为没有可用的线程来执行它。它与常规线程有何不同,至少对于操作系统线程,我可以将其扩展到数千以增加吞吐量。或者我只是误解了 Loom 的用例?提前致谢

\n

添加在

\n

我刚刚读过这个邮件列表

\n
\n

虚拟线程喜欢阻塞 I/O。如果线程需要阻塞(例如 Socket 读取),那么这会释放底层内核线程以执行其他工作

\n
\n

我不确定我是否理解它,如果操作系统执行诸如读取之类的阻塞调用,则操作系统无法释放线程,出于这些目的,内核具有非阻塞系统调用,例如 epoll,它不会阻塞线程并立即返回具有一些可用数据的文件描述符列表。上面的引用是否意味着在幕后,如果调用它的线程是虚拟的, JVM 会将阻塞替换read为非阻塞?epoll

\n

java concurrency multithreading project-loom

18
推荐指数
2
解决办法
4314
查看次数

什么是计算ISO 8601周数的好的,简单的方法?

假设我有一个日期,即年,月和日,作为整数.什么是一个好的(正确的),简洁和可读的算法,用于计算给定日期所属的一周的ISO 8601 周数?我遇到了一些真正可怕的代码,这些代码让我觉得必定有更好的方法.

我希望用Java做这个,但任何类型的面向对象语言的伪代码都可以.

java date

17
推荐指数
4
解决办法
1万
查看次数

计算Java中日期的差异

我觉得Java(或java.util库)没有内置函数来计算日期差异很有趣.我想从另一个日期中减去一个日期以获得它们之间的经过时间.做这个的最好方式是什么?

我知道简单的方法是以毫秒为单位取时间差,然后将其转换为天.但是,我想知道这是否适用于所有情况(夏令时等).

java datetime date date-arithmetic

17
推荐指数
2
解决办法
1万
查看次数

我可以从〜/ Library/Developer/Xcode文件夹中删除什么?

我的~/Library/Developer/Xcode文件夹大小超过17演出.当我在虚拟机(Parallels 12)中工作时,虚拟磁盘总大小为64 gig,我需要恢复一些磁盘空间.

在诸如"Archives","DerivedDate","Installs","iOS Device Logs","iOS DeviceSupport","Snapshots"和"UserData"等文件夹中,我可以在不破坏项目的情况下删除哪些内容?

xcode xcode7

17
推荐指数
2
解决办法
7977
查看次数