⚫泛型定义一个广泛的变量,实现的时候通过擦除机制变成具体的变量,不用手动做强制类型转换。
⚫单线程程序中,一边遍历集合set一边删除元素,需要使用迭代器的remove方法,即iterator.remove。
⚫ConcreteEdgesGraph和ConcreteVerticesGraph的本质在于用不同的主体对象(Edges,Vertices)实现相同的功能(set、remove)等。
⚫Map.keySet(),表示将map对象的所有key值以set集合的形式返回,因为map也是无序的,且key值也是不可重复的,因此这里用set集合存储key并返回符合规则。
⚫JAVA中entryset的用法:
Iterator<Map.Entry<Integer,Integer>>it=map.entrySet().iterator();
while(it.hasNext())
{
Map.Entry<Integer,Integer> entry=it.next();
int key=entry.getKey();
int value=entry.getValue();
System.out.println(key+" "+value);
}
⚫java中equals方法的用法以及==的用法详解,参考博客
https://www.cnblogs.com/smart-hwt/p/8257469.html
⚫final的用法详解参考博客
https://www.cnblogs.com/chen-lhx/p/3896104.html
对于final的理解:无论是基本变量还是成员变量,final起的作用都是让这个内存空间中的值不再改变,基本变量(如int a = 10)a代表的内存空间中,存储的就是10,成员变量代表的内存空间中存储着一个地址,例如string变量的内存空间中就着一个地址A,string的不可变性体现在A指向的内存中存储的内容不变。
⚫set中,加元素用add,减元素用remove,判断是否含有某元素用contains;
list中,由于元素间有顺序了,add(int,object)表示把object加入到第int+1个位置,remove(int)表示删除第int+1个元素,后面元素向前挪动。
⚫修改eclipse代码风格的教程
https://www.cnblogs.com/farseer810/p/4391318.html
⚫eclipse中,在普通文件夹上右键->build path->use as source folders,将普通文件夹改成代码文件夹,否则文件夹里的代码无法运行。
⚫在集合set中,iterator.next()是一个方法,每用一次,当前元素就会向后移动一位。
⚫Map中的key和value都可以是Map类型,但value中map的数值一定要写清楚,如下:
Map<String, Map<String,Integer>> correspond = new HashMap<String,Map<String,Integer>>();//Map中的key和value都可以是Map类型
⚫intValue()将integer转化为int
⚫JAVA中使用stringbuffer中的insert(i,string),在可变字符串的i位置插入字符string
⚫string和stringbuffer之间的转化:
String str = new String(buffer);
StringBuffer sb = new StringBuffer(s);
⚫两个集合,都存储着string类型的单词,现在,想判断它们有没有共同单词,如果用retainall交集函数,由于底层操作不明确可能会出现错误(漏加或多加),逐个比较每个单词,把公共的单词放到另一个集合里更保险(当正确性比程序效率更重要时。
但是如果集合中存储的类型是Integer,则用retainall不会出现错误。
⚫关于并、交、差的函数用法:
https://blog.csdn.net/shenhonglei1234/article/details/52063399
⚫如何获得map中映射的个数:map.size();(不是从零开始,获得的是实际的映射个数)。
⚫Scanner in=new Scanner(System.in); //使用Scanner类定义对象
int b=in.nextInt(); //接收整形数据
float a=in.nextFloat(); //接收float型数据
String c = in.nextLine(); //接收String型数据
⚫java的参数传递是值传递还是地址传递结论:
1、基本类型作为参数传递时,是传递值的拷贝,无论怎么改变这个拷贝,原值是不会改变的
2、对象作为参数传递时,是把对象在内存中的地址拷贝了一份传给了参数。
⚫java中八种基本数据类型及其转换:
1)四种整数类型(byte、short、int、long): byte:8 位,用于表示最小数据单位,如文件中数据,-128~127 short:16 位,很少用,-32768 ~ 32767 int:32 位、最常用,-231-1~231 (21 亿) long:64 位、次常用 注意事项: int i=5; // 5 叫直接量(或字面量),即 直接写出的常数。 整数字面量默认都为 int 类型,所以在定义的 long 型数据后面加 L或 l。 小于 32 位数的变量,都按 int 结果计算。 强转符比数学运算符优先级高。见常量与变量中的例子。
2)两种浮点数类型(float、double): float:32 位,后缀 F 或 f,1 位符号位,8 位指数,23 位有效尾数。 double:64 位,最常用,后缀 D 或 d,1 位符号位,11 位指数,52 位有效尾 注意事项: 二 进 制 浮 点 数 : 1010100010=101010001.02=10101000.10210(2次方)=1010100.010*211(3次方)= . 1010100010*2^1010(10次方) 尾数: . 1010100010 指数:1010 基数:2 浮点数字面量默认都为 double 类型,所以在定义的 float 型数据后面加F 或 f;double 类型可不写后缀,但在小数计算中一定要写 D 或 X.X float 的精度没有 long 高,有效位数(尾数)短。 float 的范围大于 long 指数可以很大。 浮点数是不精确的,不能对浮点数进行精确比较。
3)一种字符类型(char): char:16 位,是整数类型,用单引号括起来的 1 个字符(可以是一个中文字符),使用 Unicode 码代表字符,0~2^16-1(65535) 。 注意事项: 不能为 0个字符。 转义字符:\n 换行 \r 回车 \t Tab 字符 " 双引号 \ 表示一个\ 两字符 char 中间用“+”连接,内部先把字符转成 int 类型,再进行加法运算,char 本质就是个数!二进制的,显示的时候,经过“处理”显示为字符。
4)一种布尔类型(boolean):true 真 和 false 假。
5)类型转换: char–> 自动转换:byte–>short–>int–>long–>float–>double 强制转换:①会损失精度,产生误差,小数点以后的数字全部舍弃。②容易超过取值范围。
⚫next() 与 nextLine() 与nextInt()区别:
https://www.cnblogs.com/Skyar/p/5892825.html
当用nextInt()读取缓冲区数据时,遇到回车或者空格,数据就会被读取走,但是回车符或者空格会被留下。
next() 与 nextLine() 区别
next():
1、一定要读取到有效字符后才可以结束输入。以空格、回车、Tab键都会视为结束符。。
2、对输入有效字符之前遇到的空白,next() 方法会自动将其去掉。
3、只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符。
next() 不能得到带有空格的字符串。
nextLine():
1、以Enter为结束符,也就是说 nextLine()方法返回的是输入回车之前的所有字符。
2、可以获得空白。
注意:建议能不使用就尽量不要使用nextLine()。尽量使用next。因为有时会出现吃回车现象。
⚫处理异常的时候要注意:不要让异常嵌套,遇到异常就返回,程序的责任是检测异常,不是纵容客户,返回之后再次调用这个函数!让主函数负责对这个函数的重复调用,这非常简单。
异常嵌套,不仅代码量巨大,而且容易出错,运行起来还慢,而且很难全部都检查到。
当然,不是所有的异常都必须直接返回错误,有些异常不构成嵌套,就可以直接在异常发生处进行处理,同时,要是考虑用户感受的话,最好不是出点小错就从头再来,体现在代码上,就是在处理异常的过程中,while和if要交替使用。
⚫主函数中创建的in和被调函数中创建的in_2对象都是有System.in封装而来的,虽然是两个独立的对象,但是用的是同一个输入流:
在调用in.close()实际上相当于System.in.close()
对于创建的in_2来说,System.in已经被关闭了。
简单的解决方式:
在所有其他的类中不使用close()方法
然后在包含主函数的类中创建Scanner对象,在代码的最后调用close()。
⚫JAVA中的方法为什么能叫做函数?因为有输入,因为有输出。
⚫JAVA中定义int a时,不进行初始化,并不是默认为0,如果此时输出的话,会报错,且不能使用a==null,a.equals(null)等语句。
⚫Java中String字符串转化为数字:
转换为浮点型:使用Double或者Float的parseDouble或者parseFloat方法进行转换,此时要确保字符串内的字符是一个浮点数或整数。
转换为整型:使用Integer的parseInt方法进行转换,此时要确保字符串内的字符是一个整数,不能是浮点数。