`
zhy20045923
  • 浏览: 155820 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

String,HashMap,HashTable的深层分析

    博客分类:
  • java
阅读更多
import java.util.HashMap;
import java.util.Hashtable;

public class Main {
	// 1. 继承Map
	private HashMap<String,String> hashmap = new HashMap<String,String>();
	// 1.继承Dictionary
	private Hashtable<String,String> hashtable = new Hashtable<String,String>();
	
	public static void main(String[] s) {
		Main main = new Main();
		
		main.HashMapTest();
		
		main.HashTableTest();
		
		// String因为复写了equals方法,所以该方法是比较里面的内容.java的所有对象都有hashcode和equals方法.如果要复写equals,必须复写hashcode
		main.StringTest();
	}
	
	private void HashMapTest(){
		hashmap.put("0", "0");
		// 2.可以放null值,一般会有特定的位置存储,比如0位置
		hashmap.put(null, "null");
		System.out.println(hashmap.get(null));
		
		// 3.所谓的不是线程安全的,是因为hashmap的put和get方法实现如下:
//		public V put(K paramK, V paramV)
//		public V get(Object paramObject)
	}
	
	private void HashTableTest(){
		hashtable.put("0", "0");
		// 2. 不可以放null值
//		hashtable.put(null, "null");
//		System.out.println(hashtable.get(null));
		
		// 3.所谓的线程安全的,是因为Hashtable的put和get方法实现如下:
//		public synchronized V put(K paramK, V paramV)
//		public synchronized V get(Object paramObject)	
	}
	
	private void StringTest(){
		// 由于String是final类,因此你不可以继承这个类、不能修改这个类。
		// 会在内存中创建对象,可以通过intern放入String的string池中
		String str1 = new String("exam");
		String str2 = new String("exam");
		// 首先会去string池中判断是否有该对象,有的话就直接返回已有对象的地址,否则会在内存中创建对象,并且放入String的string池中
		String str3 = "exam";
		// 所以它不会创建内存空间
		String str4 = "exam";
		// false
		System.out.println(str1==str2);
		// true
		System.out.println(str1.equals(str2));
		
		// false
		System.out.println(str1 == str3);
		// true
		System.out.println(str1.equals(str3));
		
		// true
		System.out.println(str4 == str3);
		// true
		System.out.println(str4.equals(str3));
		
		
		str1 = str1.intern();
		// true
		System.out.println(str1 == str3);
		// true
		System.out.println(str1.equals(str3));
	}
}
分享到:
评论

相关推荐

    HashMap和HashTable的区别和不同

    ### HashMap与HashTable的区别详解 #### 引言 在Java编程中,`HashMap`与`HashTable`作为两种常用的数据结构,经常被用来存储键值对数据。尽管它们在功能上相似,但在实现细节、性能表现以及使用场景方面存在显著...

    hashMap和hashTable的区别

    ### hashMap和hashTable的区别 #### 一、简介与基本概念 `HashMap` 和 `HashTable` 都是 Java 集合框架中非常重要的数据结构,它们都实现了 `Map` 接口,用于存储键值对。尽管它们在功能上有很多相似之处,但在...

    HashMap与HashTable区别

    ### HashMap与HashTable的区别 在Java编程语言中,`HashMap`和`HashTable`是两种非常重要的数据结构,它们都实现了`Map`接口,并提供了键值对的存储方式。这两种数据结构虽然相似,但在实现细节和使用场景上存在...

    hashmap与hashtable区别

    ### HashMap与Hashtable的区别 在Java编程语言中,`HashMap`和`Hashtable`是两种非常重要的数据结构,它们都用于存储键值对。然而,在实际应用过程中,这两种数据结构有着本质的不同,下面将详细介绍这些差异。 ##...

    HashMap与HashTable和HashSet的区别

    本文将重点分析这三种数据结构之间的区别,特别是针对`HashTable`不支持空键值对而`HashMap`支持这一点进行深入探讨。 #### 二、HashTable `HashTable`是基于哈希表实现的一个线程安全的`Map`容器,它不允许`key`...

    HashMap与HashTable的区别(含源码分析)

    在Java编程语言中,`HashMap`和`HashTable`都是实现键值对存储的数据结构,但它们之间存在一些显著的区别,这些区别主要体现在线程安全性、性能、null值处理以及一些方法特性上。以下是对这两个类的详细分析: 1. ...

    HashMap和HashTable底层原理以及常见面试题

    HashMap和HashTable底层原理以及常见面试题 HashMap和HashTable是Java中两个常用的数据结构,都是基于哈希表实现的,但它们之间存在着一些关键的区别。本文将深入探讨HashMap和HashTable的底层原理,并总结常见的...

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码...本文总结了HashMap和HashTable的源码学习和面试总结,涵盖了它们的存储结构、构造方法、get和put方法的源码分析、Hash表的特点和缺点、HashTable和HashMap的区别等内容。

    比较分析Vector、ArrayList和hashtable hashmap数据结构

    比较分析Vector、ArrayList和hashtable hashmap数据结构

    hashmap和hashtable的区别

    hashmap和hashtable的区别

    比较Vector、ArrayList和hashtable hashmap

    - HashMap 和 Hashtable 都实现了 Map 接口,HashMap 更快但不是线程安全的,而 Hashtable 是线程安全但较慢。WeakHashMap 则使用弱引用作为键,有助于防止内存泄漏。 - 在选择使用哪种数据结构时,需要考虑性能需求...

    hashtable和hashmap的区别

    接下来,我们将详细探讨`Hashtable`和`HashMap`之间的区别,并分析它们各自的优缺点。 #### 1. 线程安全性 - **Hashtable**: 是线程安全的。`Hashtable`的所有关键操作(如`put()`、`get()`)都是同步的,这意味着...

    HashMap,HashTable,LinkedHashMap,TreeMap的区别

    HashMap, HashTable, LinkedHashMap, TreeMap 的区别 在 Java 中,Map 是一个非常重要的集合类,用于存储键值对。其中,HashMap, HashTable, LinkedHashMap, TreeMap 是四种常用的 Map 实现类,每种类都有其特点和...

    Hashtable和HashMap的区别:

    ### Hashtable与HashMap的区别详解 #### 一、基本概念与历史背景 在Java编程语言中,`Hashtable` 和 `HashMap` 都是用来存储键值对的数据结构。这两种数据结构虽然相似,但是在实现细节上存在显著差异。 1. **...

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap与HashTable的主要区别在于线程安全性和对null值的支持。HashMap是非同步的,意味着在多线程环境中,如果不进行适当的同步控制,可能会导致数据不一致。而HashTable是同步的,因此它在多线程环境下的安全性更...

    经典讲解List和ArrayList和Vector和HashTable和HashMap区别

    在Java编程语言中,集合框架是处理对象数组的重要工具,其中`List`、`ArrayList`、`Vector`、`HashTable`和`HashMap`是五个关键的接口和类,它们各有不同的特性和用途。以下是这些概念的详细解释: 1. **List接口**...

    HashMap,HashTable,ConcurrentHashMap之关联.docx

    HashMap,HashTable,ConcurrentHashMap 之关联 HashMap、HashTable、ConcurrentHashMap 是 Java 集合类中的重点,以下是对它们的详细解释: HashMap HashMap 是非线程安全的,它的键和值都允许有 null 值存在。...

    hashmap和hashtable的区别.docx

    HashMap 和 Hashtable 是 Java 集合框架中两个重要的映射数据结构,它们都实现了 Map 接口,但具有显著的差异。以下将详细介绍这两个类的主要区别: 1. 线程安全性: - HashMap 不是线程安全的,这意味着在多线程...

    Javapython for leetcode 1 array2 list3 string4 hashtable5 m.zip

    标题 "Javapython for leetcode 1 array2 list3 string4 hashtable5 m.zip" 提供的信息表明,这个压缩包包含了一系列与LeetCode题目相关的Java和Python编程解决方案,重点涉及了数组、列表、字符串、哈希表(或字典...

    A simple string hashmap in C.zip

    标题 "A simple string hashmap in C.zip" 暗示了一个小型的C语言实现的字符串哈希表项目。这个压缩包可能包含一个或多个源代码文件,用于演示如何在C语言中设计并实现一个简单的哈希表,特别是针对字符串键值对的...

Global site tag (gtag.js) - Google Analytics