Java中的反射 在面向对象的世界里,万事万物皆对象。 java语言中,类是对象,类是java.lang.Class类的实例对象。这个对象我们成为该类的类类型。 Class类的对象到底如何表示呢? 任何一个类都是Class的实例对象,这个实例对象有三种表示方式: (1)第一种表示方式:实际告诉我们任何一个类都有一个隐含的静态成员变量class Class c1 = F...
Java8 Lambda表达式 lambda表达式也称函数式编程自己在学习java的时候才接触到了lambda表达式 看到lambda表达式会让代码看起来非常精简 我看了一下网上的学习资料也不少 自己整理一下顺便写一下自己的看法 比较简单 希望我的博客可以带给别人帮助 以及方便自己以后进行回顾和总结 Lambda表达式的组成 java 8 中Lambda 表达式由三个部分组成:第一部分为一个括号内用逗号分隔的形...
Guava源码阅读——Collect包.AbstractMapBasedMultimap类 AbstractMapBasedMultimap是Multimap接口的基础实现类,实现了Multimap中的绝大部分方法,其中有许多的方法还是靠实现类的具体实现,比如size()方法,其计算方法在不同实现是不一样的。同时,AbstractMapBasedMultimap类也定义了自己的一些方法,比如createCollection()。AbstractMapBasedMultimap类中主要存在...
Guava源码阅读——base包.Joiner类 Joiner类的基本功能:将字符串数组按指定分隔符连接起来,或字符串串按指定索引开始使用指定分隔符连接起来,通过Join类,我们可以方便实现将容器中的数据按照自定义的方式拼接成一个字符串,而且这是一种线程安全的方式。变量://分隔符构造方法:这两个构造函数都是静态构造器,所以不能直接使用这两个构造器去创建Joiner,所以想要创建Joiner只能使用静态方法。可接收字符串和...
Guava源码阅读——base包.Splitter类 转至元数据结尾 Strategy模式:策略模式这个定义了一系列的算法,并将每个算法封装起来,使它们还可以相互替换。策略模式让算法的变化不会影响到使用算法的客户,在Splitter中就主要使用了这种模式。1、首先看一个内部类这个类才是真正去处理字符、字符串、正则表达式的接口,这个接口的定义其实就是策略模式。此接口中只有一个方法,返回的是一个Iterator迭代器,这里我们可以先联想到最终返回...
Guava源码阅读——base包.Stopwatch类 Stopwatch是什么 Stopwatch 解释为计时器,又称秒表、停表,很明显它是记录时间的。 成员变量 构造函数 isRunning方法:如果start方法被调用但是stop方法还没有调用,就返回真。start方法:启动stopwatch。stop方法:停止stopwatch,...
Guava源码阅读——base包.Strings类 方法 功能 传参类型 返回类型 实现方法 复杂度 nullToEmpty 将null转换为"" String String O(1) emptyToNull 与上个方法相反 String String ...
Guava源码阅读——Collect包.ComparisonChain类 ComparisonChain 使用有一个产品的list,想对这个list先按产品生效时间排序,如果生效时间一样再按失效时间排序,代码如下:package collection; import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util...
Guava源码阅读——Collect包.Lists类 功能函数 创建ArrayList方法 newArrayList() newArrayList(E... elements) newArrayList(Iterable<? extends E> elements) newArrayList(Iterator<? extends E> elements) newA...
Guava源码阅读——Collect包.Multimap类 Multimap相对于传统的Map区别在于,Multimap是一对多的一个数据结构,对于Multimap的解析用HashMultimap进行解析,看一下HashMultimap的类结构图:HashMultimap构造器因为他的构造方法是私有的,所有他会拥有静态方法构造器:public static <K, V> HashMultimap<K, V> ...
Guava源码阅读——Collect包.Ordering类 API 实例化直接获得 natural() 自然序 usingToString() 字典序 指定 from(Comparator) 包装Comparator explicit(List)explicit(least, ... others) 指明这几个东西的顺序,只排它们 直接继承 其他 allEqual() 全相...
Guava源码阅读——Collect包.Sets类 union类实现传入:set1, set2传出:内部实现的 setView 其继承了 AbstractSetpublic static <E> SetView<E> union(final Set<? extends E> set1, final Set<? extends E> set2) { checkNotNull(set...
Guava源码阅读——primitives包.Ints类 看完Primitives包中的Ints类之后,我对其中的方法做出了整理...有写的不好的地方请多多指教 方法 功能 传参类型 返回类型 实现方法 复杂度 hashcode 返回int型的hash值(直接用溢出当作hash) int int...
Git初阶:入门&常用命令 一、版本控制系统集中式版本控制系统SVN:存储每个文件的变化分布式版本控制系统Git:存储完整的文件快照二、SVN和Git的区别1、Git所有的操作都可以在本地完成;SVN需要与服务器通讯以获得其他版本的文件。2、Git用hash生成版本号,可以保证文件的完整性;SVN使用递增的编号作为版本号。三、Git的3种状态1、已修改(modified)----------工作区2、...
两个队列实现一个栈 代码实现:#include <iostream>#include <queue>using namespace std;class MyStack{public: void push(int val) { //插入到非空队列 if (q1.empty()) { q2.push(val); } if (q2.empty()) ...
实现统计字符串中第一个空字符前面的字符长度——递归 举例:char buf[] = { 'a', 'b', 'c', 'd', 'e', 'f', '\0', 'x', 'y', 'z' };字符串buf,当输入n=10或者20时,期待输出结果为6;当输入n=3或者5时,期待输出结果为3或者5。 代码实现:#include <iostream>using namespace std;//统计字符串中第一...
快速排序 代码实现:#include <iostream>using namespace std;//快速排序void QuickSort(int *arr, int len, int left, int right){ int i, j, t, tmp; if (left > right) { return; } tmp = arr[left]; i = ...
STL不同容器的优缺点 一、容器的分类1、序列容器(1)vector典型的序列容器,任意元素的读取、修改具有O(1),在序列尾部进行插入、删除是O(1),但在序列的头部插入、删除的时间复杂度是O(n),可以在任何位置插入新元素,有随机访问功能,插入删除操作需要考虑。(2)deque序列容器,内存也是连续的,和vector相似,区别在于在序列的头部插入和删除操作也是O(1), 可以 在任何位置插入新元素,有随机...
指针和引用的区别 问题:指针与引用的区别?1.非空区别 在任何情况下都不能使用指向空值的引用,一个引用必须总是指向某些对象(引用必须初始化)。因此如果你使用一个变量并让它指向一个对象,但是该变量在有些时候也可能不指向任何对象,这时你就应该把变量声明为指针,因为这样你就可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你设计不允许变量为空,只是你就可以把变量声明为引用。不存在指向空值的引用...
new/delete和malloc/free的区别 1、属性new/delete 是关键字malloc/free是库函数2、参数(是否需要指定内存大小)new动态申请内存时,不需要指定内存块的大小int *p = new int;mallo动态申请内存时,需要显示指定内存的大小int *p = (int*)malloc(sizeof(int));3、返回值(返回类型安全性)new内存分配成功时,返回的是对象类型的指针,是符合类型安全的操作符mall...