Tag: 集合

Collections.sort()throws比较方法违反了它的一般合同! 例外

我正在尝试对List 对象进行排序,并且抛出此异常(仅适用于大型列表) 排序代码: List sentenceList = finalRepresentation.getSentences(); Collections.sort(sentenceList); // <=== EXCEPTION THROWN HERE!!! FinalSentence类标题: public class FinalSentence implements Comparable{…} compareTo()实现: @Override public int compareTo(FinalSentence o) { if (this == o) { return 0; } if (this.score > o.score) { return 1; } if (this.score < o.score) { return -1; } return 0; } 这是例外: Exception […]

将链接的对象转换为流或集合

我想迭代堆栈跟踪。 stacktrace由throwables组成,其getCause()返回下一个throwable。 对getCause()的最后一次调用返回null。 (示例:a – > b – > null) 我试图使用Stream.iterable()导致NullPointerException,因为iterable中的元素不能为null。 以下是该问题的简短演示: public void process() { Throwable b = new Throwable(); Throwable a = new Throwable(b); Stream.iterate(a, Throwable::getCause).forEach(System.out::println); } 我目前正在使用while循环手动创建集合: public void process() { Throwable b = new Throwable(); Throwable a = new Throwable(b); List list = new ArrayList(); Throwable element = a; while (Objects.nonNull(element)) […]

linkedhashmap,hashmap,map,hashtable之间的区别

我正准备进行软件访谈,现在我几天都遇到了问题。 我无法弄清楚Java Collection API中存在的linkedhashmap,map,hashtable和hashmap之间的区别。 所有这些都具有相同的获得和复杂性吗? 我知道map是接口类和hashmap,hashtable,linkedhashmap实现这个接口。 那么这是否意味着这三个类的内部实现是一样的? 它们是如何在集合api中实现的? 提前致谢!!!

重写hashcode方法时的HashMap性能

在HashMap ,如果我将自定义对象作为键。 如果我覆盖hashCode()方法并将其实现为将值传递为’ 1 ‘,会发生什么情况; 会不会有任何表现? 如果我改变hashCode()方法使用Math.random()函数返回随机值会对性能产生什么影响?

比较器最佳实践

如果我实现一个自定义比较器,除了compare之外,它是否被认为是优秀的做法? 另外还有Comparator的定义合同吗?

将List转换并转换为使用Guava进行设置

有没有一种简单的方法来转换和转换列表与番石榴设置? 我想用方法: Set result = Sets.transformToSet(myList, new Function() { public To apply(From item) { return convert(item); } }); 这是我的代码,带有“tempCollection” Collection tempCollection = Collections2.transform(myList, new Function() { public To apply(From item) { return convert(item); } }); Set result = newHashSet(tempCollection );

scala范围与列表在大型集合上的性能

我为10,000,000个元素运行了一组性能基准测试,并且我发现每个实现的结果差别很大。 任何人都可以解释为什么创建Range.ByOne会导致性能优于简单的基元数组,但将相同范围转换为列表会导致性能甚至比最差情况更糟糕吗? 创建10,000,000个元素,并打印出模数为1,000,000的元素。 JVM大小始终设置为相同的最小值和最大值:-Xms?m -Xmx?m import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit._ object LightAndFastRange extends App { def chrono[A](f: => A, timeUnit: TimeUnit = MILLISECONDS): (A,Long) = { val start = System.nanoTime() val result: A = f val end = System.nanoTime() (result, timeUnit.convert(end-start, NANOSECONDS)) } def millions(): List[Int] = (0 to 10000000).filter(_ % 1000000 == 0).toList val results […]

WeakHashMap和强引用值

Javadocs说:“当一个密钥被丢弃时,它的条目将被有效地从地图中删除”。 但除非有另一个线程偶尔删除这样的Map.Entry条目,否则地图不会强烈引用值对象? 但是由于没有运行这样的线程,只有get方法调用可以删除这些条目 – 一次一个。 因为这个原因WeakHashMap<K, WeakReference>我几乎总是使用WeakHashMap<K, WeakReference> 。 为什么他们没有将默认行为 – 值作为弱引用呢?

Java为高并发情况限制了非阻塞缓冲区

基本上我需要一个数据结构来存储服务器端的临时聊天消息。 它应该是: 有界:因为我不需要存储太多消息,客户端将每秒发送请求以获取新消息。 我认为绑定的大小应该是最大值。 在一秒钟内挂载并发请求。 当缓冲区已满时,将删除旧消息。 适合高并发访问:我不想使用像Collections.synchronizedXXXX这样的数据结构,因为在迭代期间,如果其他线程更改了数据结构,例如添加了一条消息,它将抛出exception,所以我必须锁定整个数据结构,实际上我并不关心客户端请求是否可以获得最后插入的消息,因为它们将在一秒后发送新请求,另一方面写操作应该永远不会延迟。 包java.util.concurrency下的类似乎是解决方案,但是…… 非阻塞:LinkedBlockingQueue,ArrayBlockingQueue它们可以是有界的,并且在迭代期间不会抛出exception,但它们都是阻塞队列。 当队列已满时,我想将新元素添加到尾部并从头部删除旧元素而不是阻塞它,并等待某人删除标题。 所以我的问题是第三个库有什么好的实现吗? 比如谷歌番石榴? 或者您可能更了解在服务器上存储临时聊天消息? 非常感谢你!

Set集合中的重复值?

是否可以在Set集合中允许重复值? 有没有办法让元素独一无二并有一些副本? Set集合中是否有任何具有重复值的函数?