假设我有一个HashMap,它将实际的文件对象存储为键,值为它的最后修改日期。
HashMap<File, Long> hashMap = new HashMap<File, Long>();
如果我的HashMap中存在File(test.log)(我已添加它),但文件(test.log)被修改或稍后更改;当我发出替换时,它会找到现有的匹配对象,还是会更改文件的STATE,这将改变对象的性质。因此,我将间接添加一个新的Key,Value Pair。
hashMap.replace(file, newModifiedTime);
答案 0 :(得分:2)
测试此抽象路径名与给定对象的相等性。当且仅当参数不为null并且是表示与此抽象路径名相同的文件或目录的抽象路径名时,返回true。两个抽象路径名是否相等取决于底层系统。
答案 1 :(得分:1)
File
.equals()
/ .hashCode()
测试文件名称,因此您的密钥是“安全的”。
Javadoc这样说。
注意:如果你使用JDK 7或更高版本,请帮个忙:放弃File
,使用Files
/ Path
。
注意2:请注意,如果您在目录/foo
中,new File("bar")
和new File("/foo/bar")
不一样。如果您想确保文件名是“完整的”,请使用.getCanonicalFile()
。
但是,再次帮自己一个忙,并使用Files
。它的数量级要好一些。
答案 2 :(得分:0)
存储的内容有一个Key是文件的哈希值。这实际上并不意味着整个对象被散列。只有Path用于生成File对象的哈希值。
将对象作为键存储到哈希表时。它将在内部调用.hashCode()
http://docs.oracle.com/javase/6/docs/api/java/io/File.html#hashCode()
来自文档。
计算此抽象路径名的哈希码。因为平等 抽象路径名本质上是系统依赖的,因此也是如此 计算他们的哈希码。在UNIX系统上,一个哈希码 抽象路径名等于其唯一或哈希码 pathname字符串和十进制值1234321.在Microsoft Windows上 在系统中,散列码等于散列码或散列码 其路径名字符串转换为小写和小数值 1234321.在小写路径名字符串时不考虑区域设置。
答案 3 :(得分:0)
HashMap
使用其密钥的hashCode()
方法。根据{{3}} File.hashCode()
{{1}}执行此操作。
计算此抽象路径名的哈希码。因为平等 抽象路径名本质上是系统依赖的,因此也是如此 计算他们的哈希码。在UNIX系统上,一个哈希码 抽象路径名等于其唯一或哈希码 pathname字符串和十进制值1234321.在Microsoft Windows上 在系统中,散列码等于散列码或散列码 其路径名字符串转换为小写和小数值 1234321.在小写路径名字符串时不考虑区域设置。
简而言之,哈希是根据路径名而不是文件内容计算的。
答案 4 :(得分:0)
HashMap
使用hashCode()
和equals()
类实例的方法作为键,即File
。在File的情况下,它通过将功能委托给具体的文件系统包装器来比较抽象路径。
如果你想改变这种行为,你可能应该使用TreeMap
并实现自己的自定义比较器,比较文件内容,上次修改日期等。