1.实例方法需要通过super来调用超类中的实例方法;实例方法需要通过类名称来调用超类的类方法;实例方法需要向下转型才能调用子类的实例方法;实例方法可以直接调用本类的实例方法。
2.HashSet子类依靠【hashCode();equals()】方法区分重复元素.
HashSet内部使用Map保存数据,即将HashSet的数据作为Map的key值保存,这也是HashSet中元素不能重复的原因。而Map中保存key值前,会去判断当前Map中是否含有该key对象,内部是先通过key的hashCode,确定有相同的hashCode之后,再通过equals方法判断是否相同。
3.编程题【有假币】
**向上取整方法 Math.ceil()
**
// write your code here
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
if(n==0){
break;
}
int count = 0;
while(n>=2){
n = (int)Math.ceil((double)n/3);
count++;
}
System.out.println(count);
}
}
}
4.编程题【求正数数组的最小不可组成和】
import java.util.*;
public class Solution {
/**
* 正数数组中的最小不可组成和
* 输入:正数数组arr
* 返回:正数数组中的最小不可组成和
*/
public int getFirstUnFormedNum(int[] arr) {
int min = Integer.MAX_VALUE;
int max = 0;
for (int i = 0; i < arr.length; i++) {
max += arr[i];
min = Math.min(min, arr[i]);
}
boolean res[] = new boolean[max + 1];
res[0] = true;
for (int i = 0; i < arr.length; i++) {
for (int j = max; j >= arr[i]; j--) {
res[j] = res[j - arr[i]] || res[j];
}
}
for (int i = min; i < res.length; i++) {
if (!res[i])
return i;
}
return max + 1;
}
}
5.反射:getMethod与getDeclaredMethod的区别
getDeclaredMethods
获取的是类自身声明的方法,包含public、protected和private方法。
getMethods
获取的是类的所有public方法,包括自身的和从父类、接口继承的。
6.自动装箱/装箱 自动拆箱/拆箱
7.字符串的不可变性:字符串的内容一旦声明,无法修改
方法中修改字符串的值,并不影响字符串最初的值,只是创建一个临时变量,临时变量指向新的空间。
包访问权限:不需要如何修饰符的访问权限
8.编程题【最难的问题】
用三目运算符使代码更加简洁明了。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner= new Scanner(System.in);
while(scanner.hasNext()){
String str = scanner.nextLine();
StringBuilder sb = new StringBuilder();
for(int i =0;i<str.length();i++){
if(str.charAt(i)==' '){
sb.append(' ');
}else{
sb.append((char)(str.charAt(i)>'E'?str.charAt(i)-5:str.charAt(i)+21));
}
}
System.out.println(sb);
}
}
}
9.编程题【因子个数】
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int n = scanner.nextInt();
int count = 0;
for(int i =2;i<Math.sqrt(n);i++){
if(n%i==0){
while(n%i==0){
n=n/i;
}
count++;
}
}
if(n!=1){
count++;
}
System.out.println(count);
}
}
}