分类 默认分类 下的文章

概述

Java内建的散列码[hash code]概念被限制为32位,并且没有分离散列算法和它们所作用的数据,因此很难用备选算法进行替换。此外,使用Java内建方法实现的散列码通常是劣质的,部分是因为它们最终都依赖于JDK类中已有的劣质散列码。

Object.hashCode往往很快,但是在预防碰撞上却很弱,也没有对分散性的预期。这使得它们很适合在散列表中运用,因为额外碰撞只会带来轻微的性能损失,同时差劲的分散性也可以容易地通过再散列来纠正(Java中所有合理的散列表都用了再散列方法)。然而,在简单散列表以外的散列运用中,Object.hashCode几乎总是达不到要求——因此,有了com.google.common.hash包。

- 阅读剩余部分 -

示例

List<Double> scores;
Iterable<Double> belowMedianScores = Iterables.filter(scores, Range.lessThan(median));
...
Range<Integer> validGrades = Range.closed(1, 12);
for(int grade : ContiguousSet.create(validGrades, DiscreteDomain.integers())) {
  ...
}

简介

区间,有时也称为范围,是特定域中的凸性(非正式说法为连续的或不中断的)部分。在形式上,凸性表示对 a<=b<=c, range.contains(a)range.contains(c)意味着 range.contains(b)

- 阅读剩余部分 -

字节流和字符流

Guava使用术语“stream”来表示I/O数据的可关闭流,这些数据在底层资源中具有位置状态。术语“byte stream”指的是InputStreamOutputStream,而“char stream”指的是阅读器或写入器(尽管它们的ReadableAppendable常用作方法参数)。相应的实用程序分为ByteStreamsCharStreams实用程序类。

大多数Guava流工具一次处理一个完整的流,并且为了效率自己处理缓冲。还要注意到,接受流为参数的Guava方法不会关闭这个流:关闭流的职责通常属于打开流的代码块。

- 阅读剩余部分 -

选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。

选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对 n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。

- 阅读剩余部分 -

概述

Java的基本类型:byteshortintlongfloatdoublecharboolean

在从Guava查找原生类型方法之前,可以先查查Arrays类,或者对应的基础类型包装类,如Integer

原生类型不能当作对象或泛型的类型参数使用,这意味着许多通用方法都不能应用于它们。Guava提供了若干通用工具,包括原生类型数组与集合API的交互,原生类型和字节数组的相互转换,以及对某些原生类型的无符号形式的支持。

- 阅读剩余部分 -

快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

算法

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为较小和较大的2个子序列,然后递归地排序两个子序列。

- 阅读剩余部分 -

介绍

InternetDomainName是一个用于解析和操作域名的工具。它可以用作验证器、组件提取器和值类型,以便以类型安全的方式传递域名。

然而,InternetDomainName行为在某些方面可能会令人吃惊,并可能导致调用代码的错误。本文档解决了这些问题。

详情

公共后缀和私有域

根据相关的RFC规范,可以保证InternetDomainName对象在语法上是有效的,但不能保证它与Internet上的实际可寻址域相对应。如果不进行域的网络查找并尝试与它联系,就不可能做到这一点,对于大多数情况,这是无法接受的开销。

不过,确定给定的域名是否代表Internet上的实际域名通常非常有用。为此,我们使用来自公共后缀列表Public Suffix List (PSL)的数据,该列表由Mozilla基金会维护。在InternetDomainName上有一些方法来确定给定域与PSL之间的关系。用最基本的术语来说,如果domain.haspublicsuffix()返回true,则该域可能对应一个实际的Internet地址;否则,它几乎肯定不会。

- 阅读剩余部分 -

Joiner

用分隔符把字符串序列连接起来也可能会遇上不必要的麻烦。如果字符串序列中含有null,那连接操作会更难。Fluent 风格的Joiner让连接字符串更简单。

Joiner joiner = Joiner.on("; ").skipNulls();
return joiner.join("Harry", null, "Ron", "Hermione");

上述代码返回”Harry; Ron; Hermione”。另外,useForNull(String)方法可以给定某个字符串来替换null,而不像skipNulls()方法是直接忽略nullJoiner也可以用来连接对象类型,在这种情况下,它会把对象的toString()值连接起来。

Joiner.on(",").join(Arrays.asList(1, 5, 7)); // returns "1,5,7"

- 阅读剩余部分 -

flv 是flash video的简称,flv流媒体格式是随着flash mx的推出发展而来的视频格式。相对来说在各个设备上, 支持mp3的更普遍,将 flv 格式转换为 mp3 格式就有了需求.

ffmpeg 是一个速度极快的视频/音频转换器, 甚至能捕获一个实时的音视频流,功能非常强大,我们这里先仅仅介绍下,如何将 flv 转换为 mp3.

ffmpeg 基本使用格式为:

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}

flv 转换为 mp3 也相对较简单:

ffmpeg -i example.flv example.mp3

有空我们详细展开下 ffmpeg 的使用教程.

- 阅读剩余部分 -