关于JAVA中的HashMap 和iterator的问题

关于JAVA中的HashMap 和iterator的问题,第1张

顾名思义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的问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/8850033.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存