思路:先排序,再根据K值进行输出
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
String[] temp=str.split(" ");
int[] array=new int[temp.length-1];
//parseInt()将字符串转化为整数
int k=Integer.parseInt(temp[temp.length-1].toString());
for(int i=0;i<temp.length-1;i++){
array[i]=Integer.parseInt(temp[i]);
}
int[] a=number(array,k);
StringBuffer sb=new StringBuffer();
// char[] t=new char[a.length];
for(int i=0;i<a.length;i++){
sb.append(a[i]+" ");
}
System.out.println(sb.toString());
}
//也可采用for循环将元素输出
public static int[] number(int[] arr,int k){
Arrays.sort(arr);
int[] array=new int[k];
for(int i=0;i<k;i++ ){
array[i]=arr[i];
}
return array;
}
}
删数
思路:
存放n个数,且都是从0到n-1的数字。因为每次删除的都是当前位置的后面第2个,那么我们就可以这样写:(i+2)%size; 当i==0的时候,
我们移除的就是2号下标,接着需要移除4号下标,那么新的i = (i+2)%size; 那么结束条件应该是什么?我们要找到存活的,显而易见当集合的size等于1的时候停止删除
import java.util.*;
public class Main1 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int k=sc.nextInt();
List<Integer> list=new ArrayList<>();
for(int i=0;i<k;i++){
//把数组中元素添加到list中
list.add(i);
}
int index=0;
//list.size( )有效元素的个数
while(list.size()>1){
index=(index+2)%list.size();
list.remove(index);
}
//list.get(i) 获取i号位置的元素
System.out.println(list.get(0));
}
}
}
内存回收:
Java的Gc回收是完全自动,JVM类似上帝随机消亡一般,没有提供相关api手动回收,所有的内存分配和回收权限都在JVM,在开发人员手里没有绝对的强制垃圾回收的方法。但还是有一些不太可靠的方法来回收:下面的机制对于JVM来说都只起到建议的作用,谁都不能左右JVM,只有内存当事人才能左右。
1.对于不再引用的对象,及时把它的引用赋值为null,obj=null;这个是告示作用
2.如果内存已经很饱和了,也只能通过调用System.gc)来建议垃圾回收器开始回收垃圾,通知GC运行,但是Java语言规范并不保证GC一定会执行。这个也只是起到告知作用。
Junit主要用来单元测试
public class Test {
public static void main(String [] args){
System.out.println(new B().getValue());
}s
tatic class A{
protected int value;
public A(int v) {
setValue(v);
}p
ublic void setValue(int value){
this.value = value;
}p
ublic int getValue(){
try{
value++;
return value;
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);
System.out.println(value);
}r
eturn value;
}
}s
tatic class B extends A{
public B() {
super(5);
setValue(getValue() - 3);
}p
ublic void setValue(int value){
super.setValue(2 * value);
}
}
}
22
34
17
当子类覆盖有父类的方法时,优先调用子类方法。