![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java基础
HenrlyLiu
这个作者很懒,什么都没留下…
展开
-
记一次迭代器源码阅读
目录1.问题引入2.迭代器回顾2.1 迭代器是什么2.2 集合框架是如何实现迭代器接口的3. 迭代器应用实践4. 能不能使用迭代器修改集合中的元素总结1.问题引入今天好哥们突然给我发来一条QQ消息,问迭代器能不能修改集合,用过迭代器的小伙伴应该都知道这一点:迭代器是用来统一对于List和Set集合的遍历方式的,至于能不能修改集合中的元素,讲真的,我没去思考过。不过当时为了快点回复哥们(其实是为...原创 2019-12-13 19:33:51 · 121 阅读 · 0 评论 -
对迭代器(Iterator)的思考与总结
目录1.问题引入2.迭代器回顾2.1 迭代器是什么2.2 集合框架是如何实现迭代器接口的2.2 迭代器应用实践2.3 能不能使用迭代器修改集合中的元素1.问题引入今天好哥们突然给我发来一条QQ消息,问迭代器能不能修改集合,用过迭代器的小伙伴应该都知道这一点:迭代器是用来统一对于List和Set集合的遍历方式的,至于能不能修改集合中的元素,讲真的,我没去思考过。不过当时为了快点回复哥们(其实是为...原创 2019-12-13 19:18:29 · 363 阅读 · 0 评论 -
一张图理解接口
原创 2019-12-13 13:19:51 · 170 阅读 · 0 评论 -
HashMap底层原理详解
HashMap数据结构——数组+链表Node[]是HashMap的核心数组结构,也称之为“位桶数组“,长度默认是16Node的源码: /** * Basic hash bin node, used for most entries. (See below for * TreeNode subclass, and in LinkedHashMap for its En...原创 2019-07-28 16:01:59 · 966 阅读 · 0 评论 -
HashSet底层原理及手动实现HashSet
HashSet底层是一个HashMap,HashSet只是用到了HashMap的key,将HashMap的值设为虚拟的值手动实现HashSetpackage cn.GTMStudio.MyConnection;import java.util.HashMap;public class GTMHashSet { //HashSet的底层是一个HashMao HashMa...原创 2019-08-06 10:38:03 · 1121 阅读 · 0 评论 -
HashSet和HashMap的底层图解
HashSet和HashMap的底层实质上都是hash表(数组+链表)原创 2019-08-06 16:10:31 · 629 阅读 · 0 评论 -
一张思维导图轻松理清Java集合框架
集合框架无非是List、Set和原创 2019-08-06 16:15:30 · 310 阅读 · 1 评论 -
异常
目录 1. 异常1.1 相关概念1.2 异常体系1.3 异常分类1.4 图解异常产生过程2. 异常的处理2.1 抛出异常throw2.2 声明异常throws2.3 捕获异常 try...catch...2.4 finally 代码块2.5 异常注意事项3. 自定义异常3.1 概述3.2 自定义异常的练习 1. 异常1.1 相关概念异常:指的是程序在执行过程中,出现的非正常的情况,最...原创 2019-08-08 20:22:51 · 183 阅读 · 0 评论 -
集合遍历的各个方法
//一、List集合 List<String> list = new ArrayList<>(); list.add("henrly"); list.add("nancy"); list.add("lucy"); list.add("jeacy"); //遍历List集合 ...原创 2019-08-06 20:45:08 · 6998 阅读 · 1 评论 -
Comparable和Comparator的区别
一、问题引入使用集合工具类Collections的sort方法对集合内部元素排序,当存储Integer类型数据时,程序的编译、运行均正常,但当集合存储自定义类型时,编译器报错,显示未实现Comparable接口,如图所示:自定义类型 Person:package cn.GTMStudio.Comparator;public class Person { private Str...原创 2019-08-07 16:47:21 · 191 阅读 · 0 评论 -
Lambda表达式——函数式编程思想
目录1. 函数式编程思想概述2. 冗余的Runnable方法传统写法代码分析做什么,而不是怎么做3. 体验Lambda的更优写法 4. 回顾匿名内部类使用实现类使用匿名内部类匿名内部类的好处与弊端语义分析5. Lambda标准格式6.练习使用Lambda表达式6.1 使用Lambda标准格式(无参无返回)题目解答6.2 Lambda的参数、返回值传统写法代码分析Lambda写法6.3 Lambda...原创 2019-08-10 17:16:41 · 558 阅读 · 0 评论 -
手动实现LinkedList
链表是由一系列结点(node)组成的,结点可以在运行时动态生成。链表有单向链表和双向链表两种结构,单向链表的每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。双向链表的每个结点包括三个部分:存储数据元素的数据域、存储下一个结点地址的指针域和存储上一个结点地址的指针域。一、单向链表单链表的特点是:节点的链接方向是单向的;相对于数组来说,单链表的的随机访问速度较...原创 2019-07-28 13:45:50 · 111 阅读 · 0 评论 -
HashSet存储自定义类型元素
一、HashSet集合存储元素不重复的原理前提:存储的元素必须重写hashCode方法和equals方法二、HashSet存储自定义类型元素1. 创建自定义类型Student类package cn.GTMStudio.collection;public class Student { private String name; private int age; ...原创 2019-08-05 16:46:55 · 762 阅读 · 1 评论 -
手动实现HashMap
HashMap是由数组和链表来实现对数据的存储,它们各有特点:数组:占用空间连续,寻址容易,查询速度快。但是,增加和删除效率 非常低。链表:占用空间不连续,寻址困难,查询速度慢。但是,增加和删除效率非常高。HashMap通过使用”哈希表“结合了数组和链表的优点,哈希表的本质就是“数组+链表”。手动实现HashMap1.创建结点类package cn.GTMStudio.MyCon...原创 2019-08-05 09:03:58 · 207 阅读 · 0 评论 -
String和StringBuilder的底层分析
一、String由于String类的对象内容不可改变,所以每当进行字符串拼接时,总是会在内存中创建一个新的对象。public class StringDemo { public static void main(String[] args) { String s = "Hello"; s += "World"; System.out....原创 2019-07-24 21:14:19 · 3135 阅读 · 0 评论 -
8种基本数据类型转换
8种基本数据类型的原创 2019-07-25 08:18:29 · 3664 阅读 · 0 评论 -
权限修饰符
不同权限修饰符的访问能力原创 2019-07-25 09:10:58 · 110 阅读 · 0 评论 -
内部类和匿名内部类
一、内部类public class Person{ private boolean live=true; class Heart{ public void jump(){ //直接访问外部类成员 if(live){ System.out.println("心脏在跳动"); }else{ System.out.println("心脏...原创 2019-07-25 09:45:19 · 104 阅读 · 0 评论 -
java中的接口及其新特性
学习总是要带着疑问的,解惑的过程会带来成就感。笔者大一自学java,当时学到接口,对于接口的理解是:接口是方法的集合,只提供抽象方法的定义,不提供方法的实现,这些方法的具体实现由接口的实现类实现。接口提供的是一种规范,也就是标准的指定。说到制定标准,Java的老东家Sun公司可是玩的得心应手,具有代表性的就是JDBC技术,Java提供数据库操作的接口,也就是规范,这些接口由各大数据库厂商实现...原创 2019-07-25 12:22:19 · 239 阅读 · 0 评论 -
一篇搞懂Java的三大特征:封装、继承和多态
一、面向对象思想概述 二、封装三、继承四、多态一、面向对象思想概述Java是面向对象的语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。 这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。 它区...原创 2019-07-25 16:58:54 · 716 阅读 · 0 评论 -
秒懂Java多态的引用类型转换——向上转型、向下转型(强制转型)
多态的转型分为向上转型和向下转型两种向上转型多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。当父类引用指向一个子类对象时,便是向上转型。使用格式: 父类类型 变量名 = new 子类类型(); 如:Animal a = new Cat();向下转型父类类型向子类类型向下转换的过程,这个过程是强制的一个已经向上转型的子类类型,将父类引用转为子类引用,便是向下转型...原创 2019-07-25 20:12:09 · 1568 阅读 · 0 评论 -
详解Java中的Arrays类的copyOf()方法
java.util.Arrays 此类包含用来操作数组的各种方法,比如排序和搜索等。其所有方法均为静态方法,调用起来非常简单。Arrays.copyOf(T[] original,int newLength ):拷贝数组,其内部调用了System.arrayCopy()方法,从下标0开始,如果超过原数组长度,会用null进行填充。如下图可见:源码分析,内部调用了System.arraycop...原创 2019-07-26 14:32:13 · 12163 阅读 · 0 评论 -
运算符优先级引起的bug
在自定义ArrayList时,笔者模仿ArrayList的动态扩容方法即只要数组内数据的个数等于数组的长度,就将数组的长度增加原先长度的一半,代码献上: public void add(E obj) { //判断是否需要扩容 if (size == elementData.length) { //扩容操作 Obj...原创 2019-07-26 17:40:19 · 154 阅读 · 0 评论 -
手动实现ArrayList
ArrayList是顺序表结构,底层由数组组成,数组直接存取、删除操作复杂的特点使得ArrayList适用于不涉及频繁增删的场景。在之前的学习中,我们掌握了数组长度是有限的,而ArrayList可以存放任意数量的对象,这是通过动态扩容的方式实现的。1.最简化方式package cn.GTMStudio.MyConnection;/** * 自定义实现一个ArrayList,体会底层原理...原创 2019-07-26 21:13:59 · 196 阅读 · 0 评论 -
Java中日期和时间表示
Calendar instance = Calendar.getInstance(); instance.set(Calendar.YEAR,2020); instance.add(Calendar.YEAR,4); instance.add(Calendar.DAY_OF_MONTH,3); int year = instan...原创 2019-07-24 20:50:00 · 1174 阅读 · 0 评论