`
endual
  • 浏览: 3544807 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java 的map数组实现

    博客分类:
  • java
 
阅读更多

 

有天在网上看到过一个面试的问题,java的Map,是怎么实现的,

当然,类似我们这样的菜鸟,肯定只会回答Hash表吧,虽然没看过代码的实现,但是

光是从HashMap不就能看出来啊,那老师又问,请问还可以用什么方法现实,

那人回答说用数组,我印象中,那个老师好像说的不行,今天在书中看到了用数组实现MAP,

写了代码分享心得简单实现而已:

 

 

 

package endual.job;

public class ArrayDictionary<K,V> {

	private class Entry<S,T> {
		private S key ;
		private T value ;
		public S getKey() {
			return key;
		}
		public void setKey(S key) {
			this.key = key;
		}
		public T getValue() {
			return value;
		}
		public void setValue(T value) {
			this.value = value;
		}
		
	}
	
	private Entry<K,V>[] dict ;
	private int currentSize ;
	private final static int DEAFULT_CAPACITY = 25 ;
	
	
	public ArrayDictionary() {
		
		this.dict = new Entry[DEAFULT_CAPACITY] ;
		this.currentSize = 0 ;
		
	}
	
	
	public void add(K k, V v) {
		
		Entry<K,V> entry = new Entry<K,V>() ;
		entry.setKey(k) ;
		entry.setValue(v) ;
		
		for (int i=0; i<this.currentSize;i++) {
		
			Entry<K,V> e = dict[i] ;
			K key = e.getKey() ;
			if (key == k) { // 如果存在,那么覆盖原来的值
				dict[i] = entry ;
				//break ;
				return ;
			}
		   
		}
		
		//如果是不存在呢,那就添加一个
		this.dict[this.currentSize] = entry ;
		this.currentSize++ ;
		
	}
	
	public V get(K k) {
		V v = null ;
		for (int i=0; i<this.currentSize; i++) {
			Entry<K,V> e = dict[i] ;
			K key = e.getKey() ;
			if (key == k) { // 如果存在,那么覆盖原来的值
				v = dict[i].getValue() ;
				break ;
				
			}
		}
		
		return v ;
		
	}
	
}

 

 

 

   测试:

 

package endual.job;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		ArrayDictionary< String, Integer> ad = new ArrayDictionary<String, Integer>() ;
		ad.add("1", 1) ;
		ad.add("2", 2) ;
		
		Integer i1 = ad.get("1") ;
		Integer i2 = ad.get("2") ;
		Integer i3 = ad.get("3") ;
		
		System.out.println(i1);
		System.out.println(i2);
		System.out.println(i3);
		
	}

}

 

 运行结果:

 

1
2
null
分享到:
评论

相关推荐

    Java二维数组实现简单Map

    这篇博客文章(链接已省略)可能介绍了如何通过二维数组实现这个概念。 首先,我们需要理解二维数组的基本概念。在Java中,二维数组本质上是一个数组的数组,它由多个一维数组组成,形成一个矩阵。我们可以将其视为...

    Java map存放数组并取出值代码详解

    Java map存放数组并取出值代码详解可以使用不同的方法来实现,包括使用map.keySet()方法和map.entrySet()方法。同时,也可以将map转化为ArrayList,然后使用Collections.sort()方法来对ArrayList进行排序。

    Java用数组和链表的方式简单实现HashMap的增删改功能 数组和链表.pdf

    在Java中,HashMap的实现方式有多种,本文将介绍使用数组和链表的方式简单实现HashMap的增删改功能。 HashMap的数据结构 HashMap的数据结构主要由三个部分组成:数组、链表和红黑树。数组用于存储键值对,链表用于...

    java list,set,map,数组间的相互转换详解

    在Java编程语言中,数据结构之间转换是常见的需求,尤其是集合框架中的List、Set和Map以及数组。本文将深入探讨这些数据结构之间的转换方法,并提供相关的实例代码。 1. **List转Set** 要将一个List转换为Set,...

    Java组装json和java解析json数组

    附件内容为:Java组装map数据,然后转换为json数据格式;Java解析json数据

    数组和集合

    例如,ArrayList底层基于数组实现,适合随机访问,但在大量数据的中间插入和删除操作性能较差;而LinkedList基于双向链表实现,在列表中间插入和删除操作性能较好,但随机访问性能差。在多线程环境下使用集合时,...

    java函数数组A(18)个.zip

    这里我们将深入探讨Java中如何实现和使用函数数组。 1. **接口与函数式接口** Java 8引入了函数式接口的概念,它们是只有一个抽象方法的接口,可以被用作Lambda表达式的类型。例如,`Runnable`、`Callable` 和 `...

    java 遍历Map及Map转化为二维数组的实例

    "java 遍历Map及Map转化为二维数组的实例" 在 Java 编程语言中,遍历 Map 及将其转化为二维数组是一种常见的操作。本文将详细介绍如何使用 Java 遍历 Map 及将其转化为二维数组,并提供实例代码以供参考。 1. 使用...

    Java 集合与数组

    ArrayList、HashSet 和 TreeSet 是 Java 中常用的集合实现类。ArrayList 是一个动态数组,HashSet 是一个不允许重复元素的集合,TreeSet 是一个有序的集合。 数组 数组是一种基本的数据结构,用于存储一组相同类型...

    Java Map 集合类简介

    特别是ArrayList,基于动态数组实现,提供高效的随机访问;而Vector则是线程安全的,但在多线程环境下性能较低,因为每次操作都需要同步。 然而,Map提供了一种更为通用的数据存储方式。它不按照数值索引存储元素,...

    用动态数组实现的大数阶乘

    在编程领域,大数阶乘是一项挑战性的任务,...总的来说,用动态数组实现大数阶乘涉及了动态内存管理、大数表示、大数乘法和进位处理等多个核心知识点。这样的实现方式既灵活又高效,能够有效地处理大整数的阶乘计算。

    对于java map类排序

    总结来说,Java中的`Map`接口不能直接排序,但可以通过使用`SortedMap`接口的实现如`TreeMap`来实现排序。`TreeMap`可以根据键的自然顺序或提供的比较器对键进行排序。在给定的代码中,通过`mapSortByKey`方法实现了...

    Java中对象数组的使用方法详解

    "Java中对象数组的使用方法详解" Java中对象数组的使用方法详解是Java编程语言中一个非常重要的概念。对象数组是指以类为数据类型的数组变量,这个数组变量可以存放多个对象。Java中对象数组的使用方法可以分为四...

    java 课件 数组、枚举及注解

    在Java编程语言中,数组、枚举和注解是三个重要的概念。数组是存储固定数量相同类型元素的数据结构,而枚举则是一种特殊的类,用于定义有限的常量集合。注解则是元数据的一种形式,提供了在代码中添加元信息的能力。...

    Java数组与集合

    Java中的数组和集合是两种重要的数据结构,它们在存储和管理数据方面发挥着关键作用。数组是最基础的数据结构,而集合则提供了更高级、更灵活的处理方式。 数组在Java中是一个固定大小的序列,用来存储同一类型的...

    java实现的map排序

    Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...

    JavaMap.rar_arraylist map_collection_java map_javamap_地图 java

    在Java中,"javamap"和"地图_java"可能是指使用Map类来模拟现实世界中的地理地图,例如通过键表示地理位置,值表示该地点的信息。这涉及到自定义类作为键值对中的元素类型,以及如何设计键值对以适应特定需求的问题...

    详解Java中数组判断元素存在几种方式比较

    Java 中数组判断元素存在的四种方式分别是通过将数组转换成 List,然后使用 List 中的 contains 进行判断、使用 Set 进行实现判断是否存在、使用循环来实现、使用 org.apache.commons.lang3.ArrayUtils 中的 ...

    list,set,map,数组间的相互转换

    根据提供的标题、描述、标签及部分内容,我们可以详细探讨在Java中如何实现`List`、`Set`、`Map`以及数组之间的相互转换。这是一项在实际编程中非常实用且常见的需求,尤其对于处理数据结构变换时极为重要。 ### 1....

    Java中动态地改变数组长度及数组转Map的代码实例分享

    本文将介绍如何在Java中实现动态改变数组长度以及如何将数组转换为Map。 首先,让我们探讨如何动态地改变数组长度。在Java中,一旦数组被创建,它的大小是固定的,不能直接增加或减少。但是,我们可以创建一个新的...

Global site tag (gtag.js) - Google Analytics