Description
This ticket proposes to introduce a public interface that imposes a total ordering over the keys of a (ReadOnly)StringMap. This interface views all key-value pairs as a sequence ordered by key, and allows keys and values to be accessed by their index in the sequence.
interface IndexedReadOnlyStringMap extends ReadOnlyStringMap { String getKeyAt(final int index); <V> V getValueAt(final int index); int indexOfKey(final String key); } interface IndexedStringMap extends IndexedReadOnlyStringMap, StringMap {}
The intention is to let SortedArrayStringMap implement these interfaces. (It already implements the necessary methods; the visibility of these methods will change from package-protected to public.)
These interfaces help reduce log4j's dependency on the JDK Map interface: the JDK Map interface does not provide a garbage-free way to iterate over all its keys or key-value pairs.
For example, these interfaces can be used to make MapFilter and its subclasses garbage-free, and reduce allocation of temporary objects in MapMessage and subclasses.
Attachments
Issue Links
- is depended upon by
-
LOG4J2-1683 (GC) Avoid allocating temporary objects in MapMessage
- Resolved
-
LOG4J2-1677 (GC) Avoid allocating temporary objects in MapFilter
- Closed
-
LOG4J2-1678 (GC) Avoid allocating temporary objects in ThreadContextMapFilter
- Closed
-
LOG4J2-1679 (GC) Avoid allocating temporary objects in StructuredDataFilter
- Closed
- supercedes
-
LOG4J2-1447 Garbage-free data structure for LogEvent's context map data
- Closed