Committed by
Gerrit Code Review
Avoid unnecessary allocations needed to convert List to Set
Change-Id: I80b0bcf31f625f8e151155880075c888a0cf1c1d
Showing
8 changed files
with
31 additions
and
40 deletions
| ... | @@ -48,6 +48,7 @@ import org.slf4j.LoggerFactory; | ... | @@ -48,6 +48,7 @@ import org.slf4j.LoggerFactory; |
| 48 | 48 | ||
| 49 | import java.util.Collection; | 49 | import java.util.Collection; |
| 50 | import java.util.LinkedHashMap; | 50 | import java.util.LinkedHashMap; |
| 51 | +import java.util.LinkedHashSet; | ||
| 51 | import java.util.List; | 52 | import java.util.List; |
| 52 | import java.util.Map; | 53 | import java.util.Map; |
| 53 | import java.util.Optional; | 54 | import java.util.Optional; |
| ... | @@ -333,14 +334,14 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour | ... | @@ -333,14 +334,14 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour |
| 333 | // it's assumed that the passed "values" is non-empty | 334 | // it's assumed that the passed "values" is non-empty |
| 334 | 335 | ||
| 335 | // This is 2-pass scan. Nicer to have 1-pass scan | 336 | // This is 2-pass scan. Nicer to have 1-pass scan |
| 336 | - List<DiscreteResource> discreteValues = values.stream() | 337 | + Set<DiscreteResource> discreteValues = values.stream() |
| 337 | .filter(x -> x instanceof DiscreteResource) | 338 | .filter(x -> x instanceof DiscreteResource) |
| 338 | .map(x -> (DiscreteResource) x) | 339 | .map(x -> (DiscreteResource) x) |
| 339 | - .collect(Collectors.toList()); | 340 | + .collect(Collectors.toCollection(LinkedHashSet::new)); |
| 340 | - List<ContinuousResource> continuousValues = values.stream() | 341 | + Set<ContinuousResource> continuousValues = values.stream() |
| 341 | .filter(x -> x instanceof ContinuousResource) | 342 | .filter(x -> x instanceof ContinuousResource) |
| 342 | .map(x -> (ContinuousResource) x) | 343 | .map(x -> (ContinuousResource) x) |
| 343 | - .collect(Collectors.toList()); | 344 | + .collect(Collectors.toCollection(LinkedHashSet::new)); |
| 344 | 345 | ||
| 345 | return discreteTxStore.register(key, discreteValues) | 346 | return discreteTxStore.register(key, discreteValues) |
| 346 | && continuousTxStore.register(key, continuousValues); | 347 | && continuousTxStore.register(key, continuousValues); |
| ... | @@ -362,14 +363,14 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour | ... | @@ -362,14 +363,14 @@ public class ConsistentResourceStore extends AbstractStore<ResourceEvent, Resour |
| 362 | // it's assumed that the passed "values" is non-empty | 363 | // it's assumed that the passed "values" is non-empty |
| 363 | 364 | ||
| 364 | // This is 2-pass scan. Nicer to have 1-pass scan | 365 | // This is 2-pass scan. Nicer to have 1-pass scan |
| 365 | - List<DiscreteResource> discreteValues = values.stream() | 366 | + Set<DiscreteResource> discreteValues = values.stream() |
| 366 | .filter(x -> x instanceof DiscreteResource) | 367 | .filter(x -> x instanceof DiscreteResource) |
| 367 | .map(x -> (DiscreteResource) x) | 368 | .map(x -> (DiscreteResource) x) |
| 368 | - .collect(Collectors.toList()); | 369 | + .collect(Collectors.toCollection(LinkedHashSet::new)); |
| 369 | - List<ContinuousResource> continuousValues = values.stream() | 370 | + Set<ContinuousResource> continuousValues = values.stream() |
| 370 | .filter(x -> x instanceof ContinuousResource) | 371 | .filter(x -> x instanceof ContinuousResource) |
| 371 | .map(x -> (ContinuousResource) x) | 372 | .map(x -> (ContinuousResource) x) |
| 372 | - .collect(Collectors.toList()); | 373 | + .collect(Collectors.toCollection(LinkedHashSet::new)); |
| 373 | 374 | ||
| 374 | return discreteTxStore.unregister(key, discreteValues) | 375 | return discreteTxStore.unregister(key, discreteValues) |
| 375 | && continuousTxStore.unregister(key, continuousValues); | 376 | && continuousTxStore.unregister(key, continuousValues); | ... | ... |
| ... | @@ -18,7 +18,6 @@ package org.onosproject.store.resource.impl; | ... | @@ -18,7 +18,6 @@ package org.onosproject.store.resource.impl; |
| 18 | import org.onosproject.net.resource.DiscreteResource; | 18 | import org.onosproject.net.resource.DiscreteResource; |
| 19 | import org.onosproject.net.resource.DiscreteResourceId; | 19 | import org.onosproject.net.resource.DiscreteResourceId; |
| 20 | 20 | ||
| 21 | -import java.util.List; | ||
| 22 | import java.util.Optional; | 21 | import java.util.Optional; |
| 23 | import java.util.Set; | 22 | import java.util.Set; |
| 24 | 23 | ||
| ... | @@ -75,7 +74,7 @@ interface DiscreteResources { | ... | @@ -75,7 +74,7 @@ interface DiscreteResources { |
| 75 | * @return true this instance contains a resource included in the given resources, | 74 | * @return true this instance contains a resource included in the given resources, |
| 76 | * otherwise false. | 75 | * otherwise false. |
| 77 | */ | 76 | */ |
| 78 | - boolean containsAny(List<DiscreteResource> other); | 77 | + boolean containsAny(Set<DiscreteResource> other); |
| 79 | 78 | ||
| 80 | /** | 79 | /** |
| 81 | * Returns a union set of this instance and the given instance. | 80 | * Returns a union set of this instance and the given instance. |
| ... | @@ -93,7 +92,7 @@ interface DiscreteResources { | ... | @@ -93,7 +92,7 @@ interface DiscreteResources { |
| 93 | * @param removed resources | 92 | * @param removed resources |
| 94 | * @return a new DiscreteResources instance representing a difference set | 93 | * @return a new DiscreteResources instance representing a difference set |
| 95 | */ | 94 | */ |
| 96 | - DiscreteResources remove(List<DiscreteResource> removed); | 95 | + DiscreteResources remove(Set<DiscreteResource> removed); |
| 97 | 96 | ||
| 98 | /** | 97 | /** |
| 99 | * Returns all of resources this instance holds. | 98 | * Returns all of resources this instance holds. | ... | ... |
| ... | @@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableSet; | ... | @@ -19,7 +19,6 @@ import com.google.common.collect.ImmutableSet; |
| 19 | import org.onosproject.net.resource.DiscreteResource; | 19 | import org.onosproject.net.resource.DiscreteResource; |
| 20 | import org.onosproject.net.resource.DiscreteResourceId; | 20 | import org.onosproject.net.resource.DiscreteResourceId; |
| 21 | 21 | ||
| 22 | -import java.util.List; | ||
| 23 | import java.util.Optional; | 22 | import java.util.Optional; |
| 24 | import java.util.Set; | 23 | import java.util.Set; |
| 25 | 24 | ||
| ... | @@ -48,7 +47,7 @@ final class EmptyDiscreteResources implements DiscreteResources { | ... | @@ -48,7 +47,7 @@ final class EmptyDiscreteResources implements DiscreteResources { |
| 48 | } | 47 | } |
| 49 | 48 | ||
| 50 | @Override | 49 | @Override |
| 51 | - public boolean containsAny(List<DiscreteResource> other) { | 50 | + public boolean containsAny(Set<DiscreteResource> other) { |
| 52 | return false; | 51 | return false; |
| 53 | } | 52 | } |
| 54 | 53 | ||
| ... | @@ -58,7 +57,7 @@ final class EmptyDiscreteResources implements DiscreteResources { | ... | @@ -58,7 +57,7 @@ final class EmptyDiscreteResources implements DiscreteResources { |
| 58 | } | 57 | } |
| 59 | 58 | ||
| 60 | @Override | 59 | @Override |
| 61 | - public DiscreteResources remove(List<DiscreteResource> removed) { | 60 | + public DiscreteResources remove(Set<DiscreteResource> removed) { |
| 62 | return this; | 61 | return this; |
| 63 | } | 62 | } |
| 64 | 63 | ... | ... |
| ... | @@ -23,7 +23,6 @@ import org.onosproject.net.resource.Resources; | ... | @@ -23,7 +23,6 @@ import org.onosproject.net.resource.Resources; |
| 23 | 23 | ||
| 24 | import java.util.LinkedHashMap; | 24 | import java.util.LinkedHashMap; |
| 25 | import java.util.LinkedHashSet; | 25 | import java.util.LinkedHashSet; |
| 26 | -import java.util.List; | ||
| 27 | import java.util.Map; | 26 | import java.util.Map; |
| 28 | import java.util.Optional; | 27 | import java.util.Optional; |
| 29 | import java.util.Set; | 28 | import java.util.Set; |
| ... | @@ -97,7 +96,7 @@ final class EncodableDiscreteResources implements DiscreteResources { | ... | @@ -97,7 +96,7 @@ final class EncodableDiscreteResources implements DiscreteResources { |
| 97 | } | 96 | } |
| 98 | 97 | ||
| 99 | @Override | 98 | @Override |
| 100 | - public boolean containsAny(List<DiscreteResource> other) { | 99 | + public boolean containsAny(Set<DiscreteResource> other) { |
| 101 | return other.stream() | 100 | return other.stream() |
| 102 | .anyMatch(x -> values().contains(x)); | 101 | .anyMatch(x -> values().contains(x)); |
| 103 | } | 102 | } |
| ... | @@ -110,8 +109,8 @@ final class EncodableDiscreteResources implements DiscreteResources { | ... | @@ -110,8 +109,8 @@ final class EncodableDiscreteResources implements DiscreteResources { |
| 110 | } | 109 | } |
| 111 | 110 | ||
| 112 | @Override | 111 | @Override |
| 113 | - public DiscreteResources remove(List<DiscreteResource> removed) { | 112 | + public DiscreteResources remove(Set<DiscreteResource> removed) { |
| 114 | - return of(parent, Sets.difference(values(), new LinkedHashSet<>(removed))); | 113 | + return of(parent, Sets.difference(values(), removed)); |
| 115 | } | 114 | } |
| 116 | 115 | ||
| 117 | @Override | 116 | @Override | ... | ... |
| ... | @@ -22,7 +22,6 @@ import org.onosproject.net.resource.DiscreteResourceId; | ... | @@ -22,7 +22,6 @@ import org.onosproject.net.resource.DiscreteResourceId; |
| 22 | import org.onosproject.net.resource.Resources; | 22 | import org.onosproject.net.resource.Resources; |
| 23 | 23 | ||
| 24 | import java.util.LinkedHashSet; | 24 | import java.util.LinkedHashSet; |
| 25 | -import java.util.List; | ||
| 26 | import java.util.Objects; | 25 | import java.util.Objects; |
| 27 | import java.util.Optional; | 26 | import java.util.Optional; |
| 28 | import java.util.Set; | 27 | import java.util.Set; |
| ... | @@ -68,7 +67,7 @@ final class GenericDiscreteResources implements DiscreteResources { | ... | @@ -68,7 +67,7 @@ final class GenericDiscreteResources implements DiscreteResources { |
| 68 | } | 67 | } |
| 69 | 68 | ||
| 70 | @Override | 69 | @Override |
| 71 | - public boolean containsAny(List<DiscreteResource> other) { | 70 | + public boolean containsAny(Set<DiscreteResource> other) { |
| 72 | return other.stream().anyMatch(values::contains); | 71 | return other.stream().anyMatch(values::contains); |
| 73 | } | 72 | } |
| 74 | 73 | ||
| ... | @@ -82,10 +81,8 @@ final class GenericDiscreteResources implements DiscreteResources { | ... | @@ -82,10 +81,8 @@ final class GenericDiscreteResources implements DiscreteResources { |
| 82 | 81 | ||
| 83 | // returns a new instance, not mutate the current instance | 82 | // returns a new instance, not mutate the current instance |
| 84 | @Override | 83 | @Override |
| 85 | - public DiscreteResources remove(List<DiscreteResource> removed) { | 84 | + public DiscreteResources remove(Set<DiscreteResource> removed) { |
| 86 | - Set<DiscreteResource> newValues = new LinkedHashSet<>(this.values); | 85 | + return of(Sets.difference(this.values, removed)); |
| 87 | - newValues.removeAll(removed); | ||
| 88 | - return new GenericDiscreteResources(newValues); | ||
| 89 | } | 86 | } |
| 90 | 87 | ||
| 91 | @Override | 88 | @Override | ... | ... |
| ... | @@ -28,7 +28,6 @@ import org.slf4j.Logger; | ... | @@ -28,7 +28,6 @@ import org.slf4j.Logger; |
| 28 | import org.slf4j.LoggerFactory; | 28 | import org.slf4j.LoggerFactory; |
| 29 | 29 | ||
| 30 | import java.util.LinkedHashSet; | 30 | import java.util.LinkedHashSet; |
| 31 | -import java.util.List; | ||
| 32 | import java.util.Optional; | 31 | import java.util.Optional; |
| 33 | import java.util.Set; | 32 | import java.util.Set; |
| 34 | import java.util.stream.Collectors; | 33 | import java.util.stream.Collectors; |
| ... | @@ -61,13 +60,12 @@ class TransactionalContinuousResourceSubStore { | ... | @@ -61,13 +60,12 @@ class TransactionalContinuousResourceSubStore { |
| 61 | .findFirst(); | 60 | .findFirst(); |
| 62 | } | 61 | } |
| 63 | 62 | ||
| 64 | - boolean register(DiscreteResourceId key, List<ContinuousResource> values) { | 63 | + boolean register(DiscreteResourceId key, Set<ContinuousResource> requested) { |
| 65 | // short-circuit: receiving empty resource is regarded as success | 64 | // short-circuit: receiving empty resource is regarded as success |
| 66 | - if (values.isEmpty()) { | 65 | + if (requested.isEmpty()) { |
| 67 | return true; | 66 | return true; |
| 68 | } | 67 | } |
| 69 | 68 | ||
| 70 | - Set<ContinuousResource> requested = new LinkedHashSet<>(values); | ||
| 71 | Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, requested); | 69 | Set<ContinuousResource> oldValues = childMap.putIfAbsent(key, requested); |
| 72 | if (oldValues == null) { | 70 | if (oldValues == null) { |
| 73 | return true; | 71 | return true; |
| ... | @@ -94,7 +92,7 @@ class TransactionalContinuousResourceSubStore { | ... | @@ -94,7 +92,7 @@ class TransactionalContinuousResourceSubStore { |
| 94 | return childMap.replace(key, oldValues, newValues); | 92 | return childMap.replace(key, oldValues, newValues); |
| 95 | } | 93 | } |
| 96 | 94 | ||
| 97 | - boolean unregister(DiscreteResourceId key, List<ContinuousResource> values) { | 95 | + boolean unregister(DiscreteResourceId key, Set<ContinuousResource> values) { |
| 98 | // short-circuit: receiving empty resource is regarded as success | 96 | // short-circuit: receiving empty resource is regarded as success |
| 99 | if (values.isEmpty()) { | 97 | if (values.isEmpty()) { |
| 100 | return true; | 98 | return true; | ... | ... |
| ... | @@ -24,9 +24,8 @@ import org.onosproject.store.service.TransactionalMap; | ... | @@ -24,9 +24,8 @@ import org.onosproject.store.service.TransactionalMap; |
| 24 | import org.slf4j.Logger; | 24 | import org.slf4j.Logger; |
| 25 | import org.slf4j.LoggerFactory; | 25 | import org.slf4j.LoggerFactory; |
| 26 | 26 | ||
| 27 | -import java.util.LinkedHashSet; | ||
| 28 | -import java.util.List; | ||
| 29 | import java.util.Optional; | 27 | import java.util.Optional; |
| 28 | +import java.util.Set; | ||
| 30 | 29 | ||
| 31 | import static org.onosproject.store.resource.impl.ConsistentResourceStore.SERIALIZER; | 30 | import static org.onosproject.store.resource.impl.ConsistentResourceStore.SERIALIZER; |
| 32 | 31 | ||
| ... | @@ -54,13 +53,13 @@ class TransactionalDiscreteResourceSubStore { | ... | @@ -54,13 +53,13 @@ class TransactionalDiscreteResourceSubStore { |
| 54 | return values.lookup(id); | 53 | return values.lookup(id); |
| 55 | } | 54 | } |
| 56 | 55 | ||
| 57 | - boolean register(DiscreteResourceId key, List<DiscreteResource> values) { | 56 | + boolean register(DiscreteResourceId key, Set<DiscreteResource> values) { |
| 58 | // short-circuit: receiving empty resource is regarded as success | 57 | // short-circuit: receiving empty resource is regarded as success |
| 59 | if (values.isEmpty()) { | 58 | if (values.isEmpty()) { |
| 60 | return true; | 59 | return true; |
| 61 | } | 60 | } |
| 62 | 61 | ||
| 63 | - DiscreteResources requested = DiscreteResources.of(new LinkedHashSet<>(values)); | 62 | + DiscreteResources requested = DiscreteResources.of(values); |
| 64 | DiscreteResources oldValues = childMap.putIfAbsent(key, requested); | 63 | DiscreteResources oldValues = childMap.putIfAbsent(key, requested); |
| 65 | if (oldValues == null) { | 64 | if (oldValues == null) { |
| 66 | return true; | 65 | return true; |
| ... | @@ -77,7 +76,7 @@ class TransactionalDiscreteResourceSubStore { | ... | @@ -77,7 +76,7 @@ class TransactionalDiscreteResourceSubStore { |
| 77 | return childMap.replace(key, oldValues, newValues); | 76 | return childMap.replace(key, oldValues, newValues); |
| 78 | } | 77 | } |
| 79 | 78 | ||
| 80 | - boolean unregister(DiscreteResourceId key, List<DiscreteResource> values) { | 79 | + boolean unregister(DiscreteResourceId key, Set<DiscreteResource> values) { |
| 81 | // short-circuit: receiving empty resource is regarded as success | 80 | // short-circuit: receiving empty resource is regarded as success |
| 82 | if (values.isEmpty()) { | 81 | if (values.isEmpty()) { |
| 83 | return true; | 82 | return true; | ... | ... |
| ... | @@ -21,7 +21,6 @@ import org.onosproject.net.resource.DiscreteResourceId; | ... | @@ -21,7 +21,6 @@ import org.onosproject.net.resource.DiscreteResourceId; |
| 21 | import org.onosproject.net.resource.Resources; | 21 | import org.onosproject.net.resource.Resources; |
| 22 | 22 | ||
| 23 | import java.util.LinkedHashSet; | 23 | import java.util.LinkedHashSet; |
| 24 | -import java.util.List; | ||
| 25 | import java.util.Map; | 24 | import java.util.Map; |
| 26 | import java.util.Optional; | 25 | import java.util.Optional; |
| 27 | import java.util.Set; | 26 | import java.util.Set; |
| ... | @@ -75,9 +74,9 @@ final class UnifiedDiscreteResources implements DiscreteResources { | ... | @@ -75,9 +74,9 @@ final class UnifiedDiscreteResources implements DiscreteResources { |
| 75 | } | 74 | } |
| 76 | 75 | ||
| 77 | @Override | 76 | @Override |
| 78 | - public boolean containsAny(List<DiscreteResource> other) { | 77 | + public boolean containsAny(Set<DiscreteResource> other) { |
| 79 | - Map<Boolean, List<DiscreteResource>> partitioned = other.stream() | 78 | + Map<Boolean, Set<DiscreteResource>> partitioned = other.stream() |
| 80 | - .collect(Collectors.partitioningBy(CODECS::isEncodable)); | 79 | + .collect(Collectors.partitioningBy(CODECS::isEncodable, Collectors.toCollection(LinkedHashSet::new))); |
| 81 | return generics.containsAny(partitioned.get(false)) || encodables.containsAny(partitioned.get(true)); | 80 | return generics.containsAny(partitioned.get(false)) || encodables.containsAny(partitioned.get(true)); |
| 82 | } | 81 | } |
| 83 | 82 | ||
| ... | @@ -87,8 +86,8 @@ final class UnifiedDiscreteResources implements DiscreteResources { | ... | @@ -87,8 +86,8 @@ final class UnifiedDiscreteResources implements DiscreteResources { |
| 87 | } | 86 | } |
| 88 | 87 | ||
| 89 | @Override | 88 | @Override |
| 90 | - public DiscreteResources remove(List<DiscreteResource> removed) { | 89 | + public DiscreteResources remove(Set<DiscreteResource> removed) { |
| 91 | - return of(Sets.difference(values(), new LinkedHashSet<>(removed))); | 90 | + return of(Sets.difference(values(), removed)); |
| 92 | } | 91 | } |
| 93 | 92 | ||
| 94 | @Override | 93 | @Override | ... | ... |
-
Please register or login to post a comment