`
hm4123660
  • 浏览: 282995 次
  • 性别: Icon_minigender_1
  • 来自: 广州
博客专栏
Dea4ce76-f328-3ab2-b24a-fb268e1eeb75
数据结构
浏览量:70146
社区版块
存档分类
最新评论

java集合---Map接口

    博客分类:
  • Java
阅读更多

       Map使用键值对来存储数据,将键映射到值对象,一个映射不能包含重复的键,每一个键最多只能映射到一个值。Map接口的具体实现类:HashMap,Hashtable,TreeMap,LinkedHashMap

 

1)HashMap

    基于哈希表(哈希表学习地址)的Map接口实现。允许使用null值和null键,不保证映射的顺序,特别是不保证顺序恒久不变。它除了非同步和允许使用null外,与Hashtable大致相同。

 

HashMap实现原理:

 

1.HashMap默认数组大小为16,加载因子为0.75,当数组使用量达到数组长度*加载因子时,需要进行扩充。

 

 

2.HashMap是以数组为头,连接链表形成的(要计算key的hashcode值),根据散列值求出对象在哈希表的存储位置,相同位置上的多个数据以链表方式连接,每次先加入的对象放进链表头。

 

 

 

 

示例代码:

public static void main(String[] args){

	     Map<Integer, String>maps=new HashMap<Integer, String>();
	     maps.put(1,"小黑");
	     maps.put(2,"小白");
	     maps.put(null,null);
	     maps.put(10, "老王"); 
	     System.out.println("size: "+maps.size());
	     //根据key获取对象值
	     System.out.println(maps.get(10));
	     //是否存在此键
	     System.out.println(maps.containsKey(2));
	     //是否存在此值
	     System.out.println(maps.containsValue(null));
	     //遍历
	     Set<Entry<Integer,String>>entry=maps.entrySet();
	     Iterator<Entry<Integer,String>>iter=entry.iterator();
	     while(iter.hasNext())
	     {
	    	 System.out.println(iter.next());
	     }
	     //清除map
	     maps.clear();
	
	}

 

HashMap是线程不安全的,非同步的,当需要重新散列时,数组扩大为原来的两倍,将会把所有数据重新进行插入,此时可能会破换原来的顺序,所有HashMap不能保证映射顺序。HaspMap的重新散列会影响性能。

 

2)Hashtable

       此类实现了哈希表,该哈希表将键映射到相对应的值。任何非null都可以用作键或值,为了成功的在哈希表中存储和获取对象,用作键的对象必须实现hashCode方法和equals方法。

 

用法基本和HashMap相同,不过多介绍

 

HashMap和Hashtable的区别

1.HashMap可以使用null作为键或值,Hashtable不可以

2.HashMap是非同步的,线程不安全,而Hashtable是同步的,线程安全

3.Hashtable的默认容量为11,而HashM的默认容量为16。

 

 

3)TreeMap

      基于红黑树显示的,该映射根据其键的自然排序进行排序,或者根据创建映射时提供的Comparator进行排序。所以,TreeMap使用自定义类作为key时要实现Comparable接口。

 

如:

自定义Person类,实现Comparable接口。使用age属性进行排序

public class Person implements Comparable<Person>{

    public String name;
	
	public  int age;
	
	public Person(String name,int age)
	{
		this.name=name;
		this.age=age;
	}
	

	public int compareTo(Person o) {
		if(o==null)
			throw new NullPointerException();
		if(this.age>o.age)
			return 1;
		if(this.age<o.age)
			return -1;
		return 0;
	}


	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}


	
	
}

 

调用代码:

public static void main(String[] args){

	     Map<Integer, String>maps=new TreeMap<Integer, String>();
	     maps.put(1,"小黑");
	     maps.put(2,"小白");
	     maps.put(10, "老王"); 	    
	     //遍历
	     Set<Entry<Integer,String>>entry=maps.entrySet();
	     Iterator<Entry<Integer,String>>iter=entry.iterator();
	     while(iter.hasNext())
	     {
	    	 System.out.println(iter.next());
	     }
	     //清除map
	     maps.clear();
	     
	     //-----------------------------使用自定义Person做key
	     Map<Person, String>map=new TreeMap<Person, String>();
	     map.put(new Person("xiaobai", 20), "xiaobai");
	     map.put(new Person("xiaohei", 18), "xiaohei");
	     map.put(new Person("xiaohong", 30), "xiaohong");
	
	     //遍历
	     Set<Entry<Person,String>>entry1=map.entrySet();
	     Iterator<Entry<Person,String>>iter1=entry1.iterator();
	     while(iter1.hasNext())
	     {
	    	 System.out.println(iter1.next());
	     }
	     //清除map
	     map.clear();
	}

 

运行结果:




 
 

 

  • 大小: 19.5 KB
  • 大小: 5.6 KB
4
0
分享到:
评论

相关推荐

    JSP应用开发-Java集合类-Map接口.pptx

    总的来说,理解并熟练运用Java集合框架中的Map接口及其实现,对于JSP应用开发来说至关重要。正确选择和使用这些类可以帮助我们编写出高效、可维护的代码。在实际项目中,应根据具体需求和场景来决定使用哪种集合类型...

    java集合-练习题.pdf

    本篇资源摘要信息主要讲解 Java 集合框架的相关知识点,包括 Collection 接口、List 接口、Set 接口、Map 接口的特点和区别,以及 ArrayList、LinkedList、Vector 等实现类的使用和区别。 一、Collection 接口的...

    【IT十八掌徐培成】Java基础第11天-04.Map集合-集合整理.zip

    在Java中,Map接口是所有映射类型的父接口,它定义了映射的基本操作。本教程“Java基础第11天-04.Map集合-集合整理”由IT十八掌徐培成讲解,旨在深入解析Map集合的使用和特性。 首先,Map接口中的核心方法包括: 1...

    大学课程讲义-Java基础-Java集合.pptx

    Java 集合类可以分为 Set、List 和 Map 三种体系,分别用于存储无序、不可重复的集合、有序、可重复的集合和具有映射关系的集合。 Collection 接口是 Java 集合框架的核心接口,定义了基本的集合操作方法,如 add...

    Java-Java集合体系-List-Set

    理解并熟练运用Java集合体系中的List、Set、Map接口及其实现类,对于日常开发和面试来说至关重要,因为它们是许多Java框架和库的基础。在实际项目中,根据需求选择合适的集合类型可以提高代码的效率和可维护性。在...

    Java基础----集合类汇总

    本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...

    java集合MAP三种遍历

    `Map`接口是Java集合框架的一部分,它提供了基于键值对的数据存储方式。常见的实现类包括`HashMap`(无序)、`LinkedHashMap`(有序)、`TreeMap`(排序)等。Map的主要方法包括`put`、`get`、`remove`、`...

    Crazy-JAVA-mind-map.zip_Crazy JAVA mind map_crazy_java-mindmap_m

    最后,Java的并发编程是另一个重要领域,线程、同步机制(如synchronized关键字、Lock接口)、并发集合(如ConcurrentHashMap)等内容都是高并发环境下必备的知识。 总的来说,这个"Crazy JAVA mind map"思维导图将...

    易语言仿java集合 list map源码

    本主题聚焦于易语言中的面向对象编程,特别是模仿Java集合框架的List和Map接口的实现。这些数据结构在编程中扮演着核心角色,用于组织和管理数据。 首先,让我们深入了解易语言的面向对象编程概念。面向对象编程...

    java 集合----Map、Collection

    接下来,转向Map接口,它存储键值对,每个键都是唯一的。HashMap是最常用的实现,它使用哈希表数据结构,提供快速查找,但不是线程安全的;Hashtable与HashMap类似,但在多线程环境下更安全,但效率较低,因为它对...

    Java--collection.rar_SEP_java 集合

    Java集合框架是Java编程语言中的一个核心组件,它为数据存储和管理提供了强大的支持。这个框架包括了多种接口和类,使得程序员可以高效地处理对象集合。在"Java--collection.rar"这个压缩包中,我们可以找到名为...

    Java集合类List-Set-Map的区别和联系.doc

    Java 集合类 List-Set-Map 的区别和联系 Java 集合类 List、Set 和 Map 是 Java 语言中最基本的集合类,它们之间存在着紧密的联系和区别。在本文中,我们将对 Java 集合类 List、Set 和 Map 的区别和联系进行详细的...

    java集合-HashMap的使用

    HashMap是一种常用的哈希表实现,用于存储键值对。它实现了Map接口,并且使用键的哈希值来快速定位和访问值。

    线程-线程池-锁-集合-Map-队列.docx

    集合是Java中存储数据的主要工具,包括List、Set和Map等。`HashMap`在不同JDK版本间可能存在差异,例如在JDK 7及之前,`HashMap`是非线程安全的,而在JDK 8中进行了优化,引入了红黑树提高性能。`ConcurrentHashMap`...

    【IT十八掌徐培成】Java基础第11天-03.Map集合-hash原理2.zip

    首先,Map接口是Java集合框架的一部分,提供了存储和管理键值对的能力。常见的Map实现包括HashMap、TreeMap、LinkedHashMap等。在这个视频中,重点是HashMap,它是基于哈希表的数据结构,通过哈希函数来实现快速查找...

    精通java集合框架--List,Set..

    ### 精通Java集合框架——List, Set, Map #### 概述 Java集合框架是一种高度抽象且灵活的数据组织工具,它通过一系列接口来定义不同类型的数据容器,并提供了丰富的操作这些容器的方法。本文将深入探讨Java集合...

    【IT十八掌徐培成】Java基础第11天-02.Map集合-hash原理.zip

    在Java编程语言中,Map接口...通过学习这一部分,可以提升对Java集合框架的理解,提高代码的编写效率和质量。在徐培成老师的课程中,你将能够深入学习这些概念,并通过实例了解如何在实际项目中有效利用Map和哈希技术。

Global site tag (gtag.js) - Google Analytics