func (l *MapList) Has(key string) bool {
	_, ok := l.keyMp[key]
	return ok
}
Has check whether the key is in the list
package mlist
type Element struct {
	key   string
	value interface{}
	next  *Element
	prev  *Element
}
func (e *Element) clear() {
	e.next = nil
	e.prev = nil
}
type MapList struct {
	head  *Element
	tail  *Element
	keyMp map[string]*Element
}
func NewMapList() *MapList {
	var m MapList
	m.Init()
	return &m
}
func (l *MapList) Init() {
	l.keyMp = make(map[string]*Element)
}
func (l *MapList) Len() int {
	return len(l.keyMp)
}
func (l *MapList) Set(key string, value interface{}) {
	if v, ok := l.keyMp[key]; ok {
		v.value = value
		return
	}
	e := &Element{
		key: key,
	}
	e.value = value
	if l.tail != nil {
		l.tail.next = e
	}
	e.prev = l.tail
	l.tail = e
	if l.head == nil {
		l.head = e
	}
	l.keyMp[key] = e
}
func (l *MapList) Get(key string) (interface{}, bool) {
	if v, ok := l.keyMp[key]; ok {
		return v.value, ok
	}
	return nil, false
}
func (l *MapList) Del(key string) {
	if v, ok := l.keyMp[key]; ok {
		if l.head == v {
			l.head = v.next
		}
		if l.tail == v {
			l.tail = v.prev
		}
		if v.prev != nil {
			v.prev.next = v.next
		}
		if v.next != nil {
			v.next.prev = v.prev
		}
		v.clear()
		delete(l.keyMp, key)
	}
}