一、list(数组)
1.ArrayList及 LinkedList比较对象时用的都是对象的底层equals方法。
二.HashSet(哈希表)
1.原int hashCode()方法将返回对象的地址,当你复写了此方法不再返回地址时,程序也可照常运行,因为程序是不会按照你所返回的地址进行运算的。
2.当你自定义一个对象时你通常应该复写此对象的 int hashCode()及 boolean equals() 方法,以方便进行定义自己的判断对象是否相同的方法及方便以后进行HashSet集合的使用。
3.HashSet判断对象是否相同的方法
1) 如果hashCode值不同,不会调用对象的equals方法
2) 如果hashCode值相同,再调用对象的equals方法
所以:当用HashSet存储对象时,因为HashSet是不允许存储相同对象的,所以一定要合理地重写你自定义对象的hashCode方法,因为原方法将直接返回对象的内存地址,而对象的内存地址是绝对不一样的,这样的话HashSet中将存储到相同的对象!当对象的hashCode方法返回同样的值时,HashSet将调用对象的equals方法以判断对象是否相同,如果不同才会存储。
四、TreeSet(二叉树)
1.TreeSet比较对象的方法为调用对象的compareTo()方法,且不能存储相同的元素。
五、当自定义一个对象时应该做些什么?
1、覆盖hashCode()方法
2、覆盖equals()方法//以便存放到HashSet中
3、实现Comparable接口,实现compareTo()方法//以便存放到TreeSet中
4、覆盖toString()方法//便于直接打印对象时显示有意义的信息
六、IO
1、字节流:通用,不仅可以处理图片还可以处理文字,但当读取同本机默认编码表不一致的文字时将会出现乱码。好像没有缓冲,当写数据的时候直接写入,不需再刷新。
2、字符流:不通用,不可以处理图片,但内部融合了编码表,可以指定文件按哪种类型的编码表进行读取,以防出现乱码。底部实现的方式任是字节流,只是有多了自己的缓冲区,所以当写入数据的时候需要刷新。
3、当读取文件的时候不需要进行刷新操作,但写文件的时候要进行刷新操作,或者最后关闭流也可以。
8、缓冲区的特点
提高数据的存取效率,要结合流才能使用,在流的基础上对流的功能进行了增强。
七、类型转换
//转换为数字
int d=integer.intValue();
int d2=Integer.parseInt("5");
//转换成字符串
String s=String.valueOf(5);
//编码
//1、按照默认字符集编码
//String---->byte[] str.getBytes();
// str.getBytes(charsetname);
//解码
//byte[]---->String new String(byte []);
new String(byte[],charsetname);
// 直接打印出byte[]数组中的值
Arrays.toString(byte[]);
八、键盘录入
当键盘录入结束的条件是(a=in.read())!=-1时,当你录入几个字符并回车后,它在将你录入的字符(包括回车键《\r\n》)完全处理完后,还会继续等待你输入,因为它循环结束的条件还没有满足,此时即使你输入“-1”,程序还不会结束,因为“-1”占两个字节,程序将逐个的读取每一个字节,所以得到的并不是“-1”这一字节,这时只有“ctrl+c”才可以结束程序的运行。
九、File对象
1、getPath():无论文件是否存在,都直接返回文件定义时的路径。
2、getAbsolutePath():无论文件是否存在,都直接返回文件实际存储的位置,如果文件不存在,则是当前目录作文文件的父目录。
3、getParent():如果文件定义时是相对路径,由于文件的父目录有可能经常改变,所以将返回空。