写的比较多,但自我感觉还是比较实用的。
J2se基础:
1. 八种基本数据类型的大小,以及他们的封装类;
Java语言提供了八种基本类型。六种数字类型(四个整数型,两个浮点型),一种字符类型,还有一种布尔型。
a)、整数:包括int,short,byte,long
b)、浮点型:float,double
c)、字符:char
d)、布尔:boolean
基本类别 | 大小 | 最小值 | 最大值 | 包装类 |
---|---|---|---|---|
boolean | ------- | ------ | ------- | Boolean |
char | 16-bit | Unicode 0 | Unicode 2^16-1 | Character |
byte | 8-bit | -128 | +127 | Byte |
short | 16-bit | -2^15 | +2^15-1 | Short |
int | 32-bit | -2^31 | +2^31-1 | Integer |
long | 64-bit | -2^63 | +2^63-1 | Long |
float | 32-bit | IEEE754 | IEEE754 | Float |
double | 63-bit | IEEE754 | IEEE754 | Double |
更详细信息网址:http://blog.csdn.net/jj___jj/article/details/5589415
2. switch能否用String做参数?
switch(expr1)中,expr1是一个整数表达式,整数表达式可以是int基本类型或Integer包装类型,由于,byte,short,char都可以隐含转换为int,所以,这些类型以及这些类型的包装类型也是可以的。因此传递给 switch 和case 语句的参数应该是 int、 short、 char 或者 byte,还有enum。 long,string 都不能作用于swtich。
在jdk 1.7中switch的参数类型可以是字符串类型。
3.equals 和==的区别
a). == 是一个运算符。
b).Equals则是string对象的方法,可以.(点)出来。
我们比较无非就是这两种 1、基本数据类型比较 2、引用对象比较
a)、基本数据类型比较
==和Equals都比较两个值是否相等。相等为true 否则为false;
b)、引用对象比较
==和Equals都是比较栈内存中的地址是否相等 。相等为true 否则为false;
需注意几点:
a)、string是一个特殊的引用类型。对于两个字符串的比较,不管是 == 和 Equals 这两者比较的都是字符串是否相同;
b)、当你创建两个string对象时,内存中的地址是不相同的,你可以赋相同的值。
所以字符串的内容相同。引用地址不一定相同,(相同内容的对象地址不一定相同),但反过来却是肯定的;
c)、基本数据类型比较(string 除外) == 和 Equals 两者都是比较值;
4.Object有哪些公用方法;
Object是所有类的父类,任何类都默认继承Object。
clone
保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常
equals
在Object中与==是一样的,子类一般需要重写该方法
hashCode
该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到
getClass
final方法,获得运行时类型
wait
使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。
调用该方法后当前线程进入睡眠状态,直到以下事件发生:
a). 其他线程调用了该对象的notify方法
b). 其他线程调用了该对象的notifyAll方法
c). 其他线程调用了interrupt中断该线程
d). 时间间隔到了
此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常
notify
唤醒在该对象上等待的某个线程
notifyAll
唤醒在该对象上等待的所有线程
toString
转换成字符串,一般子类都有重写,否则打印句柄
Map是键值对,键Key是唯一不能重复的,一个键对应一个值,值可以重复。
TreeMap可以保证顺序,HashMap不保证顺序,即为无序的。
Map中可以将Key和Value单独抽取出来,其中KeySet()方法可以将所有的keys抽取正一个Set。而Values()方法可以将map中所有的values抽取成一个集合。
不包含重复元素的集合,set中最多包含一个null元素
只能用Lterator实现单项遍历,Set中没有同步方法。
有序的可重复集合。
可以在任意位置增加删除元素。
用Iterator实现单向遍历,也可用ListIterator实现双向遍历
Queue遵从先进先出原则。
使用时尽量避免add()和remove()方法,而是使用offer()来添加元素,使用poll()来移除元素,它的优点是可以通过返回值来判断是否成功。
LinkedList实现了Queue接口。
Queue通常不允许插入null元素。
Stack
Stack遵从后进先出原则。
Stack继承自Vector。
它通过五个操作对类Vector进行扩展,允许将向量视为堆栈,它提供了通常的push和pop操作,以及取堆栈顶点的peek()方法、测试堆栈是否为空的empty方法等
用法
如果涉及堆栈,队列等操作,建议使用List
对于快速插入和删除元素的,建议使用LinkedList
如果需要快速随机访问元素的,建议使用ArrayLis
我们先看2个类的定义
public class Hashtable
extends Dictionary
implements Map, Cloneable, java.io.Serializable
public class HashMap
extends AbstractMap
implements Map, Cloneable, Serializable
01. public synchronized V put(K key, V value) { //###### 注意这里1
02. // Make sure the value is not null
03. if (value == null) { //###### 注意这里 2
04. throw new NullPointerException();
05. }
06. // Makes sure the key is not already in the hashtable.
07. Entry tab[] = table;
08. int hash = key.hashCode(); //###### 注意这里 3
09. int index = (hash & 0x7FFFFFFF) % tab.length;
10. for (Entry e = tab[index]; e != null; e = e.next) {
11. if ((e.hash == hash) && e.key.equals(key)) {
12. V old = e.value;
13. e.value = value;
14. return old;
15. }
16. }
17. modCount++;
18. if (count >= threshold) {
19. // Rehash the table if the threshold is exceeded
20. rehash();
21. tab = table;
22. index = (hash & 0x7FFFFFFF) % tab.length;
23. }
24. // Creates the new entry.
25. Entry e = tab[index];
26. tab[index] = new Entry(hash, key, value, e);
27. count++;
28. return null;
29.}
注意1 方法是同步的
01. public V put(K key, V value) { //###### 注意这里 1
02. if (key == null) //###### 注意这里 2
03. return putForNullKey(value);
04. int hash = hash(key.hashCode());
05. int i = indexFor(hash, table.length);
06. for (Entry e = table[i]; e != null; e = e.next) {
07. Object k;
08. if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
09. V oldValue = e.value;
10. e.value = value;
11. e.recordAccess(this);
12. return oldValue;
13. }
14. }
15. modCount++;
16. addEntry(hash, key, value, i); //###### 注意这里
17. return null;
18.}
注意1 方法是非同步的
HashMap Hashtable
父类 AbstractMap Dictiionary
是否同步 否 是
k,v可否null 是 否
HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,
主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。
HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。