Map接口用来处理键值对数据的集合
1.HashMap 继承自AbstractMap
2.数据保存是无序的
3.重复的键被算作是一个数据。
4.允许有null键,null值
5.初始容量16
6.扩容为原来的2倍
7.根据key【键】的得到hashcode值,然后根据这个hashcode值计算元素在集合中的位置。
8.非线程安全
HashMap类的构造方法:
HashMap() 构造一个空的 HashMap ,默认初始容量(16)和默认负载系数(0.75)。
HashMap(int initialCapacity) 构造一个空的 HashMap具有指定的初始容量和默认负载因子(0.75)。
HashMap(int initialCapacity, float loadFactor) 构造一个空的 HashMap具有指定的初始容量和负载因子。
HashMap(Map m) 构造一个新的 HashMap与指定的相同的映射 Map 。
- package com.wangxing.test1;
- import java.util.HashMap;
- import java.util.Hashtable;
- import java.util.Map;
- public class TestHashMapClass {
- public static void main(String[] args) {
- //构造方法
- //HashMap() 构造一个空的 HashMap ,默认初始容量(16)和默认负载系数(0.75)。
- HashMap hashmap1=new HashMap();
- Map map1=new HashMap();
- //HashMap(int initialCapacity) 构造一个空的 HashMap具有指定的初始容量和默认负载因子(0.75)。
- HashMap hashmap2=new HashMap(36);
- Map map2=new HashMap(36);
- //HashMap(int initialCapacity, float loadFactor) 构造一个空的 HashMap具有指定的初始容量和负载因子。
- HashMap hashmap3=new HashMap(36,0.5f);
- Map map3=new HashMap(36,0.5f);
- //HashMap(Map m)将Map接口的子类转换成HashMap集合 。
- Hashtable table=new Hashtable();
- HashMap hashmap4=new HashMap(table);
- Map map4=new HashMap(table);
- }
- }
HashMap类的实例方法:
void clear() 清空集合。
Object put(Object key, Object value) 向集合中添加键值对数据
boolean containsKey(Object key) 判断集合中是否包含指定的键
boolean containsValue(Object value) 判断集合中是否包含指定的值
Object get(Object key) 根据指定的键得到该键对应的值
boolean isEmpty() 判断集合是否为空。
int size() 得到集合中键值对元素的个数
V remove(Object key) 根基指定的键删除对应的键值对数据值
Set keySet() 得到集合中所有的键保存到Set集合中
Collection values() 得到集合中所有的值保存到Collection集合中
Set
- package com.wangxing.test1;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- public class TestHashMapClass2 {
- public static void main(String[] args) {
- HashMap<Object,Object> map1=new HashMap<Object,Object>();
- //HashMap类中的实例方法:
- //Object put(Object key, Object value) 向集合中添加键值对数据
- map1.put("name", "zhangsan");
- map1.put("age",23);
- map1.put("address","西安");
- map1.put("height",168.5);
- map1.put("zhangsan", "name");
- map1.put(23,"age");
- map1.put("西安","address");
- map1.put(168.5,"height");
- //map1.put("name", "lisi");//重复的键算一个键值对数据
- //map1.put("myname","zhangsan");//可以有重复的值
- //map1.put(null,null); //允许有null键/null值
- //int size() 得到集合中键值对元素的个数
- System.out.println("size=="+map1.size());
- //boolean containsKey(Object key) 判断集合中是否包含指定的键
- System.out.println("containsKey=="+map1.containsKey("name"));
- //boolean containsValue(Object value) 判断集合中是否包含指定的值
- System.out.println("containsValue=="+map1.containsValue("name"));
- //Object get(Object key) 根据指定的键得到该键对应的值
- System.out.println("get=="+map1.get("zhangsan"));
- //void clear() 清空集合。
- //map1.clear();
- //boolean isEmpty() 判断集合是否为空。
- System.out.println("isEmpty=="+map1.isEmpty());
- //V remove(Object key)根基指定的键删除对应的键值对数据值
- map1.remove("name");
- System.out.println("size=="+map1.size());
-
- //遍历HashMap集合
- //Set keySet() 得到集合中所有的键保存到Set集合中
- Set keys=map1.keySet();
- for(Object obj:keys){
- System.out.println("所有的key---"+obj);
- }
- System.out.println("------------");
- Iterator iterator=keys.iterator();
- while(iterator.hasNext()){
- Object obj=iterator.next();
- System.out.println("所有的key---"+obj);
- }
- System.out.println("------------");
- //Collection values() 得到集合中所有的值保存到Collection集合中
- Collection collection=map1.values();
- for(Object obj:collection){
- System.out.println("所有的value---"+obj);
- }
- System.out.println("------------");
- Iterator iteratorvalue=collection.iterator();
- while(iteratorvalue.hasNext()){
- Object obj=iteratorvalue.next();
- System.out.println("所有的value---"+obj);
- }
- System.out.println("------------");
- //Set
> entrySet() 得到集合中所有的键值对数据Set集合中 - for(Map.Entry<Object,Object> entry:map1.entrySet()){
- System.out.println("集合中的键值对是=="+
- entry.getKey()+":"+entry.getValue());
- }
- }
- }
1.Hashtable继承自Dictionary
2.数据保存是无序的
3.重复的键被算作是一个数据。
4.不允许有null键,null值
5.初始容量11
6.扩容为原来的2n+1
7.Hashtable的对象得到hashcode值,通过除数留余的计算方法来算出元素在集合中的位置
8.线程安全
Hashtable类的构造方法:
Hashtable() 构造一个新的,空的散列表,默认初始容量(11)和负载因子(0.75)。
Hashtable(int initialCapacity) 构造一个新的,空的哈希表,具有指定的初始容量和默认负载因子0.75
Hashtable(int initialCapacity, float loadFactor) 构造一个新的,空的哈希表,具有指定的初始容量和指定的负载因子。
Hashtable(Map t) 构造一个与给定地图相同的映射的新哈希表。
- package com.wangxing.test2;
- import java.util.HashMap;
- import java.util.Hashtable;
- import java.util.Map;
- public class TestHashtableClass {
- public static void main(String[] args) {
- //构造方法
- //Hashtable() 构造一个新的,空的散列表,默认初始容量(11)和负载因子(0.75)。
- Hashtable hashtable1=new Hashtable();
- Map map1=new Hashtable();
- //Hashtable(int initialCapacity) 构造一个新的,空的哈希表,具有指定的初始容量和默认负载因子0.75
- Hashtable hashtable2=new Hashtable(20);
- Map map2=new Hashtable(20);
- //Hashtable(int initialCapacity, float loadFactor) 构造一个新的,空的哈希表,具有指定的初始容量和指定的负载因子。
- Hashtable hashtable3=new Hashtable(20,0.5f);
- Map map3=new Hashtable(20,0.5f);
- //Hashtable(Map t)将Map接口的子类转换成Hashtable。
- HashMap hashmap=new HashMap();
- Hashtable table4=new Hashtable(hashmap);
- Map map4=new Hashtable(hashmap);
- }
- }
Hashtable类的实例方法:
void clear() 清空集合。
Object put(Object key, Object value) 向集合中添加键值对数据
boolean containsKey(Object key) 判断集合中是否包含指定的键
boolean containsValue(Object value) 判断集合中是否包含指定的值
Object get(Object key) 根据指定的键得到该键对应的值
boolean isEmpty() 判断集合是否为空。
int size() 得到集合中键值对元素的个数
V remove(Object key) 根基指定的键删除对应的键值对数据值
Set keySet() 得到集合中所有的键保存到Set集合中
Collection values() 得到集合中所有的值保存到Collection集合中
Set
- package com.wangxing.test2;
- import java.util.Collection;
- import java.util.Hashtable;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- public class TestHashtableClass2 {
- public static void main(String[] args) {
- Hashtable<Object,Object> table=new Hashtable<Object,Object>();
- //Hashtable类中的实例方法:
- //Object put(Object key, Object value) 向集合中添加键值对数据
- table.put("name", "zhangsan");
- table.put("age", 23);
- table.put("height", 168.5);
- table.put("zhangsan","name");
- table.put(23,"age");
- table.put(168.5,"height");
- //table.put("name", "lisi"); //重复的键算一个
- //table.put("myname", "zhangsan");//可以有重复的值
- //table.put(null,"test");//不允许有null键
- //table.put("test",null);//不允许有null值
- Student stu1=new Student();
- table.put(stu1,"student类对象");
- //int size() 得到集合中键值对元素的个数
- System.out.println("size=="+table.size());
- //boolean containsKey(Object key) 判断集合中是否包含指定的键
- System.out.println("containsKey=="+table.containsKey(stu1));
- //boolean containsValue(Object value) 判断集合中是否包含指定的值
- System.out.println("containsValue=="+table.containsValue("lisi"));
- //Object get(Object key) 根据指定的键得到该键对应的值
- System.out.println("get=="+table.get(stu1));
- //void clear() 清空集合。
- //table.clear();
- //boolean isEmpty() 判断集合是否为空。
- System.out.println("isEmpty=="+table.isEmpty());
- //V remove(Object key) 根基指定的键删除对应的键值对数据值
- table.remove(stu1);
- System.out.println("size=="+table.size());
-
- //遍历Hashtable
- //Set keySet() 得到集合中所有的键保存到Set集合中
- Set setkeys=table.keySet();
- for(Object keyobj:setkeys){
- System.out.println("所有键key==="+keyobj);
- }
- System.out.println("------------");
- Iterator iterator=setkeys.iterator();
- while(iterator.hasNext()){
- Object keyObj=iterator.next();
- System.out.println("所有键key==="+keyObj);
- }
- System.out.println("------------");
- //Collection values() 得到集合中所有的值保存到Collection集合中
- Collection collection=table.values();
- for(Object valueObj:collection){
- System.out.println("所有值value=="+valueObj);
- }
- System.out.println("------------");
- Iterator valueiterator=collection.iterator();
- while(valueiterator.hasNext()){
- Object valueObj=valueiterator.next();
- System.out.println("所有值value==="+valueObj);
- }
- System.out.println("------------");
- //Set
> entrySet() 得到集合中所有的键值对数据Set集合中 - for(Map.Entry<Object,Object> entry:table.entrySet()){
- System.out.println("键值对数据=="+
- entry.getKey()+":"+entry.getValue());
- }
- }
- }
1.继承自AbstractMap
2.数据保存是有序按照字母顺序排列
3.重复的键被算作是一个数据。
4.允许有null键,不允许null值,键最好是String类型
5.没有初始容量
6.没有扩容机制
7.红黑树基于NavigableMap实现
8.非线程安全
TreeMap类构造方法
TreeMap() 使用其键的自然排序构造一个新的空树状图。
TreeMap(Map extends K,? extends V> m) 构造一个新的树状图,其中包含与给定地图相同的映射,根据其键的自然顺序进行排序 。
TreeMap类实例方法:
void clear() 清空集合。
Object put(Object key, Object value) 向集合中添加键值对数据
boolean containsKey(Object key) 判断集合中是否包含指定的键
boolean containsValue(Object value) 判断集合中是否包含指定的值
Object get(Object key) 根据指定的键得到该键对应的值
boolean isEmpty() 判断集合是否为空。
int size() 得到集合中键值对元素的个数
V remove(Object key) 根基指定的键删除对应的键值对数据值
Set keySet() 得到集合中所有的键保存到Set集合中
Collection values() 得到集合中所有的值保存到Collection集合中
Set
支持检索的完全并发性和更新的高预期并发性的哈希表。 这个类服从相同功能规范如Hashtable ,并且包括对应于每个方法的方法版本Hashtable 。 不过,尽管所有操作都是线程安全的,检索操作并不意味着锁定,并没有为防止所有访问的方式锁定整个表的任何支持。 这个类可以在依赖于线程安全性的程序中与Hashtable完全互Hashtable ,但不依赖于其同步细节。
如果需要线程安全的并发实现,那么建议使用ConcurrentHashMap代替Hashtable。
1.继承自AbstractMap
2.数据保存是无序的
3.重复的键被算作是一个数据。
4.不允许有null键,null值
5.初始容量16
6.jdk8中,采用多线程扩容。整个扩容过程,通过CAS设置sizeCtl,transferIndex等变量协
调多个线程进行并发扩容。
多线程无锁扩容的关键就是通过CAS设置sizeCtl与transferIndex变量,协调多个线程对table
数组中的node进行迁移。
7.如果需要线程安全的并发实现,那么建议使用ConcurrentHashMap代替Hashtable 。
8.线程安全
ConcurrentHashMap类的构造方法
ConcurrentHashMap()创建一个空的默认的初始容量大小为16的集合对象。
ConcurrentHashMap(int initialCapacity)创建一个指定初始容量的空的集合对象
ConcurrentHashMap(int initialCapacity, float loadFactor)根据给定的元素数(initialCapacity)
和初始表密度(loadFactor),创建一个空的集合对象 。
ConcurrentHashMap(Map extends K,? extends V> m)将Map接口的子类转换成ConcurrentHashMap
ConcurrentHashMap类的实例方法:
void clear() 清空集合。
Object put(Object key, Object value) 向集合中添加键值对数据
boolean containsKey(Object key) 判断集合中是否包含指定的键
boolean containsValue(Object value) 判断集合中是否包含指定的值
Object get(Object key) 根据指定的键得到该键对应的值
boolean isEmpty() 判断集合是否为空。
int size() 得到集合中键值对元素的个数
V remove(Object key) 根基指定的键删除对应的键值对数据值
Set keySet() 得到集合中所有的键保存到Set集合中
Collection values() 得到集合中所有的值保存到Collection集合中
Set
public class Collectionsextends Object
专门给集合类库提供的一个,用来对集合进行排序、检索、线程安全等操作的帮助类
Collections类中的方法都是静态方法
Collections类中的常用方法
static void copy(List dest, List src) 将所有元素从一个列表复制到另一个列表中。
static T max(Collection coll) 返回给定集合的最大元素
static T min(Collection coll) 返回给定集合的最小元素。
static void reverse(List list) 反转指定列表中元素的顺序。
static void sort(List
- package com.wangxing.test1;
-
- import java.util.ArrayList;
- import java.util.Collections;
-
- public class TsetCollectionsClass {
- public static void main(String args[]){
- //Collections类--专门给集合类库提供的一个,用来对集合进行排序、检索、线程安全等操作的帮助类
- //Collections类中的方法都是静态方法
- ArrayList list1=new ArrayList();
- list1.add("zhangsan");
- list1.add("lisi");
- list1.add("wangwu");
- ArrayList list2=new ArrayList();
- list2.add(890);
- list2.add(996);
- list2.add(768);
- list2.add(45);
- //static void copy(List dest, List src) 将所有元素从一个列表复制到另一个列表中。
- //Collections.copy(list2, list1);
- /*
- for(Object obj:list2){
- System.out.println("list2--"+obj);
- }
- */
-
- //static T max(Collection coll) 返回给定集合的最大元素
- System.out.println("得到list2中的最大元素=="+Collections.max(list2));
- //static T min(Collection coll) 返回给定集合的最小元素。
- System.out.println("得到list2中的最小元素=="+Collections.min(list2));
- //static void sort(List
list) 对指定的列表进行排序。 - Collections.sort(list1);
- for(Object obj:list1){
- System.out.println("list1升序--"+obj);
- }
- System.out.println("------------");
- Collections.sort(list2);
- for(Object obj:list2){
- System.out.println("list2升序--"+obj);
- }
- System.out.println("------------");
- //static void reverse(List list) 反转指定列表中元素的顺序。
- Collections.reverse(list1);
- for(Object obj:list1){
- System.out.println("list1降序--"+obj);
- }
- }
- }