当前位置: 首页> 财经> 金融 > 百度竞价推广屏蔽软件_婚纱摄影店排名前十名_app运营_惠州seo代理商

百度竞价推广屏蔽软件_婚纱摄影店排名前十名_app运营_惠州seo代理商

时间:2025/7/12 5:08:14来源:https://blog.csdn.net/catoop/article/details/142960656 浏览次数:0次
百度竞价推广屏蔽软件_婚纱摄影店排名前十名_app运营_惠州seo代理商

Java 没有内置有序的 Map,有的业务场景我们希望我们的Map,保持们存入数据的顺序。可以在后续提取元素时,简单的提取 第一个元素、最后一个元素、指定key的上一个、指定key的下一个 等等,满足 Map + LinkedList 的同时特性,本文封装了一个 OrderedMap 类,需要的可以参考使用。


import java.util.AbstractMap;
import java.util.AbstractSet;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;/*** 有序Map** @author 单红宇* @since 2024-10-15 17:19:11*/
@SuppressWarnings("all")
public class OrderedMap<K, V> {/*** map*/private final Map<K, V> map;/*** orderList*/private final LinkedList<K> orderList;/*** OrderedMap*/public OrderedMap() {this.map = new HashMap<>();this.orderList = new LinkedList<>();}/*** put** @param key   key* @param value value* @return V*/public V put(K key, V value) {V oldValue = map.put(key, value);if (oldValue == null) {orderList.addLast(key);}return oldValue;}/*** get** @param key key* @return V*/public V get(Object key) {return map.get(key);}/*** remove** @param key key* @return V*/public V remove(Object key) {V value = map.remove(key);if (value != null) {orderList.remove(key);}return value;}/*** containsKey** @param key key* @return data*/public boolean containsKey(Object key) {return map.containsKey(key);}/*** size** @return data*/public int size() {return map.size();}/*** isEmpty** @return data*/public boolean isEmpty() {return map.isEmpty();}/*** firstEntry** @return Entry*/public Map.Entry<K, V> firstEntry() {return this.getFirstEntry();}/*** getFirstEntry** @return Entry*/public Map.Entry<K, V> getFirstEntry() {if (orderList.isEmpty()) {return null;}K firstKey = orderList.getFirst();return new AbstractMap.SimpleEntry<>(firstKey, map.get(firstKey));}/*** lastEntry** @return Entry*/public Map.Entry<K, V> lastEntry() {return this.getLastEntry();}/*** getLastEntry** @return Entry*/public Map.Entry<K, V> getLastEntry() {if (orderList.isEmpty()) {return null;}K lastKey = orderList.getLast();return new AbstractMap.SimpleEntry<>(lastKey, map.get(lastKey));}/*** getEntryAt** @param index index* @return Entry*/public Map.Entry<K, V> getEntryAt(int index) {if (index < 0 || index >= orderList.size()) {throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + orderList.size());}K key = orderList.get(index);return new AbstractMap.SimpleEntry<>(key, map.get(key));}/*** keySet** @return Set*/public Set<K> keySet() {return new LinkedKeySet();}/*** entrySet** @return Set*/public Set<Map.Entry<K, V>> entrySet() {return new LinkedEntrySet();}/*** putAll** @param m m*/public void putAll(OrderedMap<? extends K, ? extends V> m) {for (Map.Entry<? extends K, ? extends V> entry : m.entrySet()) {put(entry.getKey(), entry.getValue());}}/*** nextKey** @param key key* @return K*/public K nextKey(K key) {int index = orderList.indexOf(key);if (index < 0 || index + 1 >= orderList.size()) {return null;}return orderList.get(index + 1);}/*** previousKey** @param key key* @return K*/public K previousKey(K key) {int index = orderList.indexOf(key);if (index <= 0) {return null;}return orderList.get(index - 1);}/*** lastKey** @return K*/public K lastKey() {return this.lastEntry().getKey();}/*** firstKey** @return K*/public K firstKey() {return this.firstEntry().getKey();}@Overridepublic String toString() {Iterator<Map.Entry<K,V>> i = entrySet().iterator();if (! i.hasNext())return "{}";StringBuilder sb = new StringBuilder();sb.append('{');for (;;) {Map.Entry<K,V> e = i.next();K key = e.getKey();V value = e.getValue();sb.append(key   == this ? "(this Map)" : key);sb.append('=');sb.append(value == this ? "(this Map)" : value);if (! i.hasNext())return sb.append('}').toString();sb.append(',').append(' ');}}/*** LinkedKeySet** @author 单红宇* @since 2024-10-15 17:19:25*/private class LinkedKeySet extends AbstractSet<K> {@Overridepublic Iterator<K> iterator() {return orderList.iterator();}@Overridepublic int size() {return orderList.size();}@Overridepublic boolean contains(Object o) {return map.containsKey(o);}@Overridepublic boolean remove(Object o) {if (map.remove(o) != null) {orderList.remove(o);return true;}return false;}}/*** LinkedEntrySet** @author 单红宇* @since 2024-10-15 17:19:25*/private class LinkedEntrySet extends AbstractSet<Map.Entry<K, V>> {@Overridepublic Iterator<Map.Entry<K, V>> iterator() {return new Iterator<Map.Entry<K, V>>() {private final Iterator<K> keyIterator = orderList.iterator();@Overridepublic boolean hasNext() {return keyIterator.hasNext();}@Overridepublic Map.Entry<K, V> next() {K key = keyIterator.next();return new AbstractMap.SimpleEntry<>(key, map.get(key));}@Overridepublic void remove() {K key = keyIterator.next();map.remove(key);keyIterator.remove();}};}@Overridepublic int size() {return map.size();}}}

(END)

关键字:百度竞价推广屏蔽软件_婚纱摄影店排名前十名_app运营_惠州seo代理商

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: