Arrays
作用:用于操作数组
常用方法:
把数组内容转换为一个字符串:String static toString(数组)
数组排序的方法:
基本数据类型的数组:static void sort(数组)
引用数据类型的数组:
JavaBean实现Comparable<泛型>接口,重写方法;
static void sort(数组,new Comparator<泛型>比较器,重写规则方法。
数组元素查找的方法:int binarySearch(数组,元素);
Lambda(重点)
作用:简化匿名内部类-->函数式接口:这个接口有且只有一个抽象方法(注解:@FunctionalInterface)。
格式:(参数)-->{方法体};
方法引用
作用:简化Lambda表达式-->方法体只有一句代码。
格式:
静态方法引用:类名::方法名。
成员方法引用:对象::方法名。
特定类型方法引用:类型::方法名;-->方法上一定是有多个参数,然后第一个参数,作为对象去调用实现的方法,后面的参数作为入参。
构造器引用:类名::new
正则表达式
作用:判断数据是否合法、从文本中爬取数据
规则:
[ 任意内容 ]-->代表一个符号
\\d ---->代表数字
\\w --->数字、字母、下划线
. ---- > 任意的符号,除了\n
熟数量词:
{1,}--->至少 出现1次或多次
{1,3}--->至少出现1次,最多出现3次
{5}---->只能出现5次
0 ---->分组
| ----->或者
例如检查手机号码是否符合标准规则
public static boolean checkPhoneNumber(String phone){
String str="1[3-9]\\d{9}";
return phone.matches (str);
}
Collection
地位:属于单列集合,是所有单列集合的组宗
常用方法:
添加:add(E e)
删除:remove(Object e)
是否包含指定元素:contains(Object o)
集合的大小:size();
获取迭代器的方法:Interator iterator();
遍历方式:
使用迭代器:
1、获取迭代器-----Interator<泛型> it=集合.iterator();
2、使用while循环遍历,条件 it.hasNext()---判断是否有数据
3、在循环中获取数据---it.next();
增强for循环:
格式:for(数据类型 变量名:数组/集合){....}
原理:底层其实就是迭代器
Lambda---->集合.forEach( (s)-->{ } )
List
特点:存取有序、可重复、有索引
特有方法:
增加:add(int index,E e);
删除:remove(int index);
修改:set(int index,E e);
获取 : E get(int index);
遍历方式:
使用迭代器:
1、获取迭代器--->Interator<泛型> it=集合.iterator();
2、使用while循环遍历,条件 it.hasNext()--判断是否有数据
3、在循环中获取数据 --->it.next();
增强for循环:
格式:for(数据类型 变量名:数组/集合){ };
原理 :底层其实就是迭代器
Lambda:
集合.forEach((s)->{ })
普通for循环:
for(int i=0;i<集合.size();i++){ 集合.get(i)};
ArrayList的原理:
存储数据的数据结构:数组、查询快、增删慢
使用场景:大量查询、少量增删(不适合用于大量数据的增删)
LinkedList的原理:
数据结构:双链表、查询慢、增删快
特有方法:
往头部添加元素:addFirst(E e)
往尾部添加元素 :addLast(E e)
删除头部元素:removeFirst();
删除尾部元素:removeLast();
获取头部元素:getFirst();
获取尾部元素:getLast();
压栈-- push()---就是addFirst()
出栈---pop()---就是removeFirst();
使用场景:用于大量数据的增删
数据结构:
数组:查询快、增删慢
链表:增删快、查询慢
双链表:增删快,查询慢
红黑树:增删改查都快
队列:先进先出
栈:先进先出
Set
特点:
无序、不重复、无索引。
分类:
HashSet:
特点:无序、不重复、无索引
底层原理:
JDK之前:哈希表:数组+链表
JDK之后:哈希表:数组+链表+红黑色
添加数据的流程:
1、根据hash值计算它在数组中的位置
2、看到当前位置是否有值,如果没有,就直接保存
3、如果有值,就使用equal方法进行判断,如果结果为false,就保存元素
4、结果如果为true,就不存放元素
5、自定义类型:属性相同时代表同一个对象
1、重写hashCode方法
2、重写equals方法
使用场景
存放元素不重复的,增删改查都比较快的时候。
LinkedHashSet:
特点:
有序、无索引、不重复;
底层原理:
JDK之前:哈希表:数组+链表+双链表【记录添加的顺序】
JDK之后:哈希表:数组+链表+红黑树+双链表【记录添加的顺序】
添加数的流程:
1、根据hash值计算它在数组中的位置
2、看当前位置是否有值,如果没有,就直接保存
3、如果有值,就使用equals方法进行判断,如果结果为false,就保存元素
4、结果如果为true,就不存放元素
自定义类型:
属性相同时代表同一个对象:重写equals和hashCode方法。
使用场景:需要元素不重复,又需要有顺序的时候
TreeSet
特点:排序、无索引、不重复
底层原理:红黑树
实现自定义类型排序:
方式一:JavaBean实现Comparable接口,重写方法比较规则
方式二:在TreeSet的构造器中重写Comparator的方法
使用场景:希望集合的内部排序,不重复
去重标准:比较的值,如果相同,就自动去重
可变参数
格式:数据类型...变量名
好处:灵活接收参数,可以接收0到多个参数,也可以接收数组
注意事项:
一个方法只能定义一个可变参数
可变参数只能放在形参列表的最后
Collections(工具类)
作用:用于操作Collections的工具类
常用方法:
添加多个数据:static boolean addAll(Collection col,T..a)
打乱List的内容:static void shuffle(List list)
排序:static void sort(List list)
自定义排序:static void sort(List list,Comparator c)
Map
概念:双列集合
特点:无序、不重复、无索引
分类:
HashMap
特点:无序、不重复、无索引
底层原理:hash表,jdk8之前:数组+链表。8之后:红黑树
自定义类型的去重:hashCode()和equals();
LinkedHashMap
特点:有序、不重复、无索引
底层原理:Hash表:jdk8之前,数组+链表+双链表。8之后:加多红黑树
TreeMap
特点:可排序、不重复、无索引
底层原理:红黑树
如何实现排序:
方式一:JavaBean实现Comparable接口,重写方法
方式二:在TreeMap的构造器中,指定比较规则
常用方法
增加数据:put(键,值)
删除数据:remove(键)
查询数据:get(键)
集合大小:size()
判断是否有指定的键:containsKey(键)
判断是否有指定的值:containsValue(值)
获取所有的键:Set KeySet();
获取所有的值:Collection values()