List、Set、Map集合存放null解析及HashMap、Hashtable异同点解析

来源:互联网 发布:好玩的java web项目 编辑:程序博客网 时间:2024/05/21 06:20

1.List、Set、Map集合存放null解析:

@Testpublic void CollectionTest() {// 测试ListList<Object> list = new ArrayList<Object>();list.add(null);list.add(null);System.out.println(list);// 测试SetSet<Object> set = new HashSet<Object>();set.add(null);set.add(null);System.out.println(set);// 测试HashMap与HashtableMap<Object, Object> hashMap = new HashMap<Object, Object>();hashMap.put(null, null);hashMap.put(null, null);hashMap.put(1, null);hashMap.put(1, 12);System.out.println(hashMap);/// Maps the specified <code>key</code> to the specified// <code>value</code> in this hashtable. Neither the key nor the// value can be <code>null</code>. <p>Map<Object, Object> hashtable = new Hashtable<Object, Object>();hashtable.put(1, "string1");hashtable.put(2, "string2");System.out.println(hashtable);}//打印结果://[null, null]//[null]//{null=null, 1=12}//{2=string2, 1=string1}

由此可知:
List 集合可以存储null,添加几个,存储几个;

Set集合也可以存储null,但只能存储一个,即使添加多个也只能存储一个;

HashMap可以存储null键值对,键和值都可以是null,但如果添加的键值对的键相同,则后面添加的键值对会覆盖前面的键值对,即之后存储后添加的键值对;

Hashtable不能碰null,不管是值还是键,一见null就报空指针。

2.HashMap、Hashtable异同点

相同点:两者都实现了Map接口

不同点:① HashMap可以存储null键值对,Hashtable不能存储null键值对;

                ② HashMap是非synchronized,而Hashtable是synchronized。sychronized意味着在一次仅有一个线程能够更改Hashtable。就是说任何线程要更新Hashtable时要首先获得同步锁,其它线程要等到同步锁被放之后才能再次获得同步锁更新Hashtable。也就是说,Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果不需要同步只需要单一线程,那么使用HashMap性能要好过Hashtable。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。所以如果需要完全安全的线程,需要使用Hashtable或者ConcurrentHashMap。

0 0
原创粉丝点击