Tag: 数据结构

为什么jdk中没有ConcurrentLinkedHashMap类?

这个问题直接来自我在SO的上一个问题 。 我认为我的第二个问题的答案是否定的。 所以我想理解为什么java.util.concurrent包中没有ConcurrentLinkedHashMap? 我的意思是有一个ConcurrentHashMap但没有ConcurrentLinkedHashMap。 在Concurrent环境中拥有这样的类是否完全没有意义? 我的意思是这里的主要技术原因是它的不可用性? 在Guava / Apache Commons中有类似的东西吗?

内存中的Java SQL表就像数据结构一样

有几次我想要一个类似于SQL表的数据结构,你可以在各种字段和多个字段中进行选择。 类似于内存中的SQL实现,除了我不想在数据结构中存储那么多对象。 我还要求对象可以通过标准Java方法进行序列化。 我之前已经使用多个哈希表或自定义哈希键完成了这个,但它最终成了很多代码并且非常具体。 我也使用了Groovy及其封闭能力和gpath来帮助我,但我并不总是有它(不同的项目)。 编辑:我认为我的问题更多的是对象遍历/选择问题以下是一些有趣的项目: http://josql.sourceforge.net/ http://homepages.mcs.vuw.ac.nz/~djp/JQL/ http://today.java.net/pub/a/today/2006/08/03/java-object-querying-using-jxpath.html http://code.google.com/p/lambdaj/ (过去我用过这个……很慢……) http://jedi.codehaus.org/绝地 然而,大多数这些项目的缺点是它们比直接访问对象(非reflectiongetter / setter)慢得多,并且肯定比索引(hash)慢。

两个线程访问经常更新的Arraylist的问题

我有存储许多对象的ArrayLists,并且经常在ArrayLists中添加和删除对象。 一个线程对数据结构进行操作,并每20ms左右更新一次ArrayList的对象。 另一个线程遍历ArrayLists并使用它们的元素绘制对象(也是每20-30ms)。 如果使用for循环遍历ArrayLists,则IndexOutOfBoundsExceptions比比皆是。 如果使用迭代器遍历ArrayLists,则ConcurrentModificationExceptions比比皆是。 像这样同步ArrayLists: List list = Collections.synchronizedList(new ArrayList()); synchronized(list) { //use iterator for traversals } 没有例外,但有大量的性能消耗。 有没有办法遍历这些ArrayLists而没有exception抛出,没有性能消耗? 谢谢!

PipedReader / PipedWriter的更好选择?

我需要一个缓冲的char流,我在一个线程中写入,我从另一个线程中读取。 现在我正在使用PipedReader和PipedWriter ,但这些类会导致性能问题:当内部缓冲区为空时,PipedReader会执行wait(1000) ,这会导致应用程序明显滞后。 是否会有一些库与PipedReader / PipedWriter做同样的事情,但性能更好? 或者我必须实施自己的车轮?

我的Bitset的大小是多少?

我想以尽可能小的空间将System.currentTimeInMillis存储在内存中。 因为我必须将数百万存储在内存中。 我将它转换为binaryString ,它给了我41 bits 这是我的计划 public class BitSetSize { public static void main(final String[] args) { final long currentTimeMillis = System.currentTimeMillis(); final String currentTimeToBinaryString = Long.toBinaryString(currentTimeMillis); System.out.println(“Size in bits: ” + currentTimeToBinaryString.length()); final BitSet bitSet = BitSet.valueOf(new long[]{currentTimeMillis}); System.out.println(“Bitset length: ” + bitSet.length()); System.out.println(“Bitset size: ” + bitSet.size()); System.out.println(“Size of biset object(bytes): ” + […]

是否存在未同步的Java Stack的替代品?

我有一个使用Stack数据结构的大型代码库(由我编写)。 这是为了方便使用,我有时使用它作为Stack或其他时间使用Vector / List。 在进行了性能评估之后,我们决定不再为同步安全支付额外费用。 我现在需要用非同步的结构替换这个结构(在代码中很多次提到它)。 我很高兴发现Apache集合包含一个ArrayStack ,这正是我想要的(与Java堆栈相同但非同步)。 然而,这不具有现代Java 5代码(这是我使用的)的generics。 我不打算将我的代码转换为Java 1.4 那么Java Stack是否还有其他任何Java 5兼容的替代品,或者我需要自己编写吗? 更新: 我使用LinkedList和调整的“pop”/“push”方法。

不同类型的二维数组

我想创建一个二维数组,我想在其中存储数据库中的记录。 所以假设第一个是int类型,第二个是String类型(这里我只描述了一个记录,所以基本上是db列的类型)。 我该怎么做? 数组是否是正确的数据结构?

地图在番石榴地图

我有一些代码与Map<String, Map>对象有效(它被实例化为HashMaps的HashMap),但我想知道是否有更好的方法在Guava中表示这个数据结构。 我考虑过Multimap ,但是当Guava中有ListMultimap和SetMultimap时,我没有找到“MapMultimap”。 我也检查了桌子 ,它看起来更像是它,但它的名字让我感到不舒服:我所拥有的绝对不是一张桌子而是一棵树。 (第二个键之间没有重叠) 是否有更好的番石榴替代品或者我应该坚持使用Map<String, Map> ?

Java中C#ObservableCollection的等价物

我想知道是否有一个像OberservableCollection一样的数据结构,就像在C#中能够采用某种类型一样。 例如: 在C#我可以说.. ObservableCollection Beer = new ObservableCollection(); Beer.add(“Bud”); Beer.add(“Coors”); 假设制造啤酒类,我们可以改变酒精含量 Beer[1].content = 5; 我想知道是否有人知道是否有这样的数据结构与Java一起工作。 我是一名C#程序员,不是很多Java程序员,所以只是想知道。 此外,它必须能够采用自定义类型,而不是通用类型。

用于模拟数据树的java数据结构

我需要帮助定义使用的方法。 我有一个SOAP响应给我一个xml文件。 我需要最终在屏幕上显示3个相关列表。 当您在第一个列表中选择一个项目时,相应的选项将出现在第二个列表等上。我只对如何在从xml流中提取数据后有效组织数据感兴趣。 这是一个xml片段: Acer A1 Android Acer A1 J2ME Acer A2 Android Samsung E400 Android 所以,我会有类似manufacturer = {“Acer”,“Acer”,“Acer”,“Samsung”},model = {“A1”,“A1”,“A2”,“E400”},platform = { “机器人”, “J2ME”, “机器人”, “机器人”}。 有趣的是:我需要按摩数据,以便我可以使用它来显示3个列表。 选择Android后,宏碁和三星成为可用的。 如果选择Acer,则可以使用型号A1和A2。 所有列表都需要排序。 目前我正在使用Sax将数据解析为对象向量,包含制造商,模型,平台字段。 我能想到的只是一个类似TreeMap的结构。 任何建议,将不胜感激。