40 lines
1.1 KiB
Plaintext
40 lines
1.1 KiB
Plaintext
== Why is this an issue?
|
|
|
|
The time complexity of method calls on collections is not always obvious. For instance, for most collections the ``++size()++`` method takes constant time, but the time required to execute ``++ConcurrentLinkedQueue.size()++`` is O(n), i.e. directly proportional to the number of elements in the collection. When the collection is large, this could therefore be an expensive operation.
|
|
|
|
|
|
This rule raises an issue when the following O(n) methods are called outside of constructors on class fields:
|
|
|
|
* ``++ArrayList++``
|
|
** ``++contains++``
|
|
** ``++remove++``
|
|
* ``++LinkedList++``
|
|
** ``++get++``
|
|
** ``++contains++``
|
|
* ``++ConcurrentLinkedQueue++``
|
|
** ``++size++``
|
|
** ``++contains++``
|
|
* ``++ConcurrentLinkedDeque++``
|
|
** ``++size++``
|
|
** ``++contains++``
|
|
* ``++CopyOnWriteArrayList++``
|
|
** ``++add++``
|
|
** ``++contains++``
|
|
** ``++remove++``
|
|
* ``++CopyOnWriteArraySet++``
|
|
** ``++add++``
|
|
** ``++contains++``
|
|
** ``++remove++``
|
|
|
|
|
|
=== Noncompliant code example
|
|
|
|
[source,text]
|
|
----
|
|
ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue();
|
|
//...
|
|
log.info("Queue contains " + queue.size() + " elements"); // Noncompliant
|
|
----
|
|
|
|
|