1.public class T {
int squares=81;
public static void main(String[] args) {
new T().go();
}
void go(){
incr(++squares);
System.out.println(squares);
}
void incr(int squares){
squares+=10;
}
返回值为82,没有改变squares的值,不是引用传递不是c++
2.建个test类 在cmd中运行时输入java test a b c,并且在你的main函数里面加这段话:System.out.println("arg is"+args[0]+" "+args[1]+" "+args[2]),然后看看输出是什么?
是不是:
This is a simple Java program
arg is a b c
3.最后总结一下平常遇到的比较常见的将对象判定为可回收对象的情况:
1)显示地将某个引用赋值为null或者将已经指向某个对象的引用指向新的对象,比如下面的代码:
Object obj = new Object();
obj = null;
Object obj1 = new Object();
Object obj2 = new Object();
obj1 = obj2;
2)局部引用所指向的对象,比如下面这段代码:
void fun() {
.....
for(int i=0;i<10;i++) {
Object obj = new Object();
System.out.println(obj.getClass());
}
}
循环每执行完一次,生成的Object对象都会成为可回收的对象。
3)只有弱引用与其关联的对象,比如:
WeakReference<String> wr = new WeakReference<String>(new String("world"));
4.ArrayList<Object> x2=new ArrayList<String>();编译失败
5. sacnaner scanner=new Scanner("one ,5,true,3,true,6,7,false");
scanner.useDelimiter(",");
while(scanner.hasNext()){
if(scanner.hasNextBoolean()){
system.out.print(scanner.next()+" ");
}else{
scanner.nextBoolean();}
6.java的this和super只能用在非静态的方法
7.子类和父类有相同的成员变量时,存在两个,用类名引用
8.成员变量可以被继承,如果没有同名的成员变量,子类.成员变量名 可以访问父类的成员变量
9.实现接口也可以认为 cat implements jumper{} cat is-a jumper
10.
1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key
2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.
3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.
a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.
b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象 才可以真正定位到键值对应的Entry.
c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value
4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.
a. Comparator可以在创建TreeMap时指定
b. 如果创建时没有确定,那么就会使用key.compareTo()方法,这就要求key必须实现Comparable接口.
TreeMap是使用Tree数据结构实现的,所以使用compare接口就可以完成定位了.
11.
WrappedString 的hashCode()是继承自Object类,而String的hashCode()时重写过的仅与字符串的内容有关。ws1 和ws2存储地址不同,所以hashCode()的返回值不同, 而s1和s2字符串的内容相同,哈希值相同。
12.
在实际开发过程中,我们经常会遇到需要使用对象,而不是内置数据类型的情形。为了解决这个问题,Java语言为每一个内置数据类型提供了对应的包装类。
所有的包装类(Integer、Long、Byte、Double、Float、Short)都是抽象类Number的子类。
Integer也有doublevalue的值
13.List<? extends String> list ;list.add("foo")错误。
14.priorityqueue pq。pq.poll()获取队头元素并移除。peek()获取队头元素但是不移除。
15.enum中 ONE==ONE 和ONE.equals(ONE)都保证是true
16.
HashSet和HashMap的区别
HashMap* *HashSet*
HashMap实现了Map接口 HashSet实现了Set接口
HashMap储存键值对 HashSet仅仅存储对象
使用put()方法将元素放入map中 使用add()方法将元素放入set中
HashMap中使用键对象来计算hashcode值 HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
HashMap比较快,因为是使用唯一的键来获取对象 HashSet较HashMap来说比较慢
17.
TreeSet是依靠TreeMap来实现的,TreeMap是有平衡二叉树来实现的
18
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
返回此 set 的部分视图,其元素范围从 fromElement 到 toElement。
TreeSet<Integer> s=new TreeSet<Integer>();
TreeSet<Integer> subs=new TreeSet<Integer>();
for(int i=606;i<613;i++)
{
if(i%2==0)
s.add(i);
}
subs=(TreeSet<Integer>)s.subSet(608, true,611,true);
s.add(609);
System.out.println(s+" "+subs);
[606, 608, 609, 610, 612] [608, 609, 610]
19.
Arrays.binarySearch()如果没有查找到,返回最大长度
20.
sortedSet只是个接口,只有treeset可用
21.