当前位置:首页 > 生活百科

map接口的实现类(详解java常用工具类)

栏目:生活百科日期:2025-04-01浏览:0

java里的map接口和python里的map函数完全不同。虽然都具有映射关系,但是java的map接口更贴近字典和集合这两个引用数据类型。这个接口是一个双列集合它的元素是由键和值组成的,也就是keys和values。这个接口有两个实现类:hashmap和treemap。hashmap内部维护一个hash顺序,所以和我们宏观里看到的顺序不太一样。下例是把这个集合里的所有的值遍历出来。

public class Example18 {    public static void main(String&[] args) {        //直接获取map里的值        //map存储的值是collection集合        Map map = new HashMap();        map.put("1","javaScript");        map.put("2","Linux");        map.put("3","Unix");        Collection values = map.values();//把map对象里的值取出,转换成collection集合类        Iterator it = values.iterator();        while (it.hasNext()){            Object value = it.next();            System.out.println(value);        }    }}

这里是通过一个java的迭代器把map里的所有元素迭代出来。这里的get方法是根据输入的键返回对应的值。这里是不允许出现重复的元素,如果输入了相同的键值对,则视为对该键对应的值修改。也就是如下例:

map.put("3","MacOS");

也就是把键为3的值修改了。简而言之就是键相同,值修改。

很多初学者不适应hashmap里的读取顺序不是按照存入顺序读出来的,所以总想按照宏观的顺序读取出来,我们可以使用LinkedHashMap类实现这一目的。它是用双向链表来维护内部元素的关系,与LinkedList一样。如下例:

public class Example19 {    public static void main(String&[] args) {        //要想使得map对象里的存入时的值与读取出来的值顺序一致,则需要使用linkedhashmap类        //内部维护一个双向链表        Map map = new LinkedHashMap();//使用linkedhashmap类就实现了存入与读取顺序一致        map.put("1","Ubuntu");        map.put("2","CentOS");        map.put("3","SunOS");        map.put("4","MacOS");        Set keySet = map.keySet();//取出map对象里的键组成的集合        Iterator it = keySet.iterator();//为什么是keySet调用迭代器,因为是把键取出后存入keySet对象里的        while (it.hasNext()){            Object key = it.next();            Object value = map.get(key);            System.out.println(key+":"+value);        }    }}

这样就是实现了读取与存放顺序一致了。

Treemap集合也是存储键值对映射关系,不允许出现重复的键,内部是通过二叉树原理实现的,所以就可以实现键不重复。它是由一个根组成的,往下划分两个子树,由左子树和右子树组成,左子树总是小于右子树。

public static void main(String&[] args) {        //TreeMap集合        //是通过二叉树原理保证键的唯一性。TreeMap是按照某种顺序排列的        TreeMap tmap = new TreeMap();        tmap.put("1","java");        tmap.put("2","Linux");        tmap.put("3","MacOS");        tmap.put("4","Ubuntu");        Set keyset = tmap.keySet();        Iterator ior = keyset.iterator();        while (ior.hasNext()){            Object key = ior.next();            Object value = tmap.get(key);            System.out.println(key+":"+value);        }    }

它读取的元素的顺序和存储的顺序一致。因为编号是String类型,String类型实现了Comparable接口,因此默认会按照自然顺序进行排序。

当使用TreeMap集合时,也可以自定义比较法。下面的例子就实现了自定义比较器。

public class Example21 {    public static void main(String&[] args) {        /*        * 实现自定义比较器,与二叉树集合默认排序规则相反的排序        * */        TreeMap tm = new TreeMap(new MyComparator());        tm.put("1","JavaScript");        tm.put("2","java虚拟机");        tm.put("3","Linux Kernel");        Set keySet = tm.keySet();        Iterator it = keySet.iterator();        while (it.hasNext()){            Object key = it.next();            Object value = tm.get(key);//获得键对应的值            System.out.println(key+":"+value);        }    }}//实现自定义比较器class MyComparator implements Comparator {    public int compare(Object obj1,Object obj2){        String id1 = (String) obj1; //把obj1强制转换为String类型        String id2 = (String) obj2;        return id2.compareTo(id1);//把比较结果返回    }}

jdk帮我们预留了一个接口叫Comparator,我们使用implements实现这个接口。因为在java里所有的类的父类都是Object是默认继承的。所以在集合中的数据类型都转成Object类型。那么我们要做的就是把Object类型转译成String类型。然后使用compareTo方法进行比较,这样就实现了字典逆序。

Properties集合是map接口的一个实现类Hashtable与hashMap相似,hashtable的线程是安全的,存取元素时速度慢。Properties主要存储字符串类型的键和值。

public static void main(String&[] args) {        //Properties集合是map接口的一个实现类Hashtable与hashMap相似。        //hashtable的线程是安全的,存取元素时速度慢。        //Properties主要存储字符串类型的键和值        //按顺序存储的顺序读取结果        Properties p = new Properties();        p.setProperty("1","C");//写入Properties集合        p.setProperty("2","JavaScript");        p.setProperty("3","Node.js");        /*        * 通过调用propertyNames方法获得一个包含所有键的Enumeration对象,        * 在遍历时调用getProperty方法获取值        *        * */        Enumeration names = p.propertyNames();//获取Enumeration对象所有键的枚举        while (names.hasMoreElements()){            String key = (String) names.nextElement();            String value = (String) p.getProperty(key);//获取键对应的值            System.out.println(key+":"+value);        }    }

主要用于编写配置项的,这个我在学Spring Boot这么课的时候经常使用。它有getproperty()和setproperty()这两个方法,用于读写配置。再详细的就在代码里写的很完备了,直接看代码就可以了。

“map接口的实现类(详解java常用工具类)” 的相关文章

公司上线erp系统流程(ERP系统的5大流程)

ERP系统流程是怎样?主要步骤有哪些?信息化时代,对于企业来说,实现统筹化管理,提升办公效率,这就是管理的王道。那么,如何快速实现这一目标呢?这就离不开ERP系...

华春莹四问反驳美国所谓人权自由, 去年美国警察只有18

国务院新闻办公室24日发表《2020年美国侵犯人权报告》。2020年新冠肺炎疫情全球肆虐,对人类生命安全构成重大威胁。病毒没有国界疫情不分种族战胜疫情需要世界各...

banner广告的优缺点(官方简评banner广告效果)

“萤连长,为什么有些用户看不到我的小程序里广告?”近日,有不少用户(流量主)反映,小程序开通流量主后,经常碰到广告位不显示广告的情况。但其他人打开小程序时,又能...

创业黑马是做什么的,平台盈利模式及加速方案分析

8月17日,2019黑马产业加速大会在京举行,创业黑?联合创始人郭海峰在现场发布了“黑马产业加速计划”。?会场外,来?广州、福州、南宁、莆田、神木五座城市的20...

企业计划摘要怎么写(企业创业计划书范文)

当创业者需要写商业计划书,创业者为了更多去展示自己的项目,会在前面的摘要中把自己的东西全部表达出来。创业者写商业计划书时会东写一点,西抄一段,最后结果是投资人抓...

外贸推广方案怎么写,6种实用外贸运营推广方式

很多人都有外贸网络推广方法、外贸网站如何做推广、网络推广有哪些方法、如何做好外贸推广,这样的疑问,为了解决大家心目中这样的问题。大土网络小编为大家介绍多个常用的...

seo快速排名软件品牌,盘点10款SEO竞争分析工具

SEO是搜索引擎优化的初始主义。它是一个营销学科,专注于通过自然搜索引擎结果获得可见性或提高网站流量的质量和数量。除了SEO如何运作的基本思想之外,还有很多关于...

u盘损坏了还能恢复吗,损坏u盘修复操作方法

U盘是很多小伙伴随身携带工作,交换数据的重要途径,如果插入U盘之后电脑完全没反应,或者无法读取数据,那真是愁死人了,这种情况小伙伴们都碰到过吧?怎么才能让它恢复...

两个主机共用一个显示器怎么切换(电脑总是自动唤醒解决

在党政办公时,为了保密,很多人办公时需要进行内外网切换。现在多数人的解决办法是弄两台电脑主机,两台电脑显示屏。其实可以两台计算机主机共用一块显示器。有些显示器有...

ex模拟器使用教程(手机玩pc的模拟器)

爱玩哥最近沉迷在英雄无敌3死亡阴影里不能自拔,要说这个游戏都出来NNN&…年了,咋还这么大的兴趣呢?那是因为这款游戏爱玩哥现在是用手机玩的~地铁上公...