`
有崖生110
  • 浏览: 55443 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

从一道题来看Map

 
阅读更多

相信很多人都见过这么一道题,就是给你一个字符串或者一个一个数组,让你统计字符串里面的字符出现了多少次,或者说数组里的元素出现了多少次。恩,相信大家看到这个基本都能想到说是用map里面的键值对来实现,键存放出现的字符或者元素,而值用来存放出现的次数。


所谓的键值对,有一个键和一个值,键不可以重复,但是值可以相同,如果建重复的话,那么该键将会以最后一个键输入的值作为该键对应的值,比如:1---man1,1----man2,那么最后的结果是:1----man2;是这样的一种重复关系

 键值对在Map中被要求是唯一性的,指的是键的唯一性。Map和其他集合的方法原理差不多,可存可取,存用put,取用get,存的时候是键值对的形式,取的时候是键的形式取,得到键对应的值。


首先,map是一个接口。所以需要它的实现类去实现它。一般来说我们常用的实现类有HashMap和TreeMap、HashTable等。

HashMap:适用于在Map中插入、删除和定位元素。

Treemap:适用于按自然顺序或自定义顺序遍历键(key)。

HashMap通常比TreeMap快一点(树和哈希表的数据结构使然),建议多使用HashMap,在需要排序的Map时候才用TreeMap。


public class Map_test {

public static void main(String[] args) {

Map<String,String> map=new HashMap<String,String>();

map.put("1", "human1");

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

map.put("2", "human2");

Iterator<Map.Entry<String, String>> it=map.entrySet().iterator();

//Map的entrySet()返回一个Set集合,在集合中存放了Map.Entry类型的元素,每个Map.Entry对象代表Map中的一堆键和值。

while(it.hasNext())

{

Map.Entry entry=it.next();

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

}

//这种Map.Entry类型提供了获得键和值的方法,取值的时候很方便,不用知道该键的名称就可以取

Map<String,String> map1=new TreeMap<String,String>();

//TreeMap实现了SortedMap接口,对键对象进行排序,和TreeSet一样,TreeMap也有自然排序和客户化排序

map1.put("1", "test1");

map1.put("3", "test3");

map1.put("2", "test2");

map1.put("0", "test0");

Set<String> keys=map1.keySet();

//keySet()获得的是一个集合中所有的键对象

Iterator<String> it2=keys.iterator();

while(it2.hasNext())

{

String key=it2.next();

String value=map1.get(key);

//通过键来取得Map中的值

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

}

}

}


下面是实现题目的一段代码:


public class Jia {

public static void main(String[] args) {

String str = "adf adf ad adf adf ad ad f ad ad";

String[] items = str.split(" ");

Map<String, Integer> map = new HashMap<String, Integer>();//根据需要选择类型

for (String s : items) {

if (map.containsKey(s))

map.put(s, map.get(s) + 1);

else {

map.put(s, 1);

}

}

List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>();

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

list.add(entry);

}

Collections.sort(list, new EntryComparator());


for (Entry<String, Integer> obj : list) {

System.out.println(obj.getKey() + "\t" + obj.getValue());

}

}

}


class EntryComparator implements Comparator<Entry<String, Integer>> {//实现Comparator接口

public int compare(Entry<String, Integer> o1, Entry<String, Integer> o2) {

return o1.getValue() > o2.getValue() ? 0 : 1;

}

分享到:
评论

相关推荐

    js代码-005 ['1','2','3'].map(parseInt)一道题的扩展,实现map,call

    首先,让我们来看一下`map()`方法。`map()`是数组的一个原生方法,它接收一个函数作为参数,这个函数被称为回调函数。`map()`会遍历数组中的每一个元素,对每个元素执行回调函数,并返回一个新的数组,新数组的元素...

    acm程序例题2道,还有一道思考的题目(第四题)

    题目没有给出具体的内容,但从题目描述来看,它与ACM程序设计有关,可能是对某种数据结构或算法的应用。根据上下文推测,这道思考题目可能是关于如何优化大整数运算的问题,比如更高效地处理稀疏大整数等。 ### ...

    前端大厂最新面试题-getAllHTMLTags.docx

    从算法角度来看,去重操作可以通过 Set 或者 HashMap 来做。从性能上来说,肯定是 Set,因为 HashMap 存储的话实际上 value 没有用处。或者我们可以使用快慢指针来做。 实现代码 下面是一个简单的实现代码: ```...

    leetcode热题100java实现代码

    这样的例子还有很多,从基础的数组操作到高级的数据结构应用,每一道题都是一次对编程思维的挑战。在学习过程中,不仅要理解代码的实现,还要关注其背后的思路,以及如何优化解决方案,比如减少空间复杂度、提高时间...

    前端面试题-手写代码实现

    现在我们来看看压缩包内的文件: 1. **快手.js**:这可能是一道关于快手App特定功能或技术问题的手写代码实现。例如,可能要求实现一个短视频播放器的控制逻辑,或者是一段处理用户上传图片和视频的代码。也可能...

    实操模拟题(30分).rar

    首先,我们来看`train1.csv`。这是一个CSV(Comma Separated Values)文件,通常用于存储表格数据。CSV文件格式简单,易于读写,被广泛应用于数据分析和机器学习等领域。在train1.csv中,可能包含了大量结构化的训练...

    一道Java集合框架题 多种解题思路

    首先,我们来看看使用List集合来实现的解题思路。List接口在Java集合框架中代表有序的列表,允许有重复元素,支持索引访问。这里使用了ArrayList和LinkedList两种List的实现。ArrayList基于动态数组,提供了随机访问...

    C++测试题整理

    首先,我们来看看C++的基础知识。C++基于C语言,增加了类、模板、命名空间、异常处理等面向对象特性。类是C++中实现面向对象编程的主要工具,它定义了一组数据成员(属性)和成员函数(方法),可以看作是对象的蓝图...

    《Python编程:从入门到实践》第1-11章的编程题的代码。.zip

    从标题来看,这个压缩包包含了该书前11章的编程练习题的代码,旨在帮助读者巩固所学知识,提高编程技能。通过分析这些代码,我们可以学习到Python编程的诸多关键概念。 1. **基础语法**:前11章的代码会涉及到...

    数据结构1800题+答案

    首先,我们来看数据结构的基本概念。常见的数据结构包括数组、链表、栈、队列、树、图等。数组是最基础的,它提供了随机访问元素的能力;链表则允许动态地添加或删除元素,但访问速度较慢;栈遵循“后进先出”(LIFO...

    CPA青少年宫python二级考试测试题2套含答案解析

    首先,我们来看看Python的基础知识。Python以其简洁易读的语法著称,它的核心概念包括变量、数据类型(如整型、浮点型、字符串、布尔型和列表、元组、字典等复合类型)、控制结构(如if-else语句、for循环、while...

    河北省唐山市曹妃甸区第二中学2020学年八年级英语上学期第一次月考试题(无答案) 人教新目标版.doc

    17. 此题未给出具体内容,但根据上下文推测可能是一道填空或完形填空题,需要具体题目才能解答。 这份试题旨在检查学生的英语综合能力,涵盖日常对话、语法、阅读理解等多个方面,对于八年级的学生来说,这样的练习...

    leetcode题库-leetcode:leetcode

    从文件名称列表"leetcode-master"来看,该项目可能采用的是master分支,这通常意味着这是项目的主线,包含了所有主要的代码和更新。在实际项目中,通常会包含如下结构: - `problems`目录:存放每个LeetCode题目的...

    cpp代码-4.4第三题

    从描述“cpp代码-4.4第三题”来看,没有提供更多的具体信息,所以我们只能根据常见的编程习题类型来推测可能涉及的知识点。 在C++编程中,一道练习题可能涵盖以下几个方面: 1. **基础语法**:这可能涉及到变量...

    2022年3月浙江工业大学程序设计迎新赛决赛 - 简要题解.pdf

    首先,我们来看“水质检测”题。这道题目要求参赛者对一个序列进行分析,判断序列的最大值和平均值是否满足特定条件。解决这类问题,基本思路是先对序列进行排序,然后分别求出最大值和平均值,最后根据条件判断输出...

    华为OD机试C卷- 高效的任务规划(Java & JS & Python & C).md-私信看全套OD代码及解析

    从问题描述来看,这是一道典型的贪心策略问题。贪心策略通常应用于寻求最优解的问题上,其中每个步骤都追求局部最优解,以期望最终得到全局最优解。 具体到本题,关键在于如何选择最佳的工作顺序。一个有效的策略是...

    华为OD机试C卷- 考古学家(Java & JS & Python).md-私信看全套OD代码及解析

    本题目源自华为OD(Outsourcing Development)机试的一道编程题,主要考察应聘者在Java、JavaScript、Python三种语言下的编程能力,特别是对于数据结构、算法的理解和运用能力。题目背景设定在一个考古场景下,要求...

    LeetCode:我的LeetCode记录

    首先,我们来看看C++在处理LeetCode问题时的优势。C++提供了丰富的STL(标准模板库),包括容器(如vector、list、set、map等)、迭代器、算法等,这些工具使得处理数组、链表、树等数据结构变得简单而高效。例如,...

    CodeUp-Python-basic-100

    "CodeUp-Python-basic-100"项目中的练习题,涵盖了上述所有概念,从基础的语法到实际问题的解决,每一道题目都是对Python基础知识的深入理解和实践。通过逐个解题,学习者不仅可以巩固所学,还能锻炼解决问题的能力...

    华为OD机试C卷- 田忌赛马(Java & JS & Python & C).md-私信看全套OD代码及解析

    本题是一道典型的排序与组合问题,旨在考查应聘者对于数据结构的理解和算法设计能力。题目背景取自中国古代的典故“田忌赛马”,要求应聘者通过调整数组`a`中数字的顺序,使得`a[i] &gt; b[i]`的元素对数量尽可能多。...

Global site tag (gtag.js) - Google Analytics