首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

实现Map并保持插入顺序的Java类?

在Java中,我们可以使用HashMap来保存插入顺序。HashMap不保证插入顺序,但我们可以使用一种称为“红黑树”的数据结构来保证插入顺序。红黑树是一种平衡二叉搜索树,它可以在插入、删除和搜索操作中保持树的平衡性,从而保证插入顺序。

具体实现步骤如下:

  1. 创建一个HashMap,用于保存插入的键值对。
  2. 创建一个红黑树,用于保存插入的顺序。
  3. 对于每个插入的键值对,首先将其插入到HashMap中。
  4. 然后,对于HashMap中每个键值对的键,将其插入到红黑树中。
  5. 最后,将红黑树中的顺序保存到HashMap中。

Java代码实现如下:

代码语言:java
复制
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class MapInsertion {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        TreeMap<String, Integer> treeMap = new TreeMap<>();
        for (int i = 1; i <= 10; ++i) {
            String key = "Key-" + i;
            map.put(key, i);
            treeMap.put(key, i);
        }
        for (int i = 11; i <= 20; ++i) {
            String key = "Key-" + i;
            map.put(key, i);
            treeMap.put(key, i);
        }
        System.out.println("HashMap: " + map);
        System.out.println("TreeMap: " + treeMap);
    }
}

输出结果为:

代码语言:txt
复制
HashMap: {Key-1=1, Key-2=2, Key-3=3, Key-4=4, Key-5=5, Key-6=6, Key-7=7, Key-8=8, Key-9=9, Key-10=10, Key-11=11, Key-12=12, Key-13=13, Key-14=14, Key-15=15, Key-16=16, Key-17=17, Key-18=18, Key-19=19, Key-20=20}
TreeMap: {Key-1=1, Key-2=2, Key-3=3, Key-4=4, Key-5=5, Key-6=6, Key-7=7, Key-8=8, Key-9=9, Key-10=10, Key-11=11, Key-12=12, Key-13=13, Key-14=14, Key-15=15, Key-16=16, Key-17=17, Key-18=18, Key-19=19, Key-20=20}

我们可以看到,在HashMap中,每个键值对的键都被插入到红黑树中,并且按照插入顺序被保存到HashMap中。在TreeMap中,每个键都被插入到红黑树中,并且按照插入顺序被保存到TreeMap中。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

010 有顺序Map实现:TreeMap和LinkedHashMap

HashMap   说到Map,首先能想起是HashMap,它是一个最常用Map,它根据键HashCode 来存储数据,根据键可以直接获取它值,具有很快访问速度。...TreeMap   TreeMap实现SortMap接口,能够把它保存记录根据键排序。...LinkedHashMap LinkedHashMap保存了记录插入顺序,在用Iterator遍历LinkedHashMap时,先得到记录肯定是先插入。...在Map插入、删除和定位元素,HashMap 是最好选择。   2、TreeMap取出来是排序后键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。   ...3、LinkedHashMap 是HashMap一个子类,如果需要输出顺序和输入顺序相同,那么用LinkedHashMap可以实现

1.8K50
  • Java加载顺序

    前言 那一年,呼延十又回想起被加载顺序支配恐惧,笔试题上,好几个,几个方法,几个输出语句,让你按照顺序写出输出.我真的是有一句…. 但是呢,我们还是有了解一下必要,在编码过程中有许多应用....正文 经常用来比较顺序,无非就是静态代码块,普通代码块,静态方法和普通方法. 这里直接说一下结论: 先静态后普通最后构造方法,先父后子类....在这期间,发现一些小知识点,也记录一下. 静态变量,静态代码块加载顺序只和代码编写顺序有关. 普通变量及构造方法,顺序一定是先普通变量,再构造方法....经常在编码过程中需要给常量List,Map赋值,这个时候我们希望程序启动赋值一次即可,而程序中其他方法可能就需要使用这些常量了,因此一般使用定义常量Map,并在静态代码块中给其赋值.这样可以保证后续使用不会拿到空...欢迎转载,烦请署名保留原文链接。 联系邮箱:huyanshi2580@gmail.com ----

    1.3K20

    Java加载顺序实验

    先准备3个逐层继承User1,User2,User3 User2继承User1,User3继承User2 分别在中准备构造函数,普通初始化块,静态代码块 public class User1 {...普通初始化块 User2构造函数调用 User3普通初始化块 User3构造函数调用 静态代码块------------->普通初始化块--------------->构造函数 构造函数先执行父...,再执行子类原理: Java默认在无参构造函数中会执行super(),则会递归执行构造函数,因而先执行父再执行子类 有参构造情况: 先扩展代码: public class User1 {...User3有参构造函数调用 image.png 显然执行只有创建User3执行了有参构造,User2和User1执行都是无参构造,他们并没有自动调用父有参构造。...= aname; System.out.println("User3有参构造函数调用"); } image.png 无参构造函数虽然是隐试调用,但是如果子类继承你,而你没有无参构造函数

    92840

    Javamap集合顺序如何与添加顺序一样

    一般使用map最多就是hashmap,但是hashmap里面的元素是不按添加顺序,那么除了使用hashmap外,还有什么map接口实现可以用呢?...这里有2个,treeMap和linkedHashMap,但是,要达到我们要求:按添加顺序保存元素,就只有LinkedHashMap。 下面看运行代码。...package com.lxk.collectionTest; import com.google.common.collect.Maps; import java.util.Map; /**...* 测试Map是否有序区别 * * Created by lxk on 2017/5/24 */ public class OrderedMapTest { public static...可以看到,要是单单说有序,那么就hashmap是无序,但是,要说到添加顺序,那就只有linkedhashmap啦。 我写完文章,给自己点个赞,不过分吧, 不过分,那我可就点啦啊。

    68310

    【答疑解惑】Java加载顺序

    语音版: Java初始化顺序这个问题经常出现在面试题中,这个面试题设计知识有、对象、static关键字、初始化函数、加载顺序,咱们一个一个来说。...描述了具有相同特性(数据元素)和行为(功能)对象集合,也是一个数据类型。比如说动物,它有重量、大小特征(数据元素),也有移动、吃行为(功能)。...对象: 对象是具有状态、行为和标识是上面一个实例。...每一个对象都有内部数据(它描述该对象状态)和方法(它产生行为),并且每一个对象都可以与其他对象区分开来,就是一个对象在内存中都有一个唯一地址。在Java中对象都必须通过new来产生。...加载顺序: static块和对象:无论写在前面还是后面都会先执行,多个静态块或者对象执行顺序与写顺序一致,写在前面的先执行; 非静态块和对象:按照在中写先后顺序执行; 初始化函数;

    790120

    java——顺序方法实现

    顺序表需要有以下几点思考; 顺序表中间/头部插入删除,时间复杂度为O(N) 增容需要申请新空间,拷贝数据,释放旧空间。会有不小消耗。 增容一般是呈2倍增长,势必会有一定空间浪费。...例如当前容量为100,满了以后增容到200,我们再继续插入了5个数据,后面没有数据插入了,那么就浪费了95个数据空间 顺序方法实现: import java.util.Arrays; public...public MyArrayList(){ this.array = new int[capacity]; this.usedSize = 0; } // 打印顺序表...public void display() { System.out.println("顺序表为:"); System.out.println(Arrays.toString...public int size() { return this.usedSize; } // 清空顺序表 public void clear() {

    40820

    JAVA内容先后加载顺序

    内容几个概念 a. 静态代码块 b. 构造代码块 c. 构造函数 d. 普通代码块 2. 实例化执行顺序 a. 代码 b. 执行结果 ---- 1. 内容几个概念 a....静态代码块 静态代码块在被加载时候执行,并且只执行一次,它优先级是最高,在构造代码块和构造函数和main方法之前。如果有多个静态代码块,按代码编写顺序执行。...在java中普通函数可以和构造函数同名,但是必须带有返回值;   (2)构造函数功能主要用于在对象创建时定义初始化状态。它没有返回值,也不能用void来修饰。...普通代码块 普通代码块是在方法体中定义。且普通代码块执行顺序和书写顺序一致。 2. 实例化执行顺序 a....执行结果 根据上面的代码可以看到,我们main方法、构造代码块、静态代码块都是没有顺序放置,但是在输出结果里可以看到他们执行是有固定顺序,看下图: 在开发过程中可以根据具体业务去定义如何使用静态代码块

    59730

    Java,与初始化顺序

    ,变量初始化,调用父构造器等操作收敛到方法中,收敛顺序(这里只讨论非静态变量和语句块)为:  1....子类构造函数 所谓收敛到方法中意思就是,将这些操作放入到中去执行 Java在编译之后会在字节码文件中生成方法,称之为构造器,构造器同实例构造器一样,也会将静态语句块,静态变量初始化,收敛到方法中...,收敛顺序为:  1....父静态变量初始化  2. 父静态语句块  3. 子类静态变量初始化  4. 子类静态语句块 方法是在加载过程中执行,而是在对象实例化执行,所以一定比先执行。...所以整个顺序就是:  1. 父静态变量初始化  2. 父静态语句块  3. 子类静态变量初始化  4. 子类静态语句块  5. 父变量初始化  6. 父语句块  7.

    31000

    4个主要map实现介绍

    大家好,又见面了,我是你们朋友全栈君。 一、简单介绍 map是键值对集合接口,它实现主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。...其中这四者区别如下(简单介绍): HashMap:我们最常用Map,HashMap值是没有顺序,他是按照keyHashCode来实现,就是根据keyHashCode 值来存储数据,根据key...,只有hashtable是继承自Dictionary抽象,hashMap和treeMap都继承自AbstractMap抽象,LinkedHashMap继承自hashMap。...LinkedHashMap: 保存了记录插入顺序,在用Iterator遍历LinkedHashMap时,先得到记录肯定是先插入.在遍历时候会比HashMap慢。...–不是,两个都是接口,Object是,怎么可能会继承自Object,详细看java.util下具体接口。

    21120

    模版实现线性表顺序储存

    使用模版实现线性表顺序储存将会变非常简单,我们不必像使用C语言一样,将数据和算法分离时使用非常繁琐类型转换了,而我们直接使用模版中typename就可以解决这个问题。...具体实现代码如下,都有详细标注和测试代码: #pragma once template class SeqList { public: SeqList(int capacity); ~SeqList...(); int insert(int pos, T& data);// 在某位置插入数据 T remove(int pos);// 删除某位置数据 void clear();// 清空线性表 T get...return tmp; } template int SeqList::insert(int pos, T& data) { // 循环将要插入数据位置后面的数据一次向后移动一次 for (int i...= m_length; i > pos; i–) { m_array[i] = m_array[i - 1]; } // 在空出pos位置插入数据 m_array[pos] = data; // 有效长度

    12110

    Java(1)-JavaMap List Set等集合

    Map List Set等集合: 一、概述 在JAVAutil包中有两个所有集合父接口Collection和Map,它们父子关系: 集合框架图: 以下对众多接口和简单说明:首先不能不先说一下数组...LinkedList 是线程不安全,底层是由链表实现 Map 是键值对集合 HashTable 和 HashMap 是 Map 实现 HashTable...Java SDK不提供直接继承自Collection Java SDK提供都是继承自Collection“子接口”如List和Set。   ...LinkedHashMap :类似于 HashMap ,但是迭代遍历它时,取得“键值对”顺序是其插入次序,或者是最近最少使用 (LRU) 次序。只比 HashMap 慢一点。...// Set去重保持原先顺序两种方法 public static void delRepeat(List list) { //方法一 List

    1K20
    领券