1.修改eclipse默认编码:utf8
2.src:源代码文件夹; 包是用来打包存放我们的java源代码的。.java文件是源代码
3.main函数,main入口:有main入口的类,是可以直接运行的。
4.java的编译原理:首先,java类需要用javac编译,得到可执行的class文件,然后用java命令执行。
5.二进制:计算机能识别计数方式。计算机的核心元件:二极管。
十进制:(1111)10 = 1x10^3+1x10^2+1x10^1+1x10^0=1000+100+10+1=1111
二进制:(1111)2 = 1x2^3+1x2^2+1x2^1+1x2^0=8+4+2+1=15
6.位,bit:二进制的每一位代表一比特
字节,byte:1byte=8bit; 1111 1111这个就是一byte的长度。
1byte最大能表示多少?2^8-1=255。为什么是-1?因为是从0-255,这里是256个数。
有符号数和无符号数:无符号数,最高位代表数;有符号数,最高位代表符号。
正数,最高位代表+;负数,最高位代表-。
short,短整型,2个字节:1111 1111 1111 1111。short的范围?[-32768,32767]
int,整型,4个字节。int的范围?[-2147483648,2147483647]
long,长整型,8个字节。long的范围?
float,浮点数,4个字节。
double,双精度小数,8个字节。
单精度和双精度的区别:float最多只能表示小数点后面八位,double能精确到小数点后面16位
7.如果是特殊字符,需要用\转义。
8.在数学里面,=既表示给某个未知数赋值,也表示判断两个未知数是否相等。
在编程里面=表示赋值,==表示判断相等。
9.类型强转:算式的结果,是算式里面精度最高的类型。
强转:默认高精度的,不能直接赋值给低精度的,需要用(float)1.1d,强转会丢掉精度。正确,但不精确。
低精度转换为高精度的数,会丢失精度。精确但不正确。
1111,1111 0110。
1. ++,--;自增,自减。
++在效果上等于:i=i+1;--在效果上等于:i=i-1;
++i,是在取值之前,i+1;i++,是在取值之后,i+1;
2.赋值:=
把一个值给变量。变量,值是可变的量。
i+=1它就是i = i + 1;
3.位移,二进制
36的二进制:0010 0100 右移一位:0001 0010:前面空出来的,补0,后面被移出去的,丢掉;得到的结果是18。所以,又移其实是做什么操作?除法操作,除以2。左移,反之。位移只能用在整数。不能位移负数位。
4.寄存器计算原理。数据寄存器。
计算的时候,我们不是直接用变量来计算的,我们需要先把变量的值取出来,放到寄存器里面,再用寄存器进行计算。
5.关系运算,判断。
6.逻辑运算,与、或、非。
与,而且:两个判断都要成立,两个判断只要有一个是假的,就一定是假的
或,或者:两个判断只要有一个成立即可,两个判断只要有一个是真的的,就一定是真的
非,相反:某个判断的反面。
“!”(逻辑非)、“&&”(逻辑与)、“||”(逻辑或)
7.取值范围:!(x>1 && x<=2)
x的取值范围是什么?(-∞,1] ∪ (2,+∞)
8.逻辑运算和关系运算的优先级
!高于关系运算
关系运算高于 &&、||
&& = ||
1.int y=3; int x; x=1/y; 最后x=0。
2.求取值范围:x<-3 x="">=5,x的取值范围。[-∞,3)∪[5,∞) else里面,x的取值范围?[-3,5)
3.字符的比较和运算,取的是ascci码进比较和运算。(不是和字符串)
4.循环:假设有5000个学生,老师要他们报数。
每一个同学其实报数这个功能是一样的。他们所做的所有事情是一样的。
这种场景在编程的时候就需要用到循环。
5.正整数,和自然数
控制循环的条件,当某个标识性的变量不满足条件的时候,循环结束。
第一个语句只初始化一次,每一次执行前都会执行第二个语句,每一次执行for循环之后都会执行第三条语句。
6.死循环:标志性的变量永远不会不满足结束循环的条件。
7.while语句是先执行判断,后执行循环。do...while语句是先执行循环,后执行判断。
8.跳过本次循环,continue;跳出循环,break
switch里面的break是什么意思?跳出switch语句。
9.打印九九乘法表:其实就是i*j,然后,i从1到9循环,j也从1到9循环。
10.格式化输出:%4d
11.取余,%:计算整数除法时的余数。
1.循环的边界。如果这个数是质数,最后j是等于i还是等于i-1?
2.复杂度:尽量避免不必要的操作
3.try…catch:尝试执行某些语句,如果报错,就执行catch里面的语句
4.数据结构:
100个学生:一个班级。--如果用代码,就需要对应一个数据结构,集合Set。
100个名字:用表格一列。--对应代码,数组或者列表,Array,List
学号和名字对应:Map,字典。
5.int--Integer;double--Double;boolean--Boolean;
6.遍历:一个一个获取,或者说查看。
7.迭代器:指针,它从数据结构里面,入口开始,用it.next,可以逐一获取数据结构里面的数据,直到没有新的数据。
8.排序:假设有10个整数。这10个整数用什么存储?数组,Array
9.列表,链表:链条是可以增加和删除环。
10.字典,键值对形式的数据结构
1.集合
set的定义 Sets = new HashSet();
set的使用 s.add("a"); //往集合中添加元素
迭代器 Iteratorit = s.iterator(); //获取到集合s的迭代器
it.hasNext(); //如果集合中还有元素,则返回true,没有则返回false。
String value = it.next(); //获取set中元素的值
输出实例 while (it.hasNext()) {
String value = it.next().toString();
System.out.println("value=" + value);
}
2.数组
(方式1)
定义 int[] arr1 = new int[10]; //定义一个可以存10个整数的数组,长度固定
写入 for (int i = 0; i < 10; i++) { //给数组10个下标对应存储单元,赋10个值
//该方法可以随时修改某一个下标的值
arr1[i] = i;
}
使用 int b=arr1[3]; //获取下标为3的数组单元存储的值
输出实例 for (int i = 0; i < arr2.length; i++) {
//从下标0开始,输出数组的10个值
System.out.print(arr2[i] + ",");
}
(方法2)
定义 int[] arr2 = { 1, 2, 3, 5, 4, 6, 9, 7, 8, 0 };
//定义一个可以存10个整数的数组,并且完成赋值。
使用 int b=arr1[3]; //获取下标为3的数组单元存储的值
输出实例 for (int j : arr2) {
//从下标0开始,输出数组的10个值
System.out.print(j + ",");
}
3.列表
定义 Listl = new ArrayList();
//定义一个用来存放整数的列表,列表是可变长度的。
写入 for (int i = 0; i < 10; i++) {
//往列表里面添加10个整数
l.add(i);
}
使用 l.add(55); //在列表最后添加一个元素,整个列表多了一个元素
l.add(6,55); //在列表下标为6的位置添加一个元素,原来6和以后的元素后移
l.set(6,555); //把列表中下标为6的位置存放的值,重新赋值为555
输出实例 System.out.println(l);
//直接输出整个列表得所有元素
for(int i=0;i<l.size();i++) {
//从下标0开始,输出列表的所有元素值
System.out.print(l.get(i) + ",");
}
4.Map(字典)
定义 Mapmap = new HashMap();
//定义键为String类型,值为int类型的Map。
写入 for (int i = 0; i < 10; i++) {
//往Map里面添加10个整数
map.put(i + "", i+i);
}
使用 map.put("11",111);
//往map里面添加一个键值对,如果已经有"11"这个键,则会替换原来的值
map.get("1"); //获取map里面键为"1"的值,没有这个键则返回空
输出实例 for(String key : map.keySet()) {
//遍历key,通过key获取value
System.out.print(key + "=" + map.get(key) + "; ");
}
for(Entryentry : map.entrySet()) {
//定义一个map的入口,通过入口一个个遍历map里面的元素和值
System.out.print(entry.getKey() + "=" + entry.getValue() + "; ");
}
Hashset
HashSet内部使用的是Hashmap的实现方法,这两个类内部保存的数据都是通过哈希值排序的。也就是说所有hashCode%size=0的key排在最前,hashCode%size=1的其次,以此类推。至于为什么题主你的输出是有序的,这是一个巧合。首先你Student类的hashCode是id转换成字符串后取哈希值。Java中默认字符串哈希值的计算方法是:s[0]31^(n-1) + s[1]31^(n-2) + ... + s[n-1]所以你五个Student对象的哈希值正好是49~53(数字的ascii码)而HashSet默认的大小是16,五个哈希值除16取余数正好是1~5,所以这五个对象正好是排好序放在HashSet里了。想要得到无序的输出,只要换一个初始大小就行了,例如改成new HashSet(10);
1.substring:字符串子串。
java里面[不是特殊字符,不需要转义。但是,replaceAll的时候,用正则去替换的,在正则里面,[是特殊字符。所以在正则里面必须使用\[。
2.split分割:甘蔗--节。
3.json格式:{"status":"0","t":"1525782909785","set_cache_time":"","data":[{"location":"澳大利亚", "titlecont":"IP地址查询", "origip":"1.1.1.1", "origipquery":"1.1.1.1", "showlamp":"1", "showLikeShare":1, "shareImage":1, "ExtendedLocation":"", "OriginQuery":"1.1.1.1", "tplt":"ip", "resourceid":"6006", "fetchkey":"1.1.1.1", "appinfo":"", "role_id":0, "disp_type":0}]}
json层:
4.toString()。不管结果是什么,都转为字符串
5.计算格式化输出。yh=5
假设每一个输出是4个字符,最后一行的长度?4*5
所以第一个1的位置应该是:(yh/2)*4