diff --git a/java/fury-core/src/main/java/io/fury/serializer/CollectionSerializers.java b/java/fury-core/src/main/java/io/fury/serializer/CollectionSerializers.java index 468c3734bd..456eda3e4f 100644 --- a/java/fury-core/src/main/java/io/fury/serializer/CollectionSerializers.java +++ b/java/fury-core/src/main/java/io/fury/serializer/CollectionSerializers.java @@ -48,6 +48,7 @@ import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; +import java.util.PriorityQueue; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; @@ -803,6 +804,24 @@ public BitSet read(MemoryBuffer buffer) { } } + public static class PriorityQueueSerializer extends CollectionSerializer { + public PriorityQueueSerializer(Fury fury, Class cls) { + super(fury, cls, true, false); + } + + public void writeHeader(MemoryBuffer buffer, PriorityQueue value) { + fury.writeReferencableToJava(buffer, value.comparator()); + } + + @Override + public PriorityQueue newCollection(MemoryBuffer buffer, int numElements) { + Comparator comparator = (Comparator) fury.readReferencableFromJava(buffer); + PriorityQueue queue = new PriorityQueue(comparator); + fury.getReferenceResolver().reference(queue); + return queue; + } + } + public static void registerDefaultSerializers(Fury fury) { fury.registerSerializer(ArrayList.class, new ArrayListSerializer(fury)); Class arrayAsListClass = Arrays.asList(1, 2).getClass(); @@ -836,5 +855,7 @@ public static void registerDefaultSerializers(Fury fury) { fury.registerSerializer(Vector.class, new VectorSerializer(fury, Vector.class)); fury.registerSerializer(ArrayDeque.class, new ArrayDequeSerializer(fury, ArrayDeque.class)); fury.registerSerializer(BitSet.class, new BitSetSerializer(fury, BitSet.class)); + fury.registerSerializer( + PriorityQueue.class, new PriorityQueueSerializer(fury, PriorityQueue.class)); } } diff --git a/java/fury-core/src/test/java/io/fury/serializer/CollectionSerializersTest.java b/java/fury-core/src/test/java/io/fury/serializer/CollectionSerializersTest.java index ec40dcd5fa..e5d46afc6e 100644 --- a/java/fury-core/src/test/java/io/fury/serializer/CollectionSerializersTest.java +++ b/java/fury-core/src/test/java/io/fury/serializer/CollectionSerializersTest.java @@ -34,6 +34,7 @@ import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; +import java.util.PriorityQueue; import java.util.TreeSet; import java.util.Vector; import java.util.concurrent.ConcurrentSkipListSet; @@ -166,4 +167,12 @@ public void tesBitSetSerializer() { .getSerializerClass(BitSet.valueOf(LongStream.range(0, 128).toArray()).getClass()), CollectionSerializers.BitSetSerializer.class); } + + @Test + public void tesPriorityQueueSerializer() { + serDe(javaFury, new PriorityQueue<>(Arrays.asList("a", "b", "c"))); + Assert.assertEquals( + javaFury.getClassResolver().getSerializerClass(PriorityQueue.class), + CollectionSerializers.PriorityQueueSerializer.class); + } }