备战2024秋招面试题-HashMap和Hashtable(附联想笔试真题)

前言: \textcolor{Green}{前言:} 前言:

快秋招了,那么这个专栏就专门来记录一下,同时呢整理一下常见面试题
部分题目来自自己的面试题,部分题目来自网络整理

给我冲

  • 学习目标:
  • 面试题:
  • 算法题:
  • 完成?

学习目标:

  • HashMap和Hashtable
  • 联想笔试:作者得分

面试题:

HashMap和Hashtable

  1. 线程是否安全:HashMap 是非线程安全的, HashTable 是线程安全的。因为 HashTable 内部的方法基本都经过 synchronized 修饰。(如果你要保证线程安全的话就使用 ConcurrentHashMap);
  2. 效率:因为线程安全的问题, HashMap 要比 HashTable 效率高一点。另外, HashTable基本被淘汰,不要在代码中使用它;
  3. 对 Null key 和 Null value 的支持:HashMap 可以存储 null 的 key 和 value,但 null 作为键只能有一个,null 作为值可以有多个;HashTable 不允许有 null 键和 null 值,否则会抛出NullPointerException 。
  4. 初始容量大小和每次扩充容量大小的不同 :
    ① 创建时如果不指定容量初始值, Hashtable默认的初始大小为 11,之后每次扩充,容量变为原来的 2n+1。HashMap 默认的初始化大小为 16。之后每次扩充,容量变为原来的 2 倍。
    ② 创建时如果给定了容量初始值,那么Hashtable 会直接使用你给定的大小,而 HashMap 会将其扩充为 2 的幂次方大小( HashMap 中的tableSizeFor()方法保证)。
  5. 底层数据结构:JDK1.8 以后的 HashMap 在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度度大于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间。Hashtable 没有这样的机制。

今天直接来真题

算法题:

题目来源: \textcolor{blue}{题目来源: } 题目来源: 联想笔试
等级:中等 \textcolor{OrangeRed}{等级:中等} 等级:中等

题目描述

  发表论文,一篇论文的发表一般为三个作者,一作加3分,二作加2分,三作加1分。请按照字母顺序顺出每个作者得到的分数。

  • 输入
n   n代表有几篇论文
k   k代表一篇文论有几个作者

示例

输入:
	n = 3
	k = 3
	zmc hxl kwb
	k = 2
	zmc kwb
	k = 3
	zmc hxl kwb
输出:
	hxl 4
	kwb 4
	zmc 9

代码编写

方法1


import java.util.*;
import java.util.Map.Entry;


public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            TreeMap<String, Integer> map = new TreeMap<>();
            while (n-- > 0) {
                int k = sc.nextInt();

                String[] names = new String[3];
                for (int i = 0; i < k; i++) {
                    names[i] = sc.next();
                }
                int fen = 3;
                for (int i = 0; i < k; i++) {
                    map.put(names[i], map.getOrDefault(names[i], 0) + fen--);
                }                    
                
            }
            for (Entry<String, Integer> entry: map.entrySet()) {
                System.out.print(entry.getKey() + " ");
                System.out.println(entry.getValue());
            }
        }
    }
}


完成?

今天结束。之前学习的明白了吗?
  • HashMap和Hashtable
  • 联想笔试:作者得分

你可能感兴趣的:(面试总结-备战秋招,java,开发语言,算法,数据结构)