
本文共 2367 字,大约阅读时间需要 7 分钟。
1.通配符的上限,下限
首先引入泛型的使用:
public class A{ private T t;public A(T t){ this.t=t;}}
通配符"?"表示任意类型。可以指定泛型上限,如:
public class B { A a=new A(8);}
是会报错的,因为使用 “extends” 关键字,规定了泛型上限为Number, “?” 表示的类型必须是 Number 的子类,而子类不可以接受父类类型的参数。
还可以指定泛型下限,如:public class C { A a=new A("ohh");}
是可以的,因为使用"super"关键字,规定了泛型下限为"Sting",那么"?"表示的类型必须是String的父类,作为父类,是可以接受各种子类的数据的。
即:设置泛型上限只可用在声明,但不能修改,而下限用在方法参数时可以修改内容。
2. 所有数值类的父类:Number.
数值类:Integer,Byte,Long,Short,Double,Float
数值类有个范围:-128~127,在这个范围以外的数值是会被重新开辟空间存储的。
数值类是有缓存机制的。在-128~127之间的数字会被缓存,而范围之外的数据,会生成新的对象。Integer a=100;Integer b=100;Systrm.out.println(a==b);//运行结果为trueInteger c=2999;Integer d=2999;Systrm.out.println(c==d);//运行结果为false
数值类判断值相等时要用equals()方法而不是"=="。
3. 编译型/解释型语言:
写好的代码先被编译器编译,但不是被编译成机器语言,而是编译成字节码 (*.class) ,运行时,由JVM(Java虚拟机)将字节码一行一行地解释成机器码。
对于不同的操作系统有不同的虚拟机,因此说是真正实现跨平台。4.泛型
- 是不存在泛型数组的。
- 泛型只存在于编译阶段,在进入JVM之前,泛型信息会被擦除。——类型擦除。
字节码中已没有泛型相关的信息。
5.泛型接口的实现
interfaceITheGeneric{}
有两种实现方式.
(1)
第一种,类实现接口时,仍沿用泛型,如:
class Realizeimplements ITheGeneric{private T t;public Realize(T t){this.t=t;}}
在类实例化对象时才声明具体类型。
Realizer=new Realize();
写错了。应该是ITheGeneric r=new Realize();
(2)
第二种,实现类种就声明具体类型。
class Realizeimplements ITheGenric{}
写错了。应该是class Realize implements ITheGenric{}
这样在类实例化对象时不需要再声明具体类型。
6. 非线程安全/线程安全
ArrayList /Vector
StringBuilder / StringBuffer HashMap /HashTable 非线程安全指的是,在多个线程同时操作一个对象(共享数据)时出现问题。非线程安全指的是多线程操作同一个对象时可能会出现问题。 而线程安全是指操作同一个对象不会出现问题。
线程安全必须使用很多的synronized关键字来同步控制,这样必然导致性能的降低。7. 线程
Thread类和Runable接口,其中Thread类是实现了Runable接口的。
8.单元测试需要放在 public class中。
9. float与double
float都是转化为doule类型参与运算的。
10. 栈的实现
基于数组:需要Object类型的数组,Maxsize,CurrentSize。
基于链表:需要Node类,需要CurrientSize.11.队列的实现
栈Stack是泛型类,队列Queue是接口,一般用其实现类LinkedList.
(1)栈的方法有:push(E item);pop()//返回栈顶值并出栈empty();peek();
(2)队列的方法有:
add(E e) offer(E e)remove() poll() peek()
其中,add和remove方法在遇到队列满和空时会抛出异常,而pull和方法只返回false.
为节约空间,可以用循环队列,多出一个空间用来区分队满和队空。
12. import包要放在package后面
13. 树的高度,深度
高度:从叶子往上算。
深度:从根往下算。14.树的优势:方便查找。
15.完全二叉树的特点:除了最后一层以外都是满的。
16.循环语句中注意循环条件。
比如:
int size=stack.size();for(int i=0;i
和
for(int i=0;i
是不同的,易出错。
17.递归调用需要先写终止条件。
18.注意用栈实现队列和用队列实现栈的区别:
(1)
用栈实现队列:两个栈,实现出队操作:当栈A中元素依次出栈并入到栈B中,剩下一个元素时,该元素出栈即相当于队列的出队操作。重复即可。
(2)
用队列实现栈:两个队列,栈的出栈操作:当队列A中除最后一个元素外其他元素依次出队并入到队B中,此时将最后一个元素出队,即相当于出栈操作,而出队后还需要再将队B中的元素入回队A 中,恢复入栈的顺序。
这是两个的不同之处。发表评论
最新留言
关于作者
