首页 > 技术文章 > LinkedHashMap 在指定元素/索引后面插入元素

ageovb 2021-06-20 15:32 原文

思路是将指定元素/索引后面的元素先用 List 保存,然后将待插入的元素插入到 LinkedHashMap 中,然后先删除指定元素/索引,再进行添加。

指定元素后面插入元素

    /**
     * 在 LinkedHashMap 目标元素后面添加元素
     *
     * @param map LinkedHashMap 对象
     * @param target 目标元素
     * @param key 插入元素的键
     * @param value 插入元素的值
     * @param <K> 键的泛型
     * @param <V> 值的泛型
     */
    public <K, V> void add(Map<K, V> map, K target, K key, V value){
        assert (map != null);
        assert map.containsKey(target);
        assert !map.containsKey(key);

        // 保存目标元素后面的元素
        List<Map.Entry<K, V>> rest = new ArrayList<>();
        for (Map.Entry<K, V> entry : map.entrySet()) {
            if (entry.getKey() != target) {
                rest.add(entry);
            }
        }

        map.put(key, value);
        for (int j = 0; j < rest.size(); j++) {
            Map.Entry<K, V> entry = rest.get(j);
            // 先删除插入元素前面的,再添加到插入元素后面
            map.remove(entry.getKey());
            map.put(entry.getKey(), entry.getValue());
        }
    }

推荐阅读