-
java中堆(heap)和堆栈(stack)有什么区别?
1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
-
启动一个线程是用run()还是start()?线程几种状态?
start()。启动线程肯定要用start()方法。当用start()开始一个线程后,线程就进入就绪状态,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。当cpu分配给它时间时,才开始执行run()方法(如果有的话)。START()是方法,它调用RUN()方法.而RUN()方法是你必须重写的. run()方法中包含的是线程的主体。
4种状态:
①创建(new)状态
②可运行(runnable)状态
③不可运行(not runnable)状态
④消亡(dead)状态
-
有效率的计算1024*80
80<<10
-
对数组进行排序 不可以用冒泡算法
利用java.util.Collections.sort()方法
java.util.Collections.sort(List<T> list, Comparator<? super T> c);
java.util.Collections.sort(List<T> list);
或者加入到set中
-
判断一个String 字符串中的重复单元比 ,比如 “ABCDAC”他的不重复的单位是四个,整个的长度是6 最后结果就是 4/6
String s = "aaaaaaabbbbcc";
char[] b = s.toCharArray();//方案1:
Set<Character> set = new HashSet<Character>();
for (int j = 0; j < b.length; j++) {
set.add(b[j]);//set会判断是否已有该元素,如果有则不添加元素,否则添加该元素
}
//set.toArray();//转换成Object[],输出元素
//print(set.size()+"/"+b.length);
String string = "";//方案2:
int num = 0;
for (int i = 0; i < b.length; i++) {
if (s.indexOf(b[i]) == i) {//"".indexof('s'),'s'在""中第一次出现的位置。
num++;//如果是第一次出现就+1.
//string += b[i];//保存元素到新字符串中,这可换成StringBuffer.append(b[i]);
}
}
//print(num+"/"+b.length);print(string);
分析:
例如:字符串长度为n,由m个元素组成。
方案1:是利用set不会存放重复元素来实现的。
方案2:利用indexof,取出元素第一次出现的位置。这个位置如果和他现在位置相同证明这个元素在字符串中是第一次出现的。如果不同,即不是第一次出现。num统计出现的字符数。一共循环n次,判断n次,num++为m次