diff --git a/core/java/src/net/i2p/data/RouterInfo.java b/core/java/src/net/i2p/data/RouterInfo.java index 9f980716f5be68f354be8a91c8661b824673a882..5f11f701769cedb249e11e14a5a12ab3f06c7a5e 100644 --- a/core/java/src/net/i2p/data/RouterInfo.java +++ b/core/java/src/net/i2p/data/RouterInfo.java @@ -15,7 +15,6 @@ import java.io.InputStream; import java.io.OutputStream; import java.security.DigestInputStream; import java.security.MessageDigest; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; @@ -31,6 +30,7 @@ import net.i2p.crypto.DSAEngine; import net.i2p.crypto.SHA1; import net.i2p.crypto.SHA1Hash; import net.i2p.crypto.SHA256Generator; +import net.i2p.util.CachedIteratorArrayList; import net.i2p.util.Clock; import net.i2p.util.Log; import net.i2p.util.OrderedProperties; @@ -81,7 +81,7 @@ public class RouterInfo extends DatabaseEntry { public static final String BW_CAPABILITY_CHARS = "KLMNO"; public RouterInfo() { - _addresses = new ArrayList(2); + _addresses = new CachedIteratorArrayList<RouterAddress>(2); _options = new OrderedProperties(); } diff --git a/core/java/test/junit/net/i2p/util/CachedIteratorArrayListTest.java b/core/java/test/junit/net/i2p/util/CachedIteratorArrayListTest.java index 3d0fe85fd17d276823752107d26903b68e7cf4f5..860f0e213caf457ee617adaa5058837ab3167f94 100644 --- a/core/java/test/junit/net/i2p/util/CachedIteratorArrayListTest.java +++ b/core/java/test/junit/net/i2p/util/CachedIteratorArrayListTest.java @@ -2,6 +2,7 @@ package net.i2p.util; import static org.junit.Assert.*; +import java.util.Collections; import java.util.Iterator; import java.util.List; @@ -68,4 +69,24 @@ public class CachedIteratorArrayListTest { assertEquals('c',iter.next().charValue()); assertFalse(iter.hasNext()); } + + /** + * tests the Collections.sort method because that is used + * in the router and internally creates iterators + */ + @Test + public void testSorting() { + List<Integer> li = new CachedIteratorArrayList<Integer>(); + li.add(3); + li.add(2); + li.add(1); + Collections.sort(li); + + Iterator<Integer> ii = li.iterator(); + assertEquals(1,ii.next().intValue()); + assertEquals(2,ii.next().intValue()); + assertEquals(3,ii.next().intValue()); + + assertFalse(ii.hasNext()); + } } diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index a0b5d687111038af3e6d7723ceda9ad7afb66ef8..31b2dd7bda943f6e0dcf16b33e2ed79896047e02 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -18,6 +18,7 @@ import net.i2p.router.OutNetMessage; import net.i2p.router.RouterContext; import net.i2p.router.util.CoDelPriorityBlockingQueue; import net.i2p.router.util.PriBlockingQueue; +import net.i2p.util.CachedIteratorArrayList; import net.i2p.util.Log; import net.i2p.util.ConcurrentHashSet; @@ -323,7 +324,7 @@ class PeerState { _rtt = INIT_RTT; _rttDeviation = _rtt; _inboundMessages = new HashMap(8); - _outboundMessages = new ArrayList(32); + _outboundMessages = new CachedIteratorArrayList<OutboundMessageState>(32); //_outboundQueue = new CoDelPriorityBlockingQueue(ctx, "UDP-PeerState", 32); _outboundQueue = new PriBlockingQueue(ctx, "UDP-PeerState", 32); // all createRateStat() moved to EstablishmentManager