包装类
包装类:基本数据类型对应的引用数据类型
JDK5以后新增了自动装箱,自动拆箱
以后获取包装类方法,不需要new,直接调用方法,直接赋值即可
//1.把整数转成二进制,十六进制
String str1= Integer.toBinarystring(i: 100);
System.out.println(str1);//1100100
//2.把整数转成八进制
String str2 = Integer.tooctalstring(i: 100);
System.out.println(str2);//144
//3.把整数转成十六进制
String str3= Integer.toHexstring(i:100);
System.out.println(str3);//64
//4.将字符串类型的整数转成int类型的整数
//强类型语言:每种数据在java中都有各自的数据类型
//在计算的时候,如果不是同一种数据类型,是无法直接计算的。
int i = Integer.parseInt( s:"123");
System.out.println(i);
System.out.println(i + 1);//124
强类型语言:每种数据在Java中都有个各自的数据类型,在计算的时候,如果不是同一种数据类型,无法直接计算
细节1:在类型转换的时候,括号中的参数只能是数字不能是其他,否则代码会报错
细节2:八种包装类中,处理Character都有对应的parseXxx方法,进行类型转换
以后我们如果要键盘输入,不管什么类型,统一使用nextLine,可以输入一整行的数据,遇到回车才停止,之后再用parseXxx进行类型转换。
Arrays
//tostring:将数组变成字符串
System.out.println("-----------------toString----
int[]arr={1,2,3,4,5,6,7,8,9,10};
System.out.printIn(Arrays.tostring(arr));//[1,2,3,4,5,6,7,8,9,10]
//binarySearch:二分查找法查找元素
//细节1:二分查找的前提:数组中的元素必须是有序,数组中的元素必须是升序的
//细节2:如果要查找的元素是存在的,那么返回的是真实的索引
//但是,如果要查找的元素是不存在的,返回的是-插入点-1
//疑问:为什么要减1呢?
//解释:如果此时,我现在要查找数字0,那么如果返回的值是-插入点,就会出现问题了
//如果要查找数字0,此时@是不存在的,但是按照上面的规则-插入点,应该就是-0
//为了避免这样的情况,Java在这个基础上又减一。
System.out.println("_--
---binarySearch--
System.out.println(Arrays.binarySearch(arr,key:10));//9
key: 2));//1
System.out.println(Arrays.binarySearch(arr,
System.out.println(Arrays.binarySearch(arr, key:20));//-11
//copyof:拷贝数组
//参数一:老数组
//参数二:新数组的长度
//方法的底层会根据第二个参数来创建新的数组
//如果新数组的长度是小于老数组的长度,会部分拷贝
//如果新数组的长度是等于老数组的长度,会完全拷贝
//如果新数组的长度是大于老数组的长度,会补上默认初始值
System.out.println("-------------------copyOf---
int[l newArr1 =Arrays.copyof(arr,newLength:20);
System.out.printIn(Arrays.tostring(newArr1));//[1,2,3,4,5,6,7,8,9,10]
//copyofRange:拷贝数组(指定范围)
//细节:包头不包尾,包左不包右
System.out.println("----
----copyOfRange-
int[]newArr2 =Arrays.copyOfRange(arr, from:0,to:9
System.out.println(Arrays.tostring(newArr2));
//fi11:填充数组
System.out.println("
Arrays.fill(arr, val: 100);
System.out.println(Arrays.tostring(arr));
//sort:排序。默认情况下,给基本数据类型进行升序排列。底层使用的是快速排序。
System.out.println("--
int[]arr2={10,2,3,5,6,1,7,8,4,9};
Arrays.sort(arr2);
---SOAT
System.out.println(Arrays.tostring(arr2));
常见算法
二分查找
二分查找的优势:提高查找效率
二分查找的前提条件:数组必须是有序的
递归
排序
Lambda表达式
Lambda表达式的注意点:
1.Lambda表达式可以用来减缓匿名内部类的书写
2.Lambda表达式只能简化函数式接口的内部类的写法
3.函数式接口:
有且只有一个抽象方法的接口叫做函数式接口,接口上方可以加@FunctionalInterface注释
利用匿名内部类的形式去调用下面的方法
调用一个方法的时候,如果方法的形参是一个接口,那么我们要传递这个接口的实现类对象
如果实现类对象只要用到一次,就可以用匿名内部类的形式进行书写
Lambda 简写格式:
小括号:数据类型可以省略,如果参数只有一个,小括号还可以省略
大括号:如果方法体只有一行,return,分号,大括号都可以省略
comparegto(String anotherString):
将字符串按字典的顺序进行比较
集合
Collection是一个接口,我们不能直接创建他的对象。
所以,现在我们学习他的方法时,只能创建他实现类的对象。
添加:
细节1:如果我们要往List系列集合中添加数据,那么方法永远返回true,因为List系列的是允许元素重复的。
细节2:如果我们要往set系列集合中添加数据,如果当前要添加元素不存在,方法返回true,表示添加成功。
如果当前要添加的元素已经存在,方法返回false,表示添加失败。
因为set系列的集合不允许重复。
删除:
细节1:因为collection里面定义的是共性的方法,所以此时不能通过索引进行删除。只能通过元素的对象进行删除。
细节2:方法会有一个布尔类型的返回值,删除成功返回true,删除失败返回fa1se
如果要删除的元素不存在,就会删除失败。
4.判断集合中某一个学生对象是否包含
Student s4 =new student( name:"zhangsan",age:23);
因为contains方法在底层依赖equals方法判断对象是否一致的。
如果存的是自定义对象,没有重写equa1s方法,那么默认使用object类中的equa1s方法进行判断,而object类中equals方法,依赖地址值进行判断。
需求:如果同姓名和同年龄,就认为是同一个学生。
所以,需要在自定义的Javabean类中,重写equals方法就芯以了,
Collection的遍历方式分为:迭代器遍历,增强for遍历和Lambda表达式遍历三种。
迭代器遍历
package Test.Collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Collection1 {
public static void main(String[] args) {
//1.创建一个集合对象
Collection<String> coll = new ArrayList<>();
coll.add("1");
coll.add("2");
coll.add("3");
coll.add("4");
//2.获取迭代器对象
Iterator<String> it=coll.iterator();
//3.利用循环不断去获取集合中的每一个元素
while(it.hasNext()){
//4.next方法的两件事情:获取元素并移动指针
String s=it.next();
System.out.println(s);
}
}
}
细节注意点:
1,报错NoSuchElementException
2,迭代器遍历完毕,指针不会复位
3,循环中只能用一次next方法
4,迭代器遍历时,不能用集合的方法进行增加或者删除
可以使用迭代器的方法来增加或者删除
增强for遍历
快速生成方式:
集合的名字+for回车
修改增强for中的变量,不会改变集合中原本的数据
List集合
List系列集合中的两个删除的方法
1.直接删除元素
2.通过索引进行删除
2.删除元素
在调用方法的时候,如果方法出现了重载现象
优先调用,实参跟形参类型一致的那个方法
数据结构
ArrayList
size既是元素的个数,也是下次存入元素的位置
LInkedLIst