java
文章平均质量分 90
TINY_SPOT
积累积累积累!
展开
-
归并排序之求逆序对
何谓归并排序,先看下面一个例子:设有数列{6,202,100,301,38,8,1}初始状态:6,202,100,301,38,8,1第一次归并后:{6,202},{100,301},{8,38},{1};第二次归并后:{6,100,202,301},{1,8,38};第三次归并后:{1,6,8,38,100,202,301};最终结果得出{1,6,8,38,100,202...原创 2018-07-26 11:45:54 · 21194 阅读 · 11 评论 -
Java ArrayList扩容机制(基于JDK1.8)
ArrayList继承自AbstractList,实现List接口,是一个可变长的列表。不同于LinkedList,LinkedList底层由链表实现,所以只需维护好底层链表,即可实现列表的长度变化。而ArrayList底层由数组实现,数组初始化需要指定长度,所以想要实现可变长的列表,ArrayList底层肯定做了一些小动作来支持。今天看了下ArrayList的源码,记录一下它的扩容机制。首先,需要了解类内的这6个属性:/** * 列表默认的初始化容量,10 */原创 2021-08-20 12:33:43 · 549 阅读 · 0 评论 -
Java8新特性之Stream API学习
Java8新特性之Stream API学习Stream API 介绍Java8中有两个最为重要的改变。第一个是Lambda表达式;另一个就是Stream API 。Stream是Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用Strea...原创 2020-03-19 23:35:46 · 333 阅读 · 0 评论 -
Java8新特性之Lambda表达式学习
Lambda表达式 Lambda表达式是Java8推出的非常强大的特性之一。借助它,我们对一些接口的简单实现不再需要写那么多繁琐,多余的代码,只需写一些关键性的代码,即简洁又优雅,装X与无形之中。但是正因如此,可读性也就不要奢求了。**使用要求:*待实现的接口中只能有一个需要被实现的方法,不包括default修饰的方法。而这种接口,就称之为函数式接口,通常用@FunctionalInter...原创 2020-03-14 00:17:38 · 174 阅读 · 0 评论 -
Java8新特性之函数式接口学习
函数式接口只包含一个方法的接口(default方法除外)称为函数式接口。可用@FunctionalInterface注解修饰,可以语法检查。@FunctionalInterfacepublic interface InterfaceTest { void test(); default void defaultMethod() {}}四大内置核心函数式接口Lambda...原创 2020-03-13 17:40:42 · 189 阅读 · 0 评论 -
Java自定义排序
Java中自定义排序可以通过实现Comparator接口或Comparable接口来完成。关键:实现Comparator接口的关键在于重写compare()方法,Comparable接口的关键在于重写compareTo()方法。JDK中大部分的类都实现了Comparable接口,拥有compareTo方法。如Integer,String等。但是对于自己定义类,如果需要自定义排序,则要实现Comp...原创 2019-07-20 19:56:29 · 3336 阅读 · 0 评论 -
设计模式之单例模式
单例模式单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。刚刚看了看单例模式,趁热打铁,先做个笔记。这种模式涉及到一个单一的类,该模式的要求是:1.该类负责创建自己的对象,同时确保只有单个对象被创建2.这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。根据要求考虑采用什么样的方式实现,因为不能被实例化,那么该类的构造方法我...原创 2019-08-01 22:11:36 · 136 阅读 · 0 评论 -
Java反射机制
什么是Java反射机制 JAVA反射机制是在运行状态中,对于任意一个实体类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 Java的反射机制允许编程人员在对类未知的情况下,获取类相关信息的方式变得更加多样灵活,调用类中相应方法,是Java增加其灵活性与动态性的一种机制。----百度百...原创 2019-08-12 16:35:26 · 160 阅读 · 0 评论 -
HashMap源码学习(JDK1.8)
今天撸了一下Java8的HashMap源码,总算搞清楚了一点点,所以Mark一下(有理解不对的地方希望有大佬指出)先看一下HashMap的存储结构,先对HashMap的存储结构有一个初步认识对源码分析有很大好处。上图取自CS-Notes上图的0-15可以看做是16个桶,HashMap初始桶的数量为16,然后下面吊着的是桶上面的链表。还是先看看结点的存储结构吧:static clas...原创 2019-09-15 22:24:21 · 139 阅读 · 0 评论 -
十大经典内部排序之八大实现(Java版)
在将排序之前,先来了解一下排序的一些基本概念。内部排序和外部排序:内部排序指的是待排序记录全部存放在计算机内存中进行排序的过程。外部排序指的是待排序记录的数量很大,以致内存一次不能容纳全部记录,在排序过程中需对外存进行访问的排序过程。排序的稳定性:当待排序序列中存在两个或两个以上的关键字相等的记录时,设有两个关键字相等的记录和(i < j),即在排序前在前面,若排序后,...原创 2019-04-18 20:49:03 · 236 阅读 · 0 评论 -
二叉树(Binary Tree)
二叉树是n个结点所构成的集合,它或为空树或为非空树。对于非空树T:1.有且仅有一个称之为根的结点;2.除根节点之外的其余结点分为两个互不相交的子集T1和T2,分别称为左子树和右子树,且T1和T2也都是二叉树。满二叉树:深度为k且含有个节点的二叉树。完全二叉树:深度为k的,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1-n的结点一一对应,称之为完全二叉树。...原创 2019-04-14 16:19:44 · 261 阅读 · 0 评论 -
Java集合之LinkedList
首先上图:上图是Java中单列集合的继承关系图,Collection是单列集合类的跟接口,用于存储一些列符合某种规则的元素,其中一个重要的特性就是长度可变。它有两个子接口,分别是List和Set。List的特点是元素有序,元素可重复Set的特点是元素无序,元素不可重复上述的有序是指元素的存入顺序和取出顺序一致,而非大小排序那种有序。LinkedList是List接口的实现类...原创 2019-03-19 18:08:16 · 177 阅读 · 0 评论 -
Java集合之ArrayList
首先上图:ArrayList是List接口的实现类,而List接口又继承自Collection接口,所以ArrayList属于单列集合,他是程序中最常见的一种集合。和LinkedList一样它是有序的(元素存入顺序和取出顺序一致),并且元素可以重复。ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些...原创 2019-03-19 18:44:18 · 815 阅读 · 0 评论 -
Java集合之Vector
首先上图:Vector类实现可增长的对象数组,同ArrayList一样都是采用数组存储数据。Vector通过维护capacity和capacityIncrement来优化存储管理,capacity值始终至少应与向量的size相等,当往Vector中添加的元素个数要大于capacity时,Vector将按capacityIncrement的大小增加存储块。与ArrayList不同...原创 2019-03-19 20:02:47 · 122 阅读 · 0 评论 -
Java集合之HashSet
首先上图:由图可知,HashSet是Collection和Set接口的实现类。Set的一个重要特性就是元素不可重复,且元素无序(存入顺序与取出顺序不一致),这与List接口是恰恰相反的。HashSet是根据对象的哈希值来确定元素在集合中的存储位置,因此具有良好的存取和查找性能,其底层其实是一个HashMap的实例,它允许使用null元素。HashSet不是线程安全的。Set集合和List...原创 2019-03-19 21:34:55 · 289 阅读 · 0 评论 -
Java集合之TreeSet
首先上图:TreeSet是Collection和Set接口的是实现类,特点是元素不重复,且无序(指存入顺序和取出顺序可能不一致)。它内部采用自平衡的排序二叉树来存储元素,以此结构来保证元素不重复且可以对元素进行排序。自平衡的排序二叉树很重要的一个性质是根节点的左子树都小于根节点,根节点的右子树都大于根节点。以此迭代,从而保证有序。另外TreeSet不是线程安全的。下面的代码演示的是TreeSe...原创 2019-03-20 17:21:31 · 274 阅读 · 0 评论 -
快速排序----Java实现
快排是由冒泡排序改进而得的。冒泡一次交换只能消除一个逆序,而快排的一次交换可以消除多个逆序,从而大大加快排序的速度。算法步骤: 在待排序的n个记录(元素)中任取一个记录(通常取第一个记录)作为枢轴(或者叫支点,就是先随便取一个数),设它的值为key。快排就是在每一趟排序后,把所有值小于key的记录交换到key前面,而把比key大的记录交换到key的后面,最后将key放到“中...原创 2019-03-20 21:35:40 · 208 阅读 · 0 评论 -
Java集合之HashMap
首先上图:Map接口是一种双列集合,不同于List和Set这些单列集合,它的每一个元素都包含一个键值对key和value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了key,就可以通过key找到对应的value。由图可知,HashMap是Map接口的实现类,它基于哈希表,必须保证不出现重复的键,但没要求值也要唯一(相同的值可以有多个键对应),并且键和值都允许使...原创 2019-03-21 18:08:08 · 207 阅读 · 0 评论 -
二叉排序树Java实现(Binary Sort Tree)
二叉排序树又称二叉查找树,它是一种对排序和查找都很有用的特殊二叉树。二叉树的定义:二叉树或者是一颗空树,或者是具有下列性质的二叉树:1.若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值;2.若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值;3.它的左右子树也分别为二叉排序树。简单的说就是(左 < 根 < 右)二叉排序树的创建:从空的...原创 2019-04-14 16:09:42 · 495 阅读 · 0 评论 -
eclipse如何查看当前项目的编码方式+java编码方式总结
我们写代码有时候会出现这种情况:在自己电脑上运行的很正常,字符显示很完美,把自己的代码给别人或者换台机器运行,就会出现乱码的现象,这是为什么呢?都是编码方式在作祟,不同的机器或java项目可能使用的默认编码不同。如何查看eclipse 中java项目的编码方式:如图右击项目名称,然后选择propertices选项,就可以了我的这个项目的默认编码方式是utf-8 ,下面对java...原创 2018-10-30 19:31:00 · 14067 阅读 · 3 评论