Java 哈希集正在添加重复的ChannelSftp.LsEntry

Java 哈希集正在添加重复的ChannelSftp.LsEntry,java,hashset,jsch,Java,Hashset,Jsch,我正在尝试使用jsch库通过sftp下载文件。我成功地做到了这一点,但我只想下载尚未下载的文件。我正在收集一个条目列表,并尝试实现一个hashset来检查它们是否已经下载。问题是,它正在向哈希集添加重复项并重新下载所有文件。下面是我写的代码(好吧,重要的部分) Vector list=sftpChannel.ls(“*.gz”); 对于(ChannelSftp.LsEntry条目:列表){ 如果(设置添加(条目)){ sftpChannel.get(entry.getFilename(),fil

我正在尝试使用jsch库通过sftp下载文件。我成功地做到了这一点,但我只想下载尚未下载的文件。我正在收集一个条目列表,并尝试实现一个hashset来检查它们是否已经下载。问题是,它正在向哈希集添加重复项并重新下载所有文件。下面是我写的代码(好吧,重要的部分)

Vector list=sftpChannel.ls(“*.gz”);
对于(ChannelSftp.LsEntry条目:列表){
如果(设置添加(条目)){
sftpChannel.get(entry.getFilename(),fileDestination);
}
}

这都是一种方法。因此,当我再次调用该方法时,它应该只下载我以前没有下载的文件。然而,它并没有这样做。有什么建议吗?如果需要澄清,请告诉我。

而不是
条目
entry.getFilename()添加到
集合

if (set.add(entry.getFilename())) {
    sftpChannel.get(entry.getFilename(), fileDestination); 
}
这里我假设
getFilename
返回一个
字符串
,并且您的应用程序允许定义这样一个

之所以这样做(如果假设是正确的)是因为
equals
String
上定义得很好,这不会让两个相同的名称(相同的字符序列)在相同的
集合中结束


但是,如果您无法修改
set
,则应在
ChannelSftp.LsEntry
上重写
hashCode
equals
,以反映您认为使两个
LsEntry
对象相等的原因。

请重写hashCode()和equals()HashSet上重复问题的方法

这完全取决于“getFilename()”结果值的“equals”定义。1)检查ChannelSftp.LsEntry.hashCode()和equals()方法是如何实现的。也许这个类不适合作为散列结构键。2) 检查set变量的范围。它真的记得以前的电话吗?我发现这是最简单的解决方案。我只是将集合修改为一组字符串。非常感谢。
if (set.add(entry.getFilename())) {
    sftpChannel.get(entry.getFilename(), fileDestination); 
}