知识点1:
1.位运算函数,lowbit()函数:这个函数的作用是:lowbit()函数用来取一个二进制最低位的一与后边的0组成的数
例:5(101),lowbit(5)=1(1)
12(1100),lowbit(12)=4(100)
2.原理:其实我知道这个函数就够了,但是还是将原理放在这里方便以后看看:
由于数在计算机里以补码的方式储存,运用位运算可返回只有一个位上有1的数
int lowbit(int x)
{
return x & -x;
// return x &(~x+1);
}
//原码最后一位1 —> 其反码那一位是0,后面位全是1 —> 反码转化为补码—> 原码和补码最后一位1的地方相同 —> 进行与运算 —>得出lowbit
知识点2:如果该二叉树是二叉搜索树,直接对该树进行中序遍历便可以得到一个递增序列
知识点3:int min1=Integer.MAX_VALUE;
这行代码可以将初值赋值为最大的整数
知识点4:Math.abs();
求某个数的绝对值
知识点5:
队列Queue是一个抽象类我们一般使用其子类就可以了:LinkedList
注意Linked也是符合队列的特征先进先出
队列的一些重要方法:
入队列:add()当队列满了以后再入队列会触发异常 offer()当队列满了以后会return false;
出队列:remoe()将元素删除并将该原数返回,如果队列为空会触发异常 poll()不会触发异常
返回队首元素:peek();
知识点6:有关java中基本数据类型和引用数据类型的问题:
1.基本类型:
基本数据类型只有8种,可按照如下分类
①整数类型:long、int、short、byte
②浮点类型:float、double
③字符类型:char
④布尔类型:boolean
2.引用数据类型:
引用数据类型非常多,大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型,还有Double,Byte,Long,Float,Char,Boolean,Short(注意这里和基本类型相比首字母是大写)
简单来说,所有的非基本数据类型都是引用数据类型
3.基本数据类型和引用数据类型的区别:
基本变量类型:在方法中定义的非全局基本数据类型变量,调用方法时作为参数是按数值传递的
引用变量类型:引用数据类型变量,调用方法时作为参数是按引用传递的
引用传递指的是修改时会互相影响
注意:字符串虽然是引用数据类型,但它的传递方式为值传递
知识点7:将一维数组初始化为某一固定值
Arrays.fill(a[i],Integer.MAX_VALUE);
将二维数组初始化为某一固定值
for(int i=0;i<deep;i++){
Arrays.fill(a[i],Integer.MAX_VALUE);
}
知识点8:在使用集合宝存数字时如果想要直接或取该具体的对象,list.get(),remove()里面的数字应转化为包装类,不然数字会被认为时索引
// 将start包装成对象避免其认为为index
int start=edges[i][0];
int end=edges[i][1];
list.get(start).remove(new Integer(end));
list.get(end).remove(new Integer(start));
知识点9:判断两个数组的数据是否相等可以使用Arrays.eauals(int[],int[]);
知识点10: getOrDefault(Object key, V defaultValue)
意思就是当Map集合中有这个key时,就使用这个key对应的value值,如果没有就使用默认值defaultValue
知识点11:使用java api 将字符串逆序
// 这里我直接使用java api,判断逆序后的字符串和原来的字符串是否相等
String temp=s.substring(lp,rp+1);
String revtemp=new StringBuffer(temp).reverse().toString();
知识点12::如何创建一个散列表:
// 这里的语法也没怎么使用过,居然还有集合类型的数组,这样就更加方便了
// 我之前都是使用集合的嵌套完成的散列表
List<Character>[] force = new List[n];在这里插入代码片
知识点13::如何创建一个新的队列:
LinkedList实现的是Deque接口,Deque继承了Queue
// 这是一个新的语法,我之前都是用Queue<> queue=new LinkedList<>();
Deque<Integer> queue = new ArrayDeque<Integer>();
知识点14::
// 因为正则表达式中"+“为特殊符号,是量词,表示{1,},因此,要匹配”+“这个字符,需要转义”\+",java中要"\\+"
String[] arry1=num1.split("\\+");
String[] arry2=num2.split("\\+");
知识点15::
Integer.parseInt("00");//0
Integer.parseInt("0012");//12
知识点16:: 将字符数组转化为字符串的方法
char[] arr=[a,b,c,d];
String key = new String(arr);//abcd(字符串)
String temp=Arrays.toString(arr);//[a,b,c,d](字符串)
知识点17:java8更新了一个箭头函数:Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
Arrays.sort(words, (a, b) -> {
if (a.length() != b.length()) {
return a.length() - b.length();
}
// 相同长度下把字典序较大的排在前面
return b.compareTo(a);
});
知识点18:
知识点19:
Calendar是java util包下的一个工具类,提供了很方便的不同日期格式的处理。啥也不说了,直接撸代码:
public static void main(String[] args) {
System.out.println("------------Calendar无参构造------------");
//Calendar对象,不传参数,默认为当前日期
Calendar calendar =new GregorianCalendar();
//获取当前年份
System.out.println(calendar.get(Calendar.YEAR));
//获取当前月份 从0开始,0代表一月,1代表二月,以此类推
System.out.println(calendar.get(Calendar.MONTH));
//获取当前日期 也可以使用DAY_OF_MONTH
System.out.println(calendar.get(Calendar.DATE));
//获取当前时 24小时进制
System.out.println(calendar.get(Calendar.HOUR_OF_DAY));
//获取当前分
System.out.println(calendar.get(Calendar.MINUTE));
//获取当前秒
System.out.println(calendar.get(Calendar.SECOND));
//获取今天是这个月的第几个星期
System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));
//获取今天是星期几 1表示星期天,2表示星期一,以此类推
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
System.out.println("------------Calendar有参构造------------");
/**
* 有参构造 分别代表年月日时分秒,写法简单明了,很符合我们人类的思维
* 注意月份的设置是从0开始的,这里设置的是月份是6,实际是设置了7月份
*/
calendar =new GregorianCalendar(2019, 6, 14, 16, 15,30);
/**
* 除了在构造方法直接设置之外,也可以通过set方法设置
* 第一个参数表示设置的参数类型,第二个表示具体值
*/
calendar.set(Calendar.YEAR, 2000);
calendar.set(Calendar.MONTH, 0);
calendar.set(Calendar.DATE, 20);
//...
System.out.println("------------Calendar和Date转换------------");
Date now = calendar.getTime();
calendar.setTime(now);
System.out.println("------------Calendar日期计算以及判断------------");
calendar = new GregorianCalendar();
Calendar calendar2 = new GregorianCalendar();
calendar2.set(Calendar.YEAR, 2800);
//是否在某个时间(calendar2)之后
System.out.println(calendar.after(calendar2));
//是否在某个时间(calendar2)之前
System.out.println(calendar.before(calendar2));
//增加多少年年,月日以及时分秒同理
calendar.add(Calendar.YEAR, -10);
}
Calendar.getInstance()中的getInstance()函数
getInstance()是Calendar提供的一个类方法,它的作用是获得一个Calendar类型的通用对象,getInstance()将返回一个Calendar的对象。
还有一点关于 为什么不用 Calendar c=new Calendar();
原因是:
Calendar类是一个抽象类,在实际使用时实现特定的子类的对象。由于Calendar类是抽象类,且Calendar类的构造方法是protected的,所以无法使用Calendar类的构造方法来创建对象,API中提供了getInstance方法用来创建对象。
所以定义一个Calendar对象就应该为:
Calendar cal= Calendar.getInstance();
知识点20: 使用BigInteger来处理一些long以及Integer处理不了的值,不过BigInteger没有办法直接进行加减乘除必须使用方法来进行操作,详细的代码如下:
public class BigInteger_ {
public static void main(String[] args) {
//当我们编程中,需要处理很大的整数,long 不够用
//可以使用BigInteger 的类来搞定
// long l = 23788888899999999999999999999l;
// System.out.println("l=" + l);
BigInteger bigInteger = new BigInteger("12138888888888888888888");
BigInteger bigInteger2 = new BigInteger("12138121383141592653571234531");
System.out.println(bigInteger);
//老韩解读
//1. 在对BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行+ - * /
//2. 可以创建一个要操作的BigInteger 然后进行相应操作
BigInteger add = bigInteger.add(bigInteger2);
System.out.println(add);//
BigInteger subtract = bigInteger.subtract(bigInteger2);
System.out.println(subtract);//减
BigInteger multiply = bigInteger.multiply(bigInteger2);
System.out.println(multiply);//乘
BigInteger divide = bigInteger.divide(bigInteger2);
System.out.println(divide);//除
}
}
知识点22::日期类Date与日历类的相互转换
Calender转Date
Calendar c = Calendar.getInstance();
Date d = c.getTime();
Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);
**知识点23 **:对于一些输入量过大的题目使用Scanner会曹处内存心事,我们可以改用
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st=new StreamTokenizer(br);
static int nextInt() throws IOException{
st.nextToken();
return (int) st.nval;
}
知识点20: 在使用map时,因为HashMap是无序的所以迭代时并不会按照我们的输入进行输出,想要迭代时按照我们的输入顺序进行输出可以使用LinkedHashMap
Map<Integer,Integer> map=new LinkedHashMap<Integer,Integer>();
知识点21:将mao键值对进行输出
Set<Integer> set=map.keySet();
Iterator<Integer> it = set.iterator();
while(it.hasNext()) {
Integer key=it.next();
Integer result=map.get(key);
System.out.println(key+" "+result);
}
**知识点21 ** : map的get方法进化版
map.put(nums[i], map.getOrDefault(nums[i], 0)+1);
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点:
知识点: