
顾名思义LinkedHashMap是比HashMap多了一个链表的结构。与HashMap相比LinkedHashMap维护的是一个具有双重
链表的HashMap,LinkedHashMap支持2中排序一种是插入排序,一种是使用排序,最近使用的会移至尾部例如 M1 M2 M3
M4,使用M3后为 M1 M2 M4
M3了,LinkedHashMap输出时其元素是有顺序的,而HashMap输出时是随机的,如果Map映射比较复杂而又要求高效率的话,最好使用
LinkedHashMap,但是多线程访问的话可能会造成不同步,所以要用CollectionssynchronizedMap来包装一下,从而实
现同步。其实现一般为:
Map<String String> map = CollectionssynchronizedMap(new LinkedHashMap(<String String));
import javautilHashMap;
import javautilIterator;
import javautilLinkedHashMap;
import javautilMap;
public class TestLinkedHashMap {
public static void main(String args[])
{
Systemoutprintln("LinkedHashMap");
Map<Integer,String> map = new LinkedHashMap<Integer,String>();
mapput(6, "apple");
mapput(3, "banana");
mapput(2,"pear");
for (Iterator it = mapkeySet()iterator();ithasNext();)
{
Object key = itnext();
Systemoutprintln( key+"="+ mapget(key));
}
Systemoutprintln("HashMap");
Map<Integer,String> map1 = new HashMap<Integer,String>();
map1put(6, "apple");
map1put(3, "banana");
map1put(2,"pear");
for (Iterator it = map1keySet()iterator();ithasNext();)
{
Object key = itnext();
Systemoutprintln( key+"="+ map1get(key));
}
}
}
运行结果如下:
LinkedHashMap
6=apple
3=banana
2=pear
HashMap
2=pear
6=apple
3=banana
分析:LinkedHashmap 的特点是put进去的对象位置未发生变化,而HashMap会发生变化
有两种第一种: Map map = new HashMap(); Iterator iter = mapentrySet()iterator(); while (iterhasNext()) { MapEntry entry = (MapEntry) iternext(); Object key = entrygetKey(); Object val = entrygetValue(); } 效率高,以后一定要使用此种方式!第二种: Map map = new HashMap(); Iterator iter = mapkeySet()iterator(); while (iterhasNext()) { Object key = iternext(); Object val = mapget(key); } 效率低,以后尽量少使用! HashMap的遍历有两种常用的方法,那就是使用keyset及entryset来进行遍历,但两者的遍历速度是有差别的,下面请看实例: public class HashMapTest { public static void main(String[] args) { HashMap hashmap = new HashMap(); for (int i = 0; i < 1000; i ) { hashmapput("" i, "thanks"); } long bs = CalendargetInstance()getTimeInMillis(); Iterator iterator = hashmapkeySet()iterator(); while (iteratorhasNext()) { Systemoutprint(hashmapget(iteratornext())); } Systemoutprintln(); Systemoutprintln(CalendargetInstance()getTimeInMillis() - bs); listHashMap(); } public static void listHashMap() { javautilHashMap hashmap = new javautilHashMap(); for (int i = 0; i < 1000; i ) { hashmapput("" i, "thanks"); } long bs = CalendargetInstance()getTimeInMillis(); javautilIterator it = hashmapentrySet()iterator(); while (ithasNext()) { javautilMapEntry entry = (javautilMapEntry) itnext(); // entrygetKey() 返回与此项对应的键 // entrygetValue() 返回与此项对应的值 Systemoutprint(entrygetValue()); } Systemoutprintln(); Systemoutprintln(CalendargetInstance()getTimeInMillis() - bs); } } 对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。还是第一种好,简单。。。
1、phoneBookkeySet();该方法可以得到一个Set集合,既然是Set集合,那么就可以使用Collection接口的iterator()方法得到该集合的迭代器。
2、定义什么???keyset()方法属于Map接口的方法定义,HashMap肯定实现了的。这里只是匿名使用了一下。就像:
Date date = new Date();
dategetTime();
和new Date()getTime();
是一样的。
3、 phoneBookkeySet()HashSet();这是什么意思??
phoneBookkeySet()得到的是Set,Set接口有HashSet()方法吗????
map是个接口
用都是用HasMap等实现Map接口的类
创建:Map<String,String> map = new HashMap<String,String>();
插入元素:mapput("1","a");
移除元素: mapremove("1");
清空: mapclear();
具体参照java API
javauitlHashMap
以上就是关于LinkedHashMap和HashMap的区别以及使用方法全部的内容,包括:LinkedHashMap和HashMap的区别以及使用方法、HashMap的几种遍历方式、关于JAVA中的HashMap 和iterator的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)