java基础、数据结构

JAVA

一·、自动装箱与拆箱

       装箱:将基本类型转化为对应的包装类型

              【例(手动装箱)】:Integer i = new Integer(12);

      拆箱:将包装类型转化为对应的基本类型

             【例(手动拆箱)】:int j = i.intValue();

       应用:Java采用自动装箱与自动拆箱机制,节省了数值内存开销和创建对象的开销。这个机制由编译器根据语法,决定装箱和拆箱,自行完成

注意:【八种基本数据类型和包装类型】:byte    i  Byte

                                                                      short    i  Short

                                                                      char     i  character  

                                                                      int     i  Integer  

                                                                      long     i  Long  

                                                                      float     i  Float  

                                                                      double    i  Double

二、范型及范型擦除:

       范型:即,参数化类型。创建集合时就指定集合元素类型,只能保存该类型的元素,避免强制类型转换。

       类型擦除:范型信息只存在于代码编译阶段,在进入jvm之前范型信息会被擦除掉。

【过程】: 1.将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。

                   2.移除所有的类型参数

三、Java集合类关系图:

       1.List和Set继承自Collection接口

       2.List有序且允许元素重复,ArrayList、LinkList、Vector为主要的三个实现类

       3.Set无序且不允许元素重复,HashSet和TreeSet为主要的两个实现类

       4.Map也属于集合系统,但是跟Collection接口无关。Map是键值对的映射集合 ,键key不能重复,但是值value可以重复。HashMap、TreeMap和HashTable为主要的三个实现类

四、HashTable和HashMap的实现原理:

        https://www.iteye.com/blog/zhangshixi-672697

        https://www.cnblogs.com/skywang12345/p/3310887.html

五、HashMap和Hashtable的区别:

       1.HashTable方法前面都有synchronized同步,所以是线程安全的。而HashMap未经同步,所以是非线程安全的

       2.HashTable不允许null(键和值都不可以为null),而HashMap允许null(键和值都可以为null)

       3.HashTable使用Enumeration(枚举)进行遍历,而HashMap使用Iterator(迭代器)进行遍历

       4.HashTable中hash数组默认大小是11,增长方式old*2+1,而HashMap中数组默认大小16,并且是2的指数

       5、哈希值使用不同,HashTable直接使用对象的HashCode,而HashMap重新计算而且用于代替求模。

六、ConcurrentHashMap实现原理:

        https://blog.csdn.net/weixin_43185598/article/details/87938882

七、ArrayList和LinkList:

         区别:

                ArrayList底层使用数组实现,可以认为它是一个可变大小的数组,随着元素的增多,规模动态增多。

                LinkList底层使用双向链表实现,所以增删速度比较快,但是查询修改比较慢。

        使用场景:

                ArrayList适合检索和末尾插入或删除元素【体现数组特性】

                LinkList适合从中间插入或者删除元素【体现链表特性】

八、Collection和Collections:

       Java.util.Collection是一个集合接口,提供了集合对象进行操作的通用接口方法。

       Java.util.Collections是一个包装类,包含有关集合操作的静态方法(集合类的工具类),且不能被实例化【例:Collections.sort();】。

九、Java十大排序:【下面博文中有动态效果图,一目了然】

【推荐博文】https://blog.csdn.net/u012786993/article/details/100189067

       1.冒泡排序:

        比较相邻元素,将大元素放到后面,从开始第一组元素到最后一组元素结束,最终最后位置的元素就是最大值MAX,时间复杂度:O(n²)。

       2.选择排序:

        每次遍历前,假设第一个索引处的元素是最小值,交换第一个索引处和最小值所在的索引处的值,最终得到从小到大排列,时间复杂度:O(n²)。

      3.插入排序:

        将所有元素分为已排序和未排序两组,拿未排序组中的第一个元素,向已排序组中插入,倒序遍历已排序数组元素,直到找到一个元素小于等于待插入元素时,把待插入元素放到这个位置,其余元素后移一位,时间复杂度:O(n²)。

       4.希尔排序(shell):

        选定一个增长量h=round(n/2),按增长量作为分组依据,对数据进行分组。对每一小组内部再进行插入排序。不断循环此步骤,直到h=1。

       5.归并排序:关键点体现在归并操作上,采用分而治之的思想

       6.快速排序:详细阐述见,推荐博文

       7.堆排序:详细阐述见,推荐博文

       8.计数排序:详细阐述见,推荐博文

       9.桶排序:详细阐述见,推荐博文

       10.基数排序:详细阐述见,推荐博文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值