`
fengpeng
  • 浏览: 103106 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个简单的顺序敏感的HashMap

    博客分类:
  • Java
阅读更多
关键字:   java    

HashMap 是无序的.
这段代码是我写的一个可以间接实现有序 HashMap的代码.
写的不好 见笑了
顺便问一下,网上现在有没有更好 更高效的类似的代码?

 

代码
  1. package com.wzj;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.HashMap;   
  5. import java.util.List;   
  6.   
  7. /**  
  8.  * @author fins  build 2006-07-18  
  9.  *  顺序敏感的HashMap  
  10.  *  get(int idx)/remove(int idx) 为按加入hashMap的顺序号(index) 来取得/删除 数据  
  11.  */  
  12. public class IndexHashMap extends HashMap  {   
  13.   
  14.     private static final long serialVersionUID = 1L;   
  15.   
  16.     private List list=new ArrayList();   
  17.        
  18.   
  19.     public Object put(Object key, Object value) {   
  20.         if (!containsKey(key)){   
  21.             list.add(key);   
  22.         }   
  23.         return super.put(key, value);   
  24.     }   
  25.   
  26.        
  27.     public Object get(int idx){   
  28.         return super.get(getKey(idx));   
  29.     }   
  30.     public int getIndex(Object key){   
  31.         return list.indexOf(key);   
  32.     }   
  33.     public Object getKey(int idx){   
  34.         if (idx>=list.size()) return null;   
  35.         return list.get(idx);   
  36.     }   
  37.        
  38.     public void remove(int idx){   
  39.         Object key=getKey(idx);   
  40.         removeFromList(getIndex(key));   
  41.         super.remove(key);   
  42.     }   
  43.        
  44.     public Object remove(Object key) {   
  45.         removeFromList(getIndex(key));   
  46.         return super.remove(key);   
  47.     }   
  48.        
  49.     public void clear() {   
  50.         this.list = new ArrayList();   
  51.         super.clear();   
  52.     }   
  53.     private void removeFromList(int idx){   
  54.         if (idx<list.size() && idx>=0) {   
  55.             list.remove(idx);   
  56.         }   
  57.     }   
  58.   
  59. }   
分享到:
评论

相关推荐

    一个简单的Java商品管理系统

    在本项目"一个简单的Java商品管理系统"中,我们探索了一个基于Java编程语言实现的基础商品管理系统的构建过程。这个系统可能是为了教学目的而设计的,它为初学者提供了一个实际操作的平台,帮助他们理解Java的核心...

    java 中 TreeMap排序

    a) 对于简单的排序,如数字和英文字母,我们可以创建一个新的`Comparator`,重写`compare()`方法。在这个例子中,比较两个对象(假设它们都是`String`类型)时,使用`String.valueOf(o1).compareTo(String.valueOf...

    2016 Java 基础 面试题

    单例模式确保一个类只有一个实例,并提供一个全局访问点。例如: ```java public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if...

    计算机类面试试题大奉献

    当一个结构被赋值时,其整个内容会被复制,因此改变一个副本不会影响到原始值。这使得结构适合于小的、简单的数据类型,而类更适合于复杂的、可能需要共享的对象。 ### 2. 线程的概念与特点 线程是操作系统能够...

    阿里Java最新版面试集锦

    CAP原则是指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partition tolerance(分区容错性)三个要素最多只能同时实现两点,不可能三者兼顾。 1. **一致性**:所有节点在同一时刻拥有同样...

    os.rar_java os_页面置换_页面置换界面_页面置换算法

    5. **Clock(时钟)**:包括简单时钟和改进的CLOCK算法,它们使用一个标志位记录页面是否被访问过,通过遍历页面链表进行淘汰。CLOCK算法简单且高效,但可能会误淘汰未被修改的页面。 在Java中实现这些算法,可以...

    C# .Net经典面试题

    - **同步**:程序的执行顺序与调用顺序一致,一个操作完成后才能继续下一个操作。 - **异步**:程序的执行与调用顺序分离,允许在等待某个操作完成的同时执行其他任务。 - **区别**: - 同步操作可能会导致阻塞,而...

    中科软JAVA面试题

    多态允许一个接口调用不同的实现,提高代码的灵活性和扩展性。 【Servlet生命周期】 Servlet的生命周期包括加载和实例化、初始化、服务、销毁四个阶段。Servlet和CGI的主要区别在于,Servlet是基于Java的持久化...

    2021-2022计算机二级等级考试试题及答案No.3899.docx

    - **详细解析**:Model1架构是一种简单的Web应用模型,在这种架构下,所有的控制器逻辑都放在一个JSP页面中,通过`&lt;jsp:forward&gt;`标签可以将请求转发到另一个JSP页面继续处理。 ### 知识点19:远程登录服务 - **...

    Apress的《Java Collections》

    HashMap则是一种基于哈希表的键值对存储结构,提供快速的插入、删除和查找操作。 接着,书中会详细探讨Collections API中的方法,如add、remove、contains、sort等,以及如何使用这些方法进行集合的创建、修改和...

    一个java正则表达式工具类源代码.zip(内含Regexp.java文件)

    以前写了一个java的正规表达式的java工具类,分享一下,有用到的欢迎下载使用。 如果你有常用的定义好的,且测试通过的正规表达式,欢迎跟贴,也让我享用一下 . 类中用到了 jakarta-oro-2.0.jar 包,请大家自己在 ...

    GesturePwd:手势密码的九宫格

    GesturePwd项目就是实现这种功能的一个Java实现,适用于Android平台。在这个项目中,用户可以设置自己的手势密码,系统会记录并验证这个手势路径。 1. **九宫格原理** 九宫格手势密码的界面由9个点组成一个3x3的...

    达内Java技术之高频面试题3.0(1).docx

    2. **快速排序(Quick Sort)**:快速排序采用分治策略,选取一个基准值,将数组分为小于基准值和大于基准值的两部分,分别对这两部分进行快速排序,最后合并结果。 3. **归并排序(Merge Sort)**:归并排序同样...

    Java 基础核心总结 +经典算法大全.rar

    类的初始化 成员初始化 构造器初始化初始化顺序 数组初始化 对象的销毁 对象作用域 this 和 super 访问控制权限继承 多态组合代理 向上转型static final 接口和抽象类接口 抽象类异常 认 识 Exception 什么是 ...

    java笔试面试题集必备.doc

    9. **冒泡排序**:冒泡排序是一种简单的排序算法,通过比较相邻元素并交换位置,逐步将最大元素“冒泡”到数组末尾。 10. **线程安全**:线程安全意味着多个线程访问同一资源时,不会导致数据不一致。可采用...

    java面试试题

    - **String 类的理解:** String 类在 Java 中是不可变的对象,意味着一旦创建了一个 String 对象,它的值就不能被改变。因此,频繁修改字符串内容时使用 StringBuilder 或 StringBuffer 更为高效。 - **字符串...

    java面试知识

    HashMap允许一个null键和任意数量的null值。 - **性能**:一般情况下,HashMap比Hashtable性能更好。 ##### 九大隐式对象 - **page**:代表当前页面的范围。 - **pageContext**:表示当前页面上下文,可以访问当前...

    最新Java面试题

    - **`Strings=new String("xyz")`创建几个`String Object`**:创建了一个`String`对象和一个字符串字面量。 - **`Strings="a"+"b"+"c"+"d"`创建了多少个对象**:根据JDK版本的不同,可能创建1个或4个对象。 - **`...

Global site tag (gtag.js) - Google Analytics