package cn. ziqirj. common. utils ; import lombok. Getter ;
import lombok. Setter ; import java. util. ArrayList ;
import java. util. List ;
public class CustomOrderlyMap < T > { @Getter private List < String > keys = new ArrayList < > ( ) ; @Getter private List < T > values = new ArrayList < > ( ) ; private List < map< T > > kv = new ArrayList < > ( ) ; public CustomOrderlyMap ( ) { } public void add ( String key, T value) { Integer index = getIndex ( key) ; if ( null != index && index != - 1 ) { values. set ( index, value) ; kv. get ( index) . setValue ( value) ; return ; } keys. add ( key) ; values. add ( value) ; kv. add ( new map< T > ( key, value) ) ; } public void addAll ( CustomOrderlyMap < T > customMap) { if ( null == customMap || customMap. size ( ) == 0 ) { return ; } List < map< T > > kvl = customMap. kv; for ( map< T > map : kvl) { this . add ( map. getKey ( ) , map. getValue ( ) ) ; } } public void remove ( String key) { Integer index = getIndex ( key) ; if ( null == index || index == - 1 ) { return ; } keys. remove ( index) ; values. remove ( index) ; kv. remove ( index) ; } public void remove ( T obj) { Integer index = getIndex ( obj) ; if ( null == index || index == - 1 ) { return ; } keys. remove ( index) ; values. remove ( index) ; kv. remove ( index) ; } public void removeAll ( ) { this . keys = new ArrayList < > ( ) ; this . values = new ArrayList < > ( ) ; this . kv = new ArrayList < > ( ) ; } public void close ( ) { this . keys. clear ( ) ; this . values. clear ( ) ; this . kv. clear ( ) ; } public void set ( String key, T value) { Integer index = getIndex ( key) ; if ( null == index || index. intValue ( ) == - 1 ) return ; values. set ( index, value) ; kv. get ( index) . setValue ( value) ; } public T get ( String key) { Integer index = getIndex ( key) ; if ( null == index || index == - 1 ) return null ; return kv. get ( index) . getValue ( ) ; } public Integer size ( ) { return this . kv. size ( ) ; } public boolean isEmpty ( ) { return this . kv. isEmpty ( ) ; } public void print ( ) { if ( isEmpty ( ) ) { System . out. println ( "null" ) ; } System . out. print ( "CustomMap : [" ) ; for ( map< T > m : this . kv) { System . out. print ( m. toString ( ) ) ; } System . out. println ( "]" ) ; } private Integer getIndex ( String key) { int length = this . keys. size ( ) ; if ( length == 0 ) { return - 1 ; } for ( int i = 0 ; i < length; i++ ) { if ( key. equals ( keys. get ( i) ) ) { return i; } } return null ; } private Integer getIndex ( T t) { int length = this . values. size ( ) ; if ( length == 0 ) { return - 1 ; } for ( int i = 0 ; i < length; i++ ) { if ( t. equals ( values. get ( i) ) ) { return i; } } return null ; } } @Setter
@Getter
class map< T > { private String key; private T value; public map ( String key, T value) { super ( ) ; this . key = key; this . value = value; } @Override public String toString ( ) { return "[K:" + key + " --> V:" + value + "]" ; } }