A:SimpleDateFormal类原文复制:Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally.
DateFormat这个接口的实现类都是不安全的。
B:HashMap实现的接口有:Serializable, Cloneable, Map<K,V> ,没有实现Cllection接口,HashMap实现的是Map接口,Map和Collection是同一级别的。
C:Arrays.asList方法返回的 这个List的实现类是java.util.Arrays.ArrayList这个类(而不是java.util.ArrayList)。
Arrays.asList():将一个数组转化为一个List对象,返回一个ArrayList类型的对象, 这个ArrayList类并非java.util.ArrayList类,而是Arrays类的静态内部类!用这个对象对列表进行添加删除更新操作,就会报UnsupportedOperationException异常。
D:ConcurrentHashMap使用segment来分段和管理锁,segment继承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock来保证线程安全。
ConcurrentHashMap具体是怎么实现线程安全的呢,肯定不可能是每个方法加synchronized,那样就变成了HashTable。从ConcurrentHashMap代码中可以看出,它引入了一个“分段锁”的概念,具体可以理解为把一个大的Map拆分成N个小的HashTable,根据key.hashCode()来决定把key放到哪个HashTable中。在ConcurrentHashMap中,就是把Map分成了N个Segment,put和get的时候,都是现根据key.hashCode()算出放到哪个Segment中。
A: 不一定在什么时刻执行垃圾回收。不可以指定时间,System.gc(),只是提醒JVM可以进行一次Full GC,但是什么时候真正执行,还是不知道的。
C:不允许程序员直接释放内存。
D: 程序员不需要创建线程来释放内存。JVM一旦启动,就会创建一个守护线程来监测是否需要有对象内存被释放。
在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。
A:形式参数和局部变量一样,生命周期随着方法的结束而终结,离不开方法。在Java中形式参数都是值传递的,所以可以视为一个局部变量。
B:形式参数可以是值或者对象。方法的参数列表指定要传递给方法什么样的信息,采用的都是对象的形式。因此,在参数列表中必须指定每个所传递对象的类型及名字。想JAVA中任何传递对象的场合一样,这里传递的实际上也是引用,并且引用的类型必须正确。
C:形参的值在调用时根据调用者更改,实参则用自身的值更改形参的值(指针、引用皆在此列),也就是说真正被传递的是实参。
D:Java中字段修饰符有:public、protected、default、private、final、static。在形式参数中,如果要使用字段修饰符,只能使用final修饰符。其他任何修饰符都能引起编译器错误。
但是用这个修饰符也有一定的限制,就是在方法中不能对参数做任何修改。 不过一般情况下,一个方法的形参不用final修饰。只有在特殊情况下,那就是:方法内部类。一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是final。
==是运算符,equal是方法。
1、java基本类型(short,int,long,byte,char,float,double,boolean)
比较基本类型,只能用==,不能用equal,这里的==比较的是两个变量的值。
2、比较包装类型
==比较的是内存地址,因为a和b是new出来的,是两个不同的对象,所以地址肯定是不同的,而equal比较的是值。
3、比较型
==比较的是内存地址,equal比较的是值
4、比较对象
==和equal比较的都是内存地址,因为equal没有被重写,没有被重写的equal都是object的equal方法。
方法重载的返回值的类型可以不同,因为判断方法重载的方法主要是根据方法的参数不同来判定;
方法重写的返回值类型需要相同,重写就是子类继承了父类的方法,并在此方法上重写属于自己的特征,既然是继承过来的,那么它的返回值类型就必须要相同 。
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶(n为正整数)总共有多少种跳法。
数据范围:1≤n≤201 \le n \le 201≤n≤20
进阶:空间复杂度 O(1)O(1) O(1) , 时间复杂度 O(1)O(1)O(1)示例1
输入
3输出
4示例2
输入
1输出
1
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int num=scanner.nextInt();
System.out.println(jumpFloorII(num));
}
public static int jumpFloorII (int number) {
// write code here
return 1<<--number;
}
}
小喵们很喜欢把自己装进容器里的(例如碗),但是要是碗的周长比喵的身长还短,它们就进不去了。
现在告诉你它们的身长,和碗的半径,请判断一下能否到碗里去。输入描述:
输入有多组数据。 每组数据包含两个整数n (1≤n≤2^128) 和r (1≤r≤2^128),分别代表喵的身长和碗的半径。 圆周率使用3.14。输出描述:
对应每一组数据,如果喵能装进碗里就输出“Yes”;否则输出“No”。示例1
输入
6 1 7 1 9876543210 1234567890输出
Yes No No
BigDecimal bigDecimal = new BigDecimal(xxx);其中,xxx可以是整型数据,也可以是数字内容的字符串数据,但不可以是浮点型数据。
compareTo:
bigDecimalA.compareTo(bigDecimalB):
BigDecimalA > bigDecimalB时,比较结果为1
BigDecimalA = bigDecimalB时,比较结果为0
BigDecimalA < bigDecimalB时,比较结果为-1
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while (scanner.hasNext()){
BigDecimal n=scanner.nextBigDecimal();
BigDecimal r=scanner.nextBigDecimal();
BigDecimal res=new BigDecimal("6.28").multiply(r);
System.out.println(n.compareTo(res)==1?"No":"Yes");
}
}
}