`
m635674608
  • 浏览: 5031654 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

apache common book 笔记

    博客分类:
  • java
 
阅读更多

第一章基本

对象操作

1.4自动生成 toString

ReflectionToStringBuilder.toString(this) 自动输出各属性的value

ToStringStyle:指定toStrig的格式

1.6构建hashCode

HashcodeBuilder:使用两素数作为起始,使用append增加hash的属性,如果属性值相同,则hash值相同

1.7 实现compareTo

RelectionCompareTo: 比较bean中属性的not-traisientnot-static属性,使用appendtoComparison()按指定order和值比较,orderappend的顺序相反

Array操作

1打印Array(primitive object)

ArrayUtils.toString

collection 直接用println输出即可

复制array

ArrayUtils.clone(arr):arr不变(safe-way处理null

3. 翻转array

ArrayUtils.reverse(arr):直接修改arr; Collections.reverse

查找对象

ArrayUtils.containindexOf lastIndexOf 查找使用equals进行比较

5. 多维数组中创建map

ArrayUtils.toMap(Objectobj): 将二维数组转换为map

日期处理

1.格式化Date

DateUtils.FastDateFormat 是线程安全的,在多线程中使用。sun的所有format都是非线程安全的

2.round the date

DateUtils.rount() 在秒、分、日、月级别round时钟

3.truncate date object

将不重要的字段清零,如 DateUtils.truncate(now,Calendar.HOUR)

4.使用stopwatch测量时间

函数参数

使用validate验证函数参数,可验证(empty null 集合 无null  isTrue):对(逻辑表达式、集合和对象、MapString

当验证失败时,跑出IllegalArgumentException异常,但异常不需要强制捕捉,如果不捕捉,不会有任何显示

当与各种Range,如IntRange,判断某值是否在序列中,使用isTrue

在函数内进行参数校验,而不是让调用者处理

第二章操作text

字符串

1.测试空字符串:

isBlank,在程序中避免使用null,使用“”替代

2.简写String

abbreviate() 字符串简写到20字节

当进行查找时,如indexOf() 可使用abbreviate(message,offset,width)显示查找字符串附近的上下文

3.split a String

jdk中的split是使用正则表达式,如果不想用正则,在StringUtils.split(str,“ .”) 使用空格和.分割字符串

4.查找String

containXXX(),具体有anynone only whitespace

substringBetween() 可用来从html标签中解析出content,还可解析被相同字符串分割的text

5.striptrimString

trim:从String两端去除空格和tab,还有trimToEmptytrimToNull

strip:去除指定字符,如–SHA--,去除--

6.chomping a String

String中去除\n\r 字符、自定义字符(最后一个)和最后几个字符

7,增加强调的头

StringUtils.repeat()center(在字符串首位增加内容)join的综合使用

8.按单词反转String

reverseDelimited(): String先分割为word,再对word间逆序并组合输出

9.wrap word

String自动换行为指定的宽度 WordUtils.wrap

当对web上的textwrap时,指定lineseparators是 <br/>

可实现网页上的防拷贝功能,即插入无用字符

10.String内容判断

isNumericisAlpha isAlphaNumericisAlphaSpace formname验证中,先用StringUtils.replacechars(使用字符集查找替换)替换不合适的字符,再用isAlpha判断

11.字符出现的频率

countMatches

12.按行读取数据 LineNumberReader

13.extract字符串

substringbefore after between

14.比较两个字符串的区别

indexOfDifference 获得从开始出现不同的位置, difference输出第二个不同于第一个的部分, getLevenshteinDistance() 说明相似程度

第三章操作javabean

访问属性

使用getProperties 取得simpleindex map nest属性

使用getPropertyType 得到property的类型,PropertyDescriptor提供类型、writeread方法。

使用bean属性比较和排序

BeanComparator获得两个bean的同一属性,可以为mapindexed nested simple

clone bean

  BeanUtils.cloneBean() 对于object类型属性也可以复制

使用predicatebean进行验证

  可使用BeanPredicate对属性进行判断,可对多个beanPredicate进行逻辑运算

创建一个map,包括bean的所有属性

  PropertyUtils.describe() 创建一个map包括bean的所有可读的选项

将一个bean当做map使用

  使用BeanMapwrap bean,可以以map的方式修改和读取属性,和PropertyUtils比起来具有迭代功能;而describe产生的部分与bean是分离的,修改map不会改变bean的值

运行时创建bean

  当使用bean代表datamodel,可创建一系列的DynaClass, 1)创建DynaProperty; 2)创建DynaClass 3)创建DynaBean

使用String设置和获取property

  BeanUtilsPropertyUtils中有很多相似的函数,区别是BeanUtils可使用字符串getset属性

  主要用于对输入参数的解析,比如request中国参数对bean的自动赋值

第四章 Functors

1.常见的有: 

    Comparator   Iterator    Predicate   Transformer  Factory(创建对象) and   Closure

Comparator

2.comparator取非

    ReverseComparator来翻转Comparator的结果

3.chain Comparator

  场景:使用多于一个propertycollection排序

  ComparatorChain创建一个Comparator的序列,ComparatorChain使用每一个Comparator比较两个object,直到一个比较器结果不等

  当在组合排序中,使用ComparatorChain+ReverserComparator可实现强大的排序功能,如类似于sql的 orderby  name ASC, age DESC

  当对bean排序时,使用由BeanComparator构成的ComparatorChain进行排序

4.比较null

  场景:对包含Null的数组排序,将Null放在最前和最后端

  Comparator使用NullComparator封装,如果Comparator不能处理Null,则使用NullComparator避免抛出NullPointerException

5.FixOrder Comparator

  场景:如果需要按枚举的值进行排序,比如按金、银、铜对运动员排序

  构造String数组——》构造FixedOrderComparator——》构造BeanComparator——》进行bean的排序

Predicate

  可用来filter  select  validate集合的内容,例如Equal InstanceOf   Identity(使用==比较)  空   非空  True|False  Unique(object是第一次evaluated,则返回true)

1.自定义Predicate

  继承自接口Predicate,实现evaluate函数

2.创建复杂的predicate

  AndPredicate  OrPredicate   AllPredicate  OnePredicate(精确地,有且只有一个) Any  Non  Not

Transformer

  srcobject变换为targetobjectsrc不变

1.transformer组合成链

  使用ChainedTransformer

2.conditional transformer

  使用switchTransformer:根据predicate的结果进行transformer

  Transformer.switchTransformer对于不满足Predicated不转换会返回Null,该函数适合if() else,而不适合if,如果实现if,应该先使用CollectionUtils.selectcollect完成

3.不变

  NopTransformer不进行任何转换返回源对象

closure

  在对象上执行某项操作,有if(根据predicate执行不同的closure);while(满足predicate时,一直执行closure)for(执行指定次数的closure,switch(根据predicate执行closure

1.chaining closure

2.condition

3.loop

    whileclosure

第五章 collections

Iterator

1.使用loopiterator

  对集合进行重复迭代,如ListAB C,如果迭代5次,得到AB C A B。不能使用hasNext作为终止条件,可使用reset重置

  用于:列表要重复访问  命令序列要重复执行   队列或buffer需要循环monitor

2.ArrayListIterator

  支持对ArrayList进行部分迭代,有用函数 nextIndex  next    set(设置当前元素的值)

  Iteratorit=new ArrayListIterator(list, 3,6);

  ArrayIteratorObjectArrayIterator在数组上进行迭代

3.使用predicate对集合进行过滤

  1)使用FilterIteratorpredicatetrue的元素迭代

  2)删除collection中不满足条件的元素 CollectionUtils.filter

  3)不修改原collection,返回过滤结果   CollectionUtils.select   CollectionUtils.selectRejected

4.只迭代不同的元素

  UniqueFilterIterator装饰Iterator,然后调用uniquenext()实现只有未出现的对象会访问,相当于使用UniquePredicateFilterIterator

Bag

  可存放同一对象多次,并跟踪有多少个相同对象,可用函数有:

  add(一次增加多个相同对象)

  remove(删除指定数目的特定对象)

 getCount(特定对象的个数)

 取得uniqueset,并在其上迭代

 containAll(足够数量的该对象)

 removeAll(指定数量的该对象)

 以上一些函数和Collection中的同名函数不同,在使用这些函数时,不要将Bag转换为Collection

Map

1.一个key多个valuemap 

  MultiMap

2.valuekey keyvalue的双向映射

  BidiMapvaluekey都是唯一的)BidiMap.inverseBidiMap()

  BidiMap有三个实现,DualHashBidiMap比较简单,使用两个HashMap存放keyvalueDualHashMap适用于不保存插入顺序;DualTreeBidiMap使用TreeMap保存顺序;TreeBidiMap保存节点时使用红-黑树,每个节点使用key-value标识,和DualTreeBIdiMap相比,当调用put花费两倍时间,1/2的内存,表格如下:

DualHashBidiMap

hashMap底层

时间少,空间多

DualHashMap

hashMap底层

时间多,空间少

DualTreeBidiMap

TreeMap底层

时间少,空间多

DualTreeMap

TreeMap底层

时间多,空间少

3.大小写不区分

  CaseInsensitiveMap 使用Stringkey

  适用于:用户输入的提示,或无视大小写返回结果

4.确保map中所有value满足条件

  使用PredicateMap验证keyvalue,当一个entry输入时,不满足条件,会抛出IllegalArgumentException

  PredicateMap.decorate(newHashMap(), oneP,twoP)

5.实现LRUcache

  LRUMap:保存固定容量的entry,当插入新的entry时覆盖原来的,

  用于:向用户显示数据,如排行榜的实现

  如果使用很多cache,可考虑专门的缓存实现

6.lazyMap

  实现懒加载,如操作数据库,通过primarykey获取对象时,在内部通过tranformer获取真正的records

7.MapUtils

  mapDouble——double  Integer——int

List

1. 使用PredicateList

  效果同PredicateMap

2.转换

  CollectionUtils.transform()

3.统计

  CollectionUtils.countMatch :统计Colection中满足某一条件对象的个数

  CollectionUtils.getCardiralityMap 返回collection中对象频率的map

4.集合操作

  CollectionUtils.union  intersection  disjunction( aUb-a^b)   subtract

第八章 Math

1.使用分数 Traction

2.Array的最大最小值

3.Number Range的使用

  使用Range接口,及其实现NumberRange  DoubleRange   FLoatRange  IntRange 。有用函数是contain  getMin  getMax

4.产生水机变量

6.进行样本统计

7.进行线性代数运算

8.复数的数学运算

9.建立线性函数

10.估计程序运行时间

  原理:使用SimpleRegression,添加数据点后,SimpleRegression会根据数据点的值,求出y=a*x+b的线性函数,当进行数据库访问时,假设每个记录的处理时间大致相等,可使用SimpleRegression进行估算,并使用StopWatch提供SimpleRegression需要的数据点。

第十章I/O和网络

IO相关

1.Stream  bytes[]   ReaderWriter的复制

  使用CopyUtils实现各种源到目的的复制,使用4KB缓存,注意源和目的的flushclose

  使用IOUtils.toString() 复制从ReaderInputStream)——》String

2.关闭Stream Writer Reader

  使用IOUtils.closeQuietly避免捕获异常

3.测量stream的字节数

  使用CountingInputStreamCountingOutputStreamstream进行decorate,调用CountingXXXStreamwrite/read后,调用getCount可获得字节数

4.splite  outputStream

  output发送到两个OutputStream

  注意使用flush输出,并使用closeQuietly悄悄关闭

文件

1.可读方式显示文件大小

  FileUtils.byteCountToDisplaySize()

2.复制文件StringURLs

  FileUtils.copyFIle() 复制文件到另一个文件

  FileUtils.copyFileToDirectory 复制文件到目录

  FileUtils.writeStringToFile: 将String写入到文件中

  FileUtils.copyURLToFile:将URL的内容复制到文件,可用来实现保存网址内容

3.递归删除目录

  FileUtils.deleteDirectory   cleanDirectory

4.获得文件夹大小

  FileUtils.sizeOfDirectory

5.过滤Directory下的文件

  定义在commons.io.filefilter包中的filter都实现了IOFilter接口,可对filefileName进行过滤,具体有PrefixFileFilter  SuffixFileFilter   NameFileFiliter   DirectoryFilter(只接收directory参数) AndFileFilter   FileFilter    NotFileFilter



第十一章HttpWebDev

HttpClient是一个Http协议的客户端,支持getpost  put  options  headdelete。支持多种认证机制basic digestNTLM.支持httpshttp,管理session状态、cookie信息

 

 

public class MyMap<K,V> {
	
	private Map<K,V> kMap = new HashMap<K,V>();
	private Map<V,ConcurrentHashMap<K,String>> vMap = new HashMap<V,ConcurrentHashMap<K,String>>();
	private final static String VV = "1";
	
	public boolean put(K k,V v) {
		boolean result = false;
		if(null == k || null == v) return result;
		if(kMap.containsKey(k)) {
			vMap.get(kMap.get(k)).remove(k);
			//vMap.remove(kMap.get(k));
		}
		kMap.put(k, v);
		if(vMap.containsKey(v)) {
			vMap.get(v).put(k,VV);
		} else {
			ConcurrentHashMap<K,String> set = new ConcurrentHashMap<K,String>();
			set.put(k,VV);
			vMap.put(v, set);
		}
		return true;
	}
	
	public boolean containsKey(K k) {
		return kMap.containsKey(k);
	}
	public boolean containsValue(V v) {
		return vMap.containsKey(v);
	}
	
	public Set<K> keySet(){
		return kMap.keySet();
	}
	
	public Set<V> valueSet() {
		return vMap.keySet();
	}
	
	public V getByKey(K k) {
		return kMap.get(k);
	}
	
	public ConcurrentHashMap<K,String> getByValue(V v) {
		return vMap.get(v);
	}
	
	public String toString() {
		return kMap.toString();
	}
	
	public static void main(String[] args) {
		MyMap<String,String> map = new MyMap<String,String>();
		map.put("k1", "v1");
		map.put("k2", "v2");
		map.put("k3", "v1");
		map.put("k4", "v2");
		System.out.println("k1 -> " + map.getByKey("k1"));
		System.out.println("v1 -> " + map.getByValue("v1").keySet());
		System.out.println("v2 -> " + map.getByValue("v2").keySet());
		map.put("k5", "v2");
		System.out.println("v2 -> " + map.getByValue("v2").keySet());
		map.put("k5", "v1");
		System.out.println("v1 -> " + map.getByValue("v1").keySet());
		System.out.println("v2 -> " + map.getByValue("v2").keySet());
		
		//替换所有的v1为v111
		System.out.println("before update : " + map);
		for(String k : map.getByValue("v1").keySet()) {
			map.put(k, "v111");
		}
		System.out.println("after update : " + map);
		
	}
}

 

http://blog.csdn.net/dananhai381/article/details/38866667

 

 

分享到:
评论

相关推荐

    Apache Common Math 2.2 API CHM文档

    Apache Common Math 2.2 API CHM 英文文档。 注意:如果你下载后打开右侧页面出现该页无法显示情况,请在CHM件中右键-属性,在下面点击-解除锁定。之后再打开文档即可。

    The Apache Modules Book Application Development with Apache

    国内的图书更是没有这方面的,在Amozon搜索了下,找到了《Writing Apache Modules with Perl and C》和《The Apache Modules Book: Application Development with Apache》两本书,由于前一本牵涉到Perl,对Perl没有...

    通过Apache common pool开源包实现对象池

    下面通过一个简单的样例来说明如何利用apache common pool来应用对象池。 假定我现在有一个任务,就是对一堆字符串进行格式化,为了加快速度,采用了多线程的方式允许,而格式化则是通过对象StringFormat来实现。 ...

    apache common api(chm)

    Apache Common API 是一系列由Apache软件基金会开发的Java库,这些库提供了各种实用工具和功能,以简化编程任务。本资源包含五个子项目的主要API文档,它们分别是BeanUtils、Collections、Configuration、Lang和...

    apache-common-compress.rar

    用于压缩/解压缩的java开发工具包,基本上主流格式全包含,其中apache-common-compress内有5个jar包,两个是test的不用管,剩余三个,一个是源码包,一个是开发包另一个是javadoc。解压除RAR外的所有格式。 apache-...

    apache common_mail

    apache commonmail.jar 用来发邮件

    apache common_vsf.chm中文帮助文档

    apache common_vsf.chm中文帮助文档

    Apache common imaging

    apache common imaging,Apache的图形处理库

    Apache Common CLI 1.2 源码

    Apache Common CLI 1.2 是一个Java库,主要用于处理命令行接口(CLI)的参数解析。这个库使得在Java程序中处理用户输入的命令行参数变得简单和规范,避免了手动解析字符串的繁琐工作。Apache Common CLI 提供了一种...

    apache的学习笔记

    apache的学习笔记

    apache_common_validator.chm 中文帮助文档

    apache_common_validator.chm 中文帮助文档 apache下的validator中文帮助文档

    apache ftpserver笔记

    这篇笔记主要围绕Apache FTPServer的使用、配置和相关开发进行讲解。 首先,Apache FTPServer提供了灵活的配置机制,允许管理员通过XML文件定制服务器的行为。这包括设置用户账户、指定工作目录、限制上传下载速度...

    apache kylin 搭建笔记

    Apache Kylin 环境搭建笔记 Apache Kylin 是一个基于分布式架构的企业级数据分析平台,由 Apache 软件基金会开发和维护。Kylin 环境搭建是一个复杂的过程,需要逐步配置和测试。本文将指导读者从头开始搭建 Apache ...

    apache-common-uploadfiile

    总结来说,"apache-common-uploadfile"是一个解决Java Servlet环境中文件上传问题的库,它提供了高效且灵活的解决方案,使得开发者能够方便地处理用户上传的各种文件。在Web开发中,掌握Apache Commons FileUpload的...

    apache common pool2 实例

    Apache Commons Pool2 是一个高效的对象池库,它允许开发者创建并管理对象池,以提高程序性能,特别是对于那些创建和销毁成本较高的对象。在Java应用中,对象池化是一种常用的优化策略,它通过复用已经创建的对象来...

    org.apache.common.zip

    "org.apache.common.zip"是Apache Commons项目的一部分,它是一个Java库,提供了对ZIP文件格式的广泛支持。Apache Commons是Apache软件基金会的一个项目,旨在提供可重用的Java组件,以简化开发人员的工作。这个库...

    apache-common最全的源码

    "apache-common最全的源码" 提供了该项目的完整源代码,这对于开发者来说是一份宝贵的资源,可以深入理解其实现机制,学习优秀的编程实践,以及进行二次开发或定制。 Apache Commons 包含了多个模块,每个模块都有...

    apache-common最全的jar包

    Apache Commons 是一个由 Apache 软件基金会维护的开源项目集合,它提供了许多实用的 Java 类库,解决了在开发过程中常见的问题,提升了代码的可复用性和效率。这个压缩包包含了一些 Apache Commons 的核心模块,让...

    apache-common jar包

    包含commons-beanutils-1.9.3-bin commons-collections4-4.1-bin commons-dbcp-1.4-bin commons-lang-2.6-bin commons-lang3-3.6-bin commons-pool-1.6-bin commons-pool2-2.4.3-bin

    apache common系列包的作用以及帮助文档

    `Apache common包的作用.docx` 文件很可能包含了对上述各个组件的详细介绍和使用案例。而 `API.rar` 文件则可能是Apache Commons 的API文档,解压后可以查看详细的类和方法说明,这对于理解和使用Apache Commons ...

Global site tag (gtag.js) - Google Analytics