Map介绍

HashMap & Hashtable 区别

a.HashMap不是线程安全的;HashTable是线程安全的,其线程安全是通过Sychronize实现。

b.由于上述原因,HashMap效率高于HashTable。

c.HashMap的键可以为null,HashTable不可以。

d.多线程环境下,通常也不是用HashTable,因为效率低。HashMap配合Collections工具类使用实现线程安全。同时还有ConcurrentHashMap可以选择,该类的线程安全是通过Lock的方式实现的,所以效率高于Hashtable。

 

Iterator模式可以把访问逻辑从不同类的集合类中抽象出来,从而避免向客户端暴露集合的内部结构。

 

遍历HashMap

//遍历方式一:for each遍历HashMap的entryset,注意这种方式在定义的时候就必须写成

//Map<Integer , String> hs,不能写成Map hs;

for(Entry<Integer , String> entry : hs.entrySet()){

System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());

}

//遍历方式二:使用EntrySet的Iterator

Iterator<Map.Entry<Integer , String>> iterator = hs.entrySet().iterator();

while(iterator.hasNext()){

Entry<Integer , String> entry = iterator.next();

System.out.println("key:"+entry.getKey()+" value:"+entry.getValue());

};

    //遍历方式三:for each直接使用HashMap的keyset

for(Integer key : hs.keySet()){

System.out.println("key:"+key+" value:"+hs.get(key));

};

//遍历方式四:使用keyset的Iterator

Iterator keyIterator = hs.keySet().iterator();

while(keyIterator.hasNext()){

Integer key = (Integer)keyIterator.next();

System.out.println("key:"+key+" value:"+hs.get(key));

}

}

Map对象中keyset()和entryset()区别

虽然使用keyset及entryset来进行遍历能取得相同的结果,
但两者的遍历速度是有差别的。
keySet():迭代后只能通过get()取key 
entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口 
说明:keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好
为了提高性能,以后多考虑用entrySet()方式来进行遍历。

 

ArrayList,LinkedList一个无序,一个有序;

HashSet,TreeSet一个无序,一个有序;

HashMap,LinkedHasmMap,一个无序,一个有序;

Vector和HashTable,Stack是线程安全的,但是效率低;

线程不安全的类都可以配合Collections得到线程安全的类。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值