每日一题:4_19

解析:B

解决哈希冲突的方法有三种,分别是:

 开放地址法:寻找下一个为空的数组下标,而后将冲突元素存储
再散列法(二次哈希法):再次使用一个不同的哈希算法再计算一次 (第一次%16换另一个数进行%运算)
链地址法(拉链法):将所有冲突元素按照链表存储,冲突后时间复杂度变为O(1+n)n为冲突元素个数)[hashMap就是用这种方法]

解析:D

解析:A
   CopyOnWriteArrayList适用于写少读多的并发场景。
    ReadWriteLock即为读写锁,他要求:
            写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。
            在读多写少的情况下可以提高效率。
  ConcurrentHashMap是采用分段锁机制,写操作加锁,读操作不加锁。
  volatile只保证多线程操作的可见性,不保证原子性。

解析:D

Java中的多线程是一种抢占式的机制,而不是分时机制。抢占式的机制是有多个线程处于可运行状态,但是只有一个线程在运行。 

共同点:

 1. 他们都是在多线程的环境下,都可以在程序的调用处阻塞指定的毫秒数,并返回。 

 2. wait()和sleep()都可以通过interrupt()方法 打断线程的暂停状态 ,从而使线程立刻抛出InterruptedException。

 不同点:

 1.每个对象都有一个锁来控制同步访问。Synchronized关键字可以和对象的锁交互,来实现线程的同步。 sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。 

 2.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 

 3.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常  

 4.sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。  

 5.wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。  

 

 

编程题:

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数(数值为0或者字符串不是一个合法的数值则返回0)。

输入描述 :输入一个字符串, 包括数字字母符号, 可以为空
输出描述 :如果是合法的数值表达则返回该数字,否则返回0

输入例子 :
+2147483647
1a33

输出例子 :
2147483647
0

 

public static int StrToInt(String str){
        //str.length() == 0和str.equals("")是一个东西,用来判断字符串是否为空值;
        //(1)首先要判断字符串是否为空,然后将字符串转换成字符数组;
        //(2)字符'0'对应的ASCII码值是48(转化为int类型),而字符'9'对应的ASCII码值是57,考虑是否溢出;
        //(3)把读出的每一个数字累加,为最后的结果
        if (str.length() == 0 || str.equals("")){
            return 0;
        }
        char[] arr = str.toCharArray();
        boolean flag = true;
        int start = 0 ;
        if (arr[0] == '+' || arr[0] =='-'){
            start = 1 ;
            if ( arr[0] == '-'){
                flag = false;
            }
        }
        int sum = 0;
        for (int i = start; i < arr.length; i ++){
            if (arr[i]<48 || arr[i]>57){
                return 0;
            }
            sum = sum*10 + (arr[i]-'0');
        }
        return flag ? sum:sum*(-1);
    }

 

Java中三目运算符:

三目运算的基本表达式:条件表达式=b?x:y。

如下图所示:表达的意思是如果b为true,则计算x的值,如果b为false,则计算y的值;

如果flag为true,返回值为sum,如果flag为false返回值为sum*(-1);

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值