笔试真题(笔记)—代码编写题

1、给定一个长度为字符串, 需要去除所有之前曾经出现过的字符,只保留第一次出现的字符

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param s string字符串 
     * @return string字符串
     */
    public String unique_string (String s) {
        HashSet<Character> set = new HashSet<>();
        //字符串转为字符数组
        char[] ch = s.toCharArray();
        StringBuilder sb = new StringBuilder();
 
        for (char c : ch) {
        // set.add(c) 本身就返回 true/false,不需要再用contains确认了
            if (set.add(c);) {
                sb.append(c);
            }
        }
        return sb.toString();
    }
}

2、看以下代码回答问题

public static void main(String[] args) 
{ 
	String s = new String("abc"); 
	// 在这中间可以添加N⾏代码,但必须保证s引⽤的指向不变,最终将输出变成abcd System.out.println(s); 
}

答案

public static void main(String[] args) { 
	String s = new String("abc"); 
	Field value = s.getClass().getDeclaredField("value"); 
	value.setAccessible(true); 
	value.set(s, "abcd".toCharArray()); 
	System.out.println(s); 
}

解析:要让s的输出为abcd就不能借助StringBuilder和StringBuffer的append方法,因为这样的话最后s还是abc,而StringBuilder和StringBuffer对象的值才是abcd。也不能使用s.replace(“abc”,“abcd”)方法,因为replace底层是借助于新建一个StringBuffer对象,然后返回StringBuffer对象。

public static void main(String[] args) {
	 Integer i1 = 100; 
	 Integer i2 = 100; 
	 // i1 == i2?    true
	 Integer i3 = 128; 
	 Integer i4 = 128; 
	 // i3 == i4?    false
 }

答案: i1 == i2为true i3 == i4为false
在Interger类中,存在⼀个静态内部类IntegerCache, 该类中存在⼀个Integer cache[], 并且存在⼀ 个static块,会在加载类的时候执⾏,会将-128⾄127这些数字提前⽣成Integer对象,并缓存在cache数 组中,当我们在定义Integer数字时,会调⽤Integer的valueOf⽅法,valueOf⽅法会判断所定义的数字 是否在-128⾄127之间,如果存在则直接从cache数组中获取Integer对象,如果超过,则⽣成⼀个新的 Integer对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值