今天面试时问到我一个关于假如有个数组,里面有不知多少个元数,请你把相同元数给统计出来,如String [] a={"a","c","a","b","c","d"};
哎,面试能力差,没做出来,刚在谷歌一找,就搞定了!
import java.util.HashMap;
import java.util.Set;
public class Test {
public static void main(String[] args){
String [] a={"a","c","a","b","c","d"};
HashMap<String, Integer> hash = new HashMap<String, Integer>();
for (int i = 0; i < a.length; i++) {
try {
if (!hash.isEmpty() && hash.containsKey(a[i])) {
hash.put(a[i].toString(), hash.get(a[i]) + 1);
} else {
hash.put(a[i].toString(), 1);
}
} catch (Exception e) {
}
}
Set<String> set = hash.keySet();
for (String key : set) {
System.out.println(key + "==>" + hash.get(key));
}
}
}
/*相关知识
* Map 对象来缓存数据, 比较常见的处理流程是:
1. 调用 Map 的 get() 方法获取数据;
2. 如果返回不为 null, 直接返回该数据;
3. 如果返回为 null, 则生成数据, 或者从其他地方获取数据, 然后存放入 Map 中, 最后返回该数据.
这里, 我们可以通过使用 Map 的containsKey() 方法来检测是否数据是否存在, 如果key存在, 则表明已经获取过一次数据, 那么直接返回该 key 在 Map 中的值. 不管是否为 null 都直接返回; 如果 key 不存在, 则去生成或者获取数据, 并放入到 Map 中, 并返回该数据.
这里使用 containsKey() 来检测可以应用于: 1. 从其他对方获取的数据可能为空, 并且不会有变化; 2. 获取数据比较耗时. 这个场景下, 使用该方法可以大大降低消耗, 特别是在同步情况下.
*/
分享到:
相关推荐
### Java程序员面试题及答案解析 ...通过以上分析,我们可以看到这些面试题涉及到了Java语言的基础知识、集合框架的理解以及字符串处理等方面的内容,对于准备面试的Java程序员来说是非常有价值的练习题。
【微软面试题解析】 1. 两两之差绝对值最小的值:此题考察数组处理和最优化问题。可以通过排序数组,然后计算相邻元素之间的差值,找到最小的差值。 2. 字符转整数函数:可以使用C++的`std::stoi`函数,或者自定义...
10. **数组中元素的出现次数**:可以使用哈希表或计数排序快速统计。 11. **斜率最大直线**:可以将点的坐标视为二维数组,然后计算斜率,排序后找出最大值。 12. **连续相邻数列检查**:通过遍历和比较当前值与前...
Java 技术面试题整理 以下是 Java 技术面试题整理的知识点: 1. Servlet 执行流程: * 客户端发出 HTTP 请求 * Web 服务器将请求转发到 Servlet 容器 * Servlet 容器解析 URL 并根据 web.xml 找到相应的 Servlet ...
"Java面试题技术面试" 以下是从给定的文件中生成的相关知识点: 1. Servlet 执行流程: Servlet 容器将客户端的 HTTP 请求转发给 Servlet,Servlet 根据 Request 对象获取请求信息,并将响应信息放入 Response ...
这些题目涵盖了程序员面试中常见...这些面试题覆盖了算法设计、数据结构、位运算、字符串处理、链表操作等多个重要领域,是程序员面试中常见的挑战。理解和掌握这些问题的解题思路对于提升编程技能和应对面试至关重要。
【诺西笔试题面试题详解】 1. 位运算题: - 0xABCD ^ 0x0F0F 的结果是将两个十六进制数对应位进行异或操作,0xABCD的二进制表示中,每四位与0x0F0F的二进制进行异或,结果为0x6566。 - 0xA15C | 0x9753 的结果是...
33. 二进制位统计:可以使用位操作来统计一个整数的二进制表示中bit为1的个数。 34. JVM内存模型与垃圾回收机制:JVM内存模型规定了内存的分配和管理,垃圾回收机制负责回收不再使用的内存。 35. JVM命令:包括jps...
1. **位运算原理**:可以使用位运算来统计二进制中1的个数。具体做法是从最低位开始,每次将`m`与`m-1`进行按位与操作,这会消除掉`m`二进制表示中最右边的一个1。循环执行这一过程,直到`m`变为0。 2. **代码实现**...
#### 微软十五道面试题详解 **1. 整数数组两两之差绝对值最小值** - **题目描述**:给定一个整数数组,请求出两两之差绝对值最小的值。 - **解决方案**:可以先对数组进行排序,然后遍历相邻元素,计算它们之间的...
- **问题描述**:给定一个数组,统计数组中无序对的数量。无序对定义为一对元素,其中前一个数比后一个数大。例如,{1, 3, 2} 中有一个 (3, 2),而 {1, 5, 0, 6} 中有 (5, 0), (5, 6), (0, 6)。 - **知识点**:数组...
在前端工程师的面试中,数学能力是不可或缺的一部分,许多面试题都涉及到数学知识的运用。以下是一些常见的面试题及其涉及的数学知识点: 1. **三维形体的表面积**:这通常涉及到几何知识,特别是立体几何,要求...
3. **计算字节中的1的个数**:这道题目要求统计一个字节中二进制表示下1的个数。可以通过位操作逐个检查每个比特位,如果与1相与的结果非零,则该位是1。示例代码中的`comb`函数展示了这种算法。 4. **搜索给定的...
但要注意,这个函数没有处理字符串长度为0的情况,可能导致数组越界。正确的实现应该包括边界检查。 ```c char *revert(char *str) { int n = strlen(str); if (n == 0) return str; int i = 0; char c; for ...