在一次面试的过程中,有一个问题“HashMap存放数据是无序的,如何编写程序,使数据先进先出。”当时我没做出来,但是我回来折腾了半天,就写了下面的成序。
首先思考HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,然后在google下,通过改变key的hashCode的值来实现。程序如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author Admini
*/
public class TreeTest extends HashMap {
public static void main(String[] ages) {
TreeTest t = new TreeTest();
t.put(new Key(1), "a");
t.put(new Key(2), "b");
t.put(new Key(3), "c");
t.put(new Key(4), "d");
t.put(new Key(5), "e");
t.put(new Key(6), "f");
t.put(new Key(7), "h");
t.put(new Key(8), "i");
t.put(new Key(2), "y");
Set s = t.keySet();
Iterator f = s.iterator();
while (f.hasNext()) {
Key ts = (Key) f.next();
System.out.println(ts + " = " + t.get(ts));
}
}
}
/**
*创建Key类,作为Map的Key
*/
class Key {
int number = 0;
public Key(int s) {
number = s;
}
public int hashCode() {
return number;
}
public boolean equals(Object o) {
return (o instanceof Key) && (number == ((Key) o).number);
}
public String toString() {
return String.valueOf(number);
}
}
通过创建new Key(Integer t)作为Map中的key,key的hashCode是Key类的的构造方法number指定。但是这种方式还是有它的限制,是不是有更好的方法实现呢?还有TreeMap是可以达到先进先出的.
分享到:
相关推荐
在Java编程中,Map接口是用于存储键值对的数据结构,而Java提供了多种Map的实现,包括TreeMap、HashMap和ConcurrentSkipListMap。本文主要比较了这三种Map的性能,尤其是在插入和查找操作上的效率。 1. **TreeMap**...
HashMap和TreeMap是Java中两种常用的Map实现,它们各自具有不同的特性和使用场景。 HashMap是基于哈希表实现的,其核心思想是通过键对象的hashCode()方法来快速定位到对应的桶(bucket),从而提高查找效率。...
在Java编程语言中,集合框架提供了多种数据结构来存储和操作数据,其中`TreeMap`、`TreeSet`、`HashSet`以及`HashMap`是最常用的数据结构之一。这些集合类各自有着独特的特性和应用场景,下面将对它们进行详细介绍。...
- **性能**:尽管`TreeMap`提供排序功能,但它的时间复杂度通常是O(log n),因此在某些情况下可能比`HashMap`和`LinkedHashMap`慢。 #### 4. HashTable `HashTable`是一种古老的`Map`实现,它的设计是为了确保线程...
其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和用途。本文将对这四种 Map 实现类进行比较和分析。 HashMap HashMap 是 Java 中最常用的 Map 实现类,它根据键的 ...
在 Java 中,HashMap、LinkedHashMap、TreeMap 都实现了 Map 接口,都是 Map 的子类,每个子类都有其特点和使用场景。 HashMap HashMap 是最常用的 Map 实现类,它根据键的哈希码值存储数据,能够快速地存储和获取...
在Java编程语言中,`HashMap`、`TreeMap`和`LinkedHashMap`都是`java.util.Map`接口的实现,它们提供了不同的数据存储和访问策略。本文将深入探讨这三种数据结构的特点、工作原理以及适用场景。 1. **HashMap** `...
了解Map的整体结构也很重要,HashMap和其他Map实现如LinkedHashMap(保持插入顺序或访问顺序的HashMap)都是从AbstractMap继承,而Hashtable则直接继承Dictionary类,这反映了它们设计上的差异和适用场景的不同。...
Java 中的 HashMap 和 TreeMap 选择指南 在 Java 中,HashMap 和 TreeMap 都是常用的 Map 实现类,但是在实际开发中,选择哪种 Map 实现类往往让人感到迷茫。下面我们将详细介绍 HashMap 和 TreeMap 的特点、优缺点...
Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...
8. **特性和性能**:与HashMap相比,TreeMap的插入和查找速度较慢,但由于其有序性,对于需要保持数据排序的应用来说,TreeMap是一个更好的选择。在内存使用方面,由于需要存储额外的排序信息,TreeMap通常比HashMap...
在给定的内容中,首先展示了一种使用匿名内部类和`Comparator`接口来对`HashMap`进行排序的方法。具体步骤如下: 1. **创建HashMap**:首先创建一个`HashMap`对象,并向其中添加一些键值对。 2. **转换为List**:将...
HashMap是Java编程语言中常用的集合类之一,它属于哈希表数据结构,提供key-value的存储方式,并且具有快速查询的特性。...理解这些方法及其背后的原理,可以帮助我们在编程中更灵活地处理数据结构和排序问题。
在示例代码中,我们创建了三个Map实例:HashMap、Hashtable和TreeMap。HashMap展示了无序的特性,而TreeMap则按顺序打印键值对。Hashtable是HashMap的线程安全版本,但在Java 5之后,推荐使用并发集合如...
这些数据结构用于存储和管理数据,其中HashMap和HashSet是基于哈希表实现的,而TreeMap和TreeSet则是基于红黑树(Red-Black Tree)实现的。在处理元素重复性时,它们有不同的策略和效率。 **HashMap** HashMap是一...
首先,HashMap是基于哈希表的Map接口非同步实现,它允许使用null值和null键,这意味着HashMap在设计时没有考虑多线程环境下的线程安全问题。在单线程环境下,HashMap提供了优秀的性能和访问速度。而如果需要线程安全...
`HashMap`基于哈希表(散列表)实现,提供了快速的插入、删除和查找操作,平均时间复杂度为O(1)。 HashMap的主要特性包括: 1. **非同步**:`HashMap`不是线程安全的,因此在多线程环境下不建议直接使用,可以考虑...
8. **HashMap的遍历方式**:HashMap可以通过`keySet()`、`entrySet()`和`values()`方法分别获取键的集合、键值对的集合和值的集合进行遍历,其中`entrySet()`通常是最高效的遍历方式。 9. **HashMap与HashTable的...