- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有多个具有相似 ID 的记录。数据库非常遗留。没有这样的唯一列。创建日期列用于保存数据库中行创建的时间戳。我必须在 java map 中保留记录以进行一些操作。对于记录中的任何更改,它都会创建新记录。我不想将所有字段都保留在 hashcode 和 equals 中。因为,我不确定哪个列是根据 id 更改的。
首先,我尝试使用随机数生成器生成唯一的哈希码。它有效。
其次,我决定将创建的日期列放入哈希码中。它也有效。
将日期放在哈希码中有什么缺点吗?
最佳答案
hashCode 和 equals 应该使用相同的字段,并且这些字段应该有效地不可变(即在添加到哈希集合后不会更改)
这可以包括日期或您喜欢的任何字段。
顺便说一句,我更喜欢使用 long
而不是 Date
因为我可以使它不可变而且速度稍快。
如果您打算使用时间戳作为 id,您还可以通过增加毫秒(如果可以存储这样的时间戳,则为微秒)来确保它是唯一的
private static final AtomicLong TIME_STAMP = new AtomicLong();
// can have up to 1000 ids per second.
public static long getUniqueMillis() {
long now = System.currentTimeMillis();
while (true) {
long last = TIME_STAMP.get();
if (now <= last)
now = last + 1;
if (TIME_STAMP.compareAndSet(last, now))
return now;
}
}
或
private static final AtomicLong TIME_STAMP = new AtomicLong();
// can have up to 1000000 ids per second.
public static long getUniqueMicros() {
long now = System.currentTimeMillis() * 1000;
while (true) {
long last = TIME_STAMP.get();
if (now <= last)
now = last + 1;
if (TIME_STAMP.compareAndSet(last, now))
return now;
}
}
关于java - 将日期放在哈希码中是好习惯吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17918553/
在我生活的世界中,构建一个将所有飞镖都扔到墙上的解决方案,并希望其中一些能命中靶心是一种非常糟糕的解决方案方法。 那么,我的问题出现了,什么时候在约定可接受的生产系统中使用 INSERT IGNORE
在数据处理时,经常会因为index报错而发愁。不要紧,本次来和大家聊聊pandas中处理索引的几种常用方法。 1.读取时指定索引列 很多情况下,我们的数据源是 CSV 文件。假设
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题? 更新问题,以便 editing this post 可以用事实和引用来回答它. 关闭 6 年前。 Improve
我是一名优秀的程序员,十分优秀!