分类 java 下的文章

二分查找算法

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。

算法

  1. 假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;
  2. 否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
  3. 重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

- 阅读剩余部分 -

示例

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"

- 阅读剩余部分 -

冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。

这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

- 阅读剩余部分 -

概述

Guava包里的Service用于封装一个服务对象的运行状态、包括startstop等方法。例如web服务器,RPC服务器、计时器等可以实现这个接口。对此类服务的状态管理并不轻松、需要对服务的开启/关闭进行妥善管理、特别是在多线程环境下尤为复杂。Guava 包提供了一些基础类帮助你管理复杂的状态转换逻辑和同步细节。

使用一个服务

一个服务正常生命周期有:

- 阅读剩余部分 -