1:main方法可以重载吗?
可以,但重载后的main方法只是一个普通的方法,虚拟机不会去调用它
2:main能被其他方法调用吗?
可以调用,但为了防止两个方法来回调用,需要防止它栈内存溢出(执行几次后,停掉虚拟机System.exit(0))
3:main方法可以继承吗?
父类下有一个mian方法,子类能不能继承过来并调用?可以,main方法除了是给虚拟机调用的外也就算一个普通的方法
4:如何实现数组和list集合之间的一个转换?
在开发中数组和容器都可以当作容器来使用,你在做的业务逻辑,把数据存在容器里,别人在使用的时候可能不是这个类型,所以需要在中间做转化
4.1:数组转list集合
4.11:遍历
4.12:Arrays.asList()方法(局限)
数组如果是原始数据类型,需要转为封装类,如int 转为Integer 如果使用原始数据类型直接使用,输出的是地址,因为list集合存放的是数组
通过 Arrays.asList() 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。
4.13:集合工具类Collections.addAll()方法(最高效)
通过Collections.addAll(arrayList, strArray)方式转换,根据数组的长度创建一个长度相同的List,然后通过Collections.addAll()方法,将数组中的元素转为二进制,然后添加到List中,这是最高效的方法。
需要在将数组转换为List后,对List进行增删改查操作,在List的数据量巨大的情况下,优先使用,可以提高操作速度。
小tips:
List.forEach(System.out::println)
-
System.out::println 是一个Consumer类型的对象,他的accept方法就是==::前面的对象调用::后面的方法==,即System.out.println();
-
foreach方法遍历了每一个元素,并调用了System.out::println的accept方法
foreach的源码:
4.13:stream流
将集合或者数组对象转换成String流对象;(Collection.stream() Collection;Collection.parallelStream();Arrays.stream(T array) or Stream.of())
4.2:list转数组
直接使用toArray()不带参方法但是其返回值类型为Object,在进行强转的时候会报出java.lang.ClassCastException类转换异常
toArray(T[] a)(推荐)
5:b+数的结构
b 加树是n叉树,是b树的一个变种;
b树与b+树的相同点:
1: 一个节点有多个kv对;
2: 从左到右生序的;
不同点以及b+树的优点:
1: b+树内节点:key是没有对应的data值的
所以它的内节点可以存放更多的key,只需要更少的内节点来构造b+树;层级也会更少,在查找数据的时候需要扫描的节点也会更少
2: b+树所有的key都会出现中叶子节点中(会重复):因为b+树的内节点不存储key对应的data值,它像纪录key-value的数据就必须中叶子结点中重复纪录一份
获得一个完整数据就需要扫描到叶子节点,相对于b树扫描过程更稳定,b树🈶️的时候在扫描到内节点时就得到了完整的kv数据,b+树稳定可预测
b树一个key只会出现在一个节点(内节点或者叶子节点)
3: b+树:相邻的节点有指针相互指向连接(指针是双向的)
数据可顺序的遍历查找
b+树的问题:
key重复出现,更多的占用内存空间
6:红黑树
平衡二叉查找数,它的任意节点左右子树高度相差不大于一即可
根节点是黑色,叶子结点是不存储数据的黑色空节点
任何相邻的两个节点不能同时为红色
任意节点到其可到达的页节点间包含相同数量的黑色节点
这个二叉树满足了这三个条件就是平衡二叉树,它保证了没有一条路径比其他路径长出两倍,树的高度稳定的趋近于logn;所以插入,删除,查找的操作时间复杂度为logn;一颗有n个节点的红黑树的高度,最多为2倍的log(n+1);
对比严格的平衡二叉树,它的查找效率不超过logn,红黑树可能没有它的查找效率高,但是平衡二叉树子插入的时候要保证严格的平衡,每次插入删除的时候都要做复杂的调整;红黑树的叉树和删除就简单多