【发布时间】:2012-02-21 19:53:34
【问题描述】:
我的问题的基础是 在 Java 中给定一个 List 对象,返回唯一数据集合的最快方法是什么?
更具体的版本是,我有一个 2d ArrayList(把它想象成一个表),我想遍历给定的列索引并返回唯一数据。
这是我目前的设置:
public Set<Object> getDistinctColumnData( int colIndex ) {
//dataByIndex = List<List<Object>>
Set<Object> colDistinctData = new HashSet<Object>( dataByIndex.size() + 1, 1f ) ;
for( List<Object> row : dataByIndex ) {
colDistinctData.add( row.get( colIndex ) ) ;
}
return colDistinctData ;
}
当我将初始容量设置为非不同集的大小加一并将负载因子设置为 1 时,我获得了小的性能提升(我的想法是在达到 100% 之前它不需要增长,并且即使原始集合已经 100% 不同也不应该发生(或者我错了吗?))。
有没有更快的方法?
【问题讨论】:
-
投反对票的人愿意给出理由吗?
-
我会使用
(dataByIndex.size() *3/2)作为初始大小并保留负载因子,除非您预计会有很多重复。 -
您的代码看起来不错。做点别的事情。
-
我假设您在确定这是麻烦的部分之前对您的代码进行了一些分析(例如使用 jvisualvm)。
-
您的列表的大小可能是多少?
标签: java performance hashset