Map...---HashMap和Hashtable的区别-----...LinkedHashMap

*Map接口不是Collection接口的子接口
*Map存放数据的方式采用键值对的方式,类似与生活中目录(键)和内容(值)
*常见的实现类:
* HashMap**:采用键-值对的方式进行存放.
* 键(键的集合是就是set集合):唯一,无序,如果键重复,将发生覆盖
* 值:无序 不唯一(Collection)
* 构造函数:
* HashMap() 构造一个具有默认初始容量 (16) 和默认加载因子 (0.75) 的空 HashMap。
* HashMap(int initialCapacity) 构造一个带指定初始容量和默认加载因子 (0.75) 的空 HashMap。
* 常用的方法:
* 增:
* put(K key, V value)***:在此映射中关联指定值与指定键。
* 删:
* remove(Object key):从此映射中移除指定键的映射关系(如果存在)。
* 改:
* 查:
* get(Object key)***: 返回指定键所映射的值;如果对于该键来说,此映射不包含任何映射关系,则返回 null。
* 其他方法:
* size()**:返回容器中键值对个数。
* containsKey(Object key)**:如果此映射包含对于指定键的映射关系,则返回 true。
* containsValue(Object key):如果此映射包含对于指定值的映射关系,则返回 true。
* keySet()** :返回容器中键的集合,本质就是一个set集合
* values()**:返回值的集合,本质是一个Collection集合
*
* ---LinkedHashMap:
* 有序(位置顺序)的HashMap 速度快
*
*
* Hashtable:
* TreeMap:

*putAll(Map<? extends K,? extends V> m)
* 将指定映射的所有映射关系复制到此映射中,这些映射关系将替换此映射目前针对指定映射中所有键的所有映射关系。
* Set<Map.Entry<K,V>> entrySet():返回此映射所包含的映射关系的 Set 视图。
* Map.Entry:代表一个键值对。
* getKey() :返回与此项对应的键。
* getValue() :返回与此项对应的值。
*Map的遍历方式:
*方式1:通过键进行遍历
*a.先获取键的集合;b.遍历键的集合 ; c.根据键获取对应的值
*方式2:通过键值对进行遍历***
*a.先获取键值对的集合;b.遍历键值对; c.从键值对中获取键和值

//遍历方式1: a.先获取键的集合;b.遍历键的集合 ; c.根据键获取对应的值
Set<String> keys = map.keySet();//获取键的集合
for (String key : keys) {
String value = map.get(key);
System.out.println("key="+key+",value="+value);
}
System.out.println("**********************");
//遍历方式2: a.先获取键值对的集合;b.遍历键值对; c.从键值对中获取键和值
// Set entrySet = map.entrySet();
// for (Object object : entrySet) {
// Map.Entry entry = (Map.Entry)object;//
// Object key = entry.getKey();
// Object value=entry.getValue();
// System.out.println("key="+key+",value="+value);
// }
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Entry<String, String> entry : entrySet) {
String key = entry.getKey();
String value = entry.getValue();
System.out.println("key="+key+",value="+value);
}
//遍历方式3:遍历值的集合

*/

------------------HashMap和Hashtable的区别------------------
/**
*Hashtable:采用hash表进行存储,继承了Directory
*此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
*HashMap和Hashtable的区别:
* 1、Hashtable在JDK1.1已经存在,继承了Directory类,默认初始容量11
* HashMap实现了Map接口,默认初始容量16
* 2、HashMap中键和值都可以为null,如果键相同将方式覆盖(如果多个键值为null,后边的将覆盖前边的)
* Hashtable中键和值都不能为null,如果键或值为null将发生空指针异常
* 3、Hashtable是基于线程的安全,在多线程中使用;而HashMap是非线程安全的,效率较高
*常用方法与HashMap相同
*/

LinkedHashMap
/**
* LinkedHashMap继承了HashMap,采用的hash表(查询快)+链表的结构(添加删除快,有序)进行存储。
* 有序(位置顺序)
* HashMap:无序(位置顺序)
*/

/**
*Collection:接口
*Collections:工具类,提供了一下操作Collection集合的静态方法:
* sort():排序
* reverse():反转指定列表中元素的顺序。
* binarySearch():使用二分搜索法搜索指定列表,以获得指定对象
* ....
*
*Collection和Collections的关系类似于Array和Arrays的关系
*
*/

/**
*TreeMap:实现了Map接口,采用红黑数(二叉树)的方式存放数据
*特点:
* 有序(自然顺序)19:19 2017/4/20
* 构造函数:
* TreeMap():使用键的自然顺序构造一个新的、空的树映射。
*
*/

/**
*
*TreeMap(): 使用键的自然顺序构造一个新的、空的树映射。
*TreeMap(Comparator<? super K> comparator): 构造一个新的、空的树映射,该映射根据给定比较器进行排序。

时间: 2024-10-10 15:21:47

Map...---HashMap和Hashtable的区别-----...LinkedHashMap的相关文章

ArrayList和Vector的区别?HashMap和HashTable的区别?StringBuilder、StringBuffer和String的区别?

ArrayList和Vector的区别?从两个方面 1.同步性:ArrayList是线程不安全的,是非同步的:Vector是线程安全的,是同步的.(Java中线程的同步也就满足了安全性) 2.数值增长:ArrayList每次增长为原来的50%;Vector每次增长为原来的100%; (从内部实现机制来讲,ArrayList和Vector都是使用数组(Array)来控制集合中的对象,当向集合中添加对象时,如果内部数组长度不够用时,长度会自动增长.ArrayList会增长为原来的1.5倍,Vecto

[转]HashMap与HashTable的区别、HashMap与HashSet的关系

转自: http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable.可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别. 一:HashMap与HashTable的区别 1.HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以

深入集合类系列——HashMap和HashTable的区别

含义:HashMap是基于哈希表的Map接口的非同步实现.允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变. 数据结构:HashMap实际上是一个"链表散列"的数据结构,即数组和链表的结合体. HashMap存数据的基本流程: 1.当调用put(key,value)时,首先获取key的hashcode,int hash = key.hashCode(); 2.再把hash通过一下运算得到一个int h. hash ^= (hash >>&g

HashMap和Hashtable的区别 源码分析

一:以前只知道HashMap和HashTable区别,死记硬背的记住HashMap 允许key value为空 而Hashtable 不允许为空 HashMap线程是非线程安全的,而Hashtable是安全的. 二.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable public class HashM

从Java源码的角度来分析HashMap与HashTable的区别

由于HashMap与HashTable都是用来存储Key-Value的键值对,所以经常拿来对比二者的区别,下面就从源码的角度来分析一下HashMap与HashTable的区别, 首先介绍一下两者的区别,然后再从源码分析. HahMap与HahTable两者主要区别: 1.继承的父类不同 <span style="font-size:18px;">public class HashMap<K, V> extends AbstractMap<K, V>

java面试题——HashMap和Hashtable 的区别

一.HashMap 和Hashtable 的区别 我们先看2个类的定义 1 public class Hashtable 2 extends Dictionary 3 implements Map, Cloneable, java.io.Serializable public class HashMap extends AbstractMap implements Map, Cloneable, Serializable 可见Hashtable 继承自 Dictiionary 而 HashMap

HashMap与HashTable的区别、HashMap与HashSet的关系

http://blog.csdn.net/wl_ldy/article/details/5941770 HashTable的应用非常广泛,HashMap是新框架中用来代替HashTable的类,也就是说建议使用HashMap,不要使用HashTable.可能你觉得HashTable很好用,为什么不用呢?这里简单分析他们的区别. 一:HashMap与HashTable的区别 1.HashTable的方法是同步 的,在方法的前面都有synchronized来同步,HashMap未经同步,所以在多线程

Java 集合系列 11 hashmap 和 hashtable 的区别

java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java 集合系列 04 LinkedList详细介绍(源码解析)和使用示例 Java 集合系列 05 Vector详细介绍(源码解析)和使用示例 Java 集合系列 06 Stack详细介绍(源码解析)和使用示例 Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和

java 的HashMap和HashTable的区别?

1.HashMap和HashTable的区别? HashMap不是线程安全的它的操作方法没有进行同步处理 HashMap允许key为空 HashTable是线程安全的它的操作方法加以了synchronized修饰 HashTable不允许Key为空 2.ArrayList和LinkedList和Vector的区别? ArrayList内部实现是一个object数组,非线程安全 LinkedList内部实现是一个链表结构,非线程安全 Vector内部实现是一个object数组,线程安全 原文地址: