day_09 刷题日记

1.假设num已经被创建为一个ArrayList对象,并且最初包含以下整数值:[0,0,4,2,5,0,3,0]。 执行下面的方法numQuest(),最终的输出结果是什么?D

private List<Integer> nums;
//precondition: nums.size() > 0
//nums contains Integer objects
public void numQuest() {
  int k = 0;
  Integer zero = new Integer(0);
  while (k < nums.size()) {
    if (nums.get(k).equals(zero))
    	nums.remove(k);
    k++;
  }
}


[3, 5, 2, 4, 0, 0, 0, 0]
[0, 0, 0, 0, 4, 2, 5, 3]
[0, 0, 4, 2, 5, 0, 3, 0]
[0, 4, 2, 5, 3]

size=8 k=0 remove(0) k++,size-- nums=[0,4,2,5,0,3,0]

size=7 k=1 nums.get(1)=4 k++

size=7 k=2 nums.get(2)=2 k++

size=7 k=3 nums.get(3)=5 k++

size=7 k=4 nums.get(4)=0 remove(4) k++,size-- nums=[0,4,2,5,3,0]

size=6 k=5 nums.get(5)=0 remove(5) k++,size-- nums=[0,4,2,5,3]

2.假设如下代码中,若t1线程在t2线程启动之前已经完成启动。代码的输出是()B

public static void main(String[]args)throws Exception {
    final Object obj = new Object();
    Thread t1 = new Thread() {
        public void run() {
            synchronized (obj) {
                try {
                    obj.wait();
                    System.out.println("Thread 1 wake up.");
                } catch (InterruptedException e) {
                }
            }
        }
    };
    t1.start();
    Thread.sleep(1000);//We assume thread 1 must start up within 1 sec.
    Thread t2 = new Thread() {
        public void run() {
            synchronized (obj) {
                obj.notifyAll();
                System.out.println("Thread 2 sent notify.");
            }
        }
    };
    t2.start();
}


Thread 1 wake up
Thread 2 sent notify.

Thread 2 sent notify.
Thread 1 wake up

A、B皆有可能

程序无输出卡死

执行obj.wait()时释放了锁,所以t2可以获得锁然后执行notifyAll()。但是通知后,当前线程t2不会马上释放该对象锁,wait 所在的线程t1并不能马上获取该对象锁,要等到程序退出 synchronized 代码块后,当前线程t2才会释放锁,wait所在的线程t1也才可以获取该对象锁,然后打印t1线程里的语句。

3.定义一维数组的时候,必须显式指明数组的长度,定义**维数组的时候,其一维数组的长度必须首先指明,其它维度数组的长度可以稍后指定, “[]” 是数组运算符的意思,在声明一个数组时,数组运算符可以放在数据类型与变量之间,也可以放在变量之后。

img

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值