- 浏览: 70760 次
- 性别:
-
文章列表
看了JDK中几个Map的实现源码。
不由得感叹数据结构的重要性。
是该踏踏实实扎扎实实的学习数据结构和基本算法了。
不然一辈子做J2EE的命。
一、sort命令
sort命令用来对文本文件进行排序,并将排序结果输出到标准输出,下面通过实例介绍sort各种参数的用法
sort默认排序为首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出
$ cat sort.log |sort
aaccv
bbkk
ergefe
jsdhfh
qwqw
rrrr
rrrr
wewr
sort -u 排序后去除重复结果
$ cat sort.log |sort -u
aaccv
bbkk
efergferg
ergefe
ergfewrg
ggggg
jsdhf
qw ...
今天工作中需要用到一个保持插入顺序的键值对的数据结构。遂想到了Map中的 JDK中map的LinkedHashMap 能满足需要。顺便做了下面的整理。
排序都是依据key来排序的。如果要依据Value来排序,需要自己来实现相关的Map类,有兴趣的可以试试看。
LinkedHashMap 会保持插入时候的顺序,但是相同的key插入多次,默认以第一次插入的顺序为准,除非将accessOrder设置为true,则以最后一次插入的顺序为准
LinkedHashMap<String,String> map=new LinkedHash ...
一、CompletionService的实现类:ExecutorCompletionService
相当于ExecutorService与BlockingQueue的组合,即能够将一组任务的运行结果按结果的先后顺序放入阻
塞队列中,以便逐一取出
二、适用场景:
假定有针对某个问题的一组求解程序,每个求解程序都能返回某种类型的 Result 值,并且您想同时运行
它们,使用方法 use(Result r) 处理返回非 null 值的每个求解程序的返回结果
三、代码示例:
import java.ut ...
java并发 Semaphore(七)
- 博客分类:
- javase
一个计数信号量。从概念上讲,信号量维护了一个许可集。如有必要,在许可可用前会阻塞每一个 acquire(),然后再获取该许可。每个 release() 添加一个许可,从而可能释放一个正在阻塞的获取者。但是,不使用实际的许可对象,Semaphore 只对可用许可的号码进行计数,并采取相应的行动。
Semaphore 通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。
获得一项前,每个线程必须从信号量获取许可,从而保证可以使用该项。该线程结束后,将项返回到池中并将许可返回到该信号量,从而允许其他线程获取该项。注意,调用 acquire() 时无法保持同步锁,因为这会阻止将项返回 ...
CountDownLatch是不可以重复使用的。每次都需要new一个出来。
一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。
用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。
CountDownLatch 是一个通用同步工具,它有很多用 ...
一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。
代码实例:
import java.util.concurrent ...
在使用某些种类的 Collection 时,可以使用 ReentrantReadWriteLock 来提高并发性。通常,在预期 collection 很大,读取者线程访问它的次数多于写入者线程,并且 entail 操作的开销高于同步开销时,这很值得一试。例如,以下是一个使用 TreeMap 的类,预期它很大,并且能被同时访问
代码实例:
import java.util.Map;
import java.util.TreeMap;
import java.util.concurrent.locks.Lock;
import java.util.concurrent ...
本文基本是JDK文档中的说明内容,但是已经很好的解释了Condition对象的使用方法。
Condition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供 ...
首先,调用一个Object的wait与notify/notifyAll的时候,必须保证调用代码对该Object是同步的,也就是说必须在作用等同于synchronized(obj){......}的内部才能够去调用obj的wait与notify/notifyAll三个方法,否则就会报错:
java.lang.IllegalMonitorStateException:current thread not owner
方法的详细解释:
wait():
等待对象的同步锁,需要获得该对象的同步锁才可以调用这个方法,否则编译可以通过,但运行时会收到一个异常:Ill ...
HttpClient基础(一)
- 博客分类:
- HttpClient
一、基本的使用
HttpClient组件(这里以HttpClient4.3为例)可以模拟浏览器Http协议的request/response请求的交互。
下面的代码是基本使用的代码示例:
String url= "http://.......";
// 构建请求参数
CloseableHttpClient httpclient=HttpClients.createDefault();
HttpGet httpget=new HttpGet(url);
CloseableHttp ...
关于URLConnection对象
- 博客分类:
- javase
开始的目的是为了检测一个URL指向的文件是否存在。代码如下:
try{
String filePath="http://*****013-09-25_03.csv";
URL furl=new URL(filePath);
furl.getContent();
}catch(FileNotFoundException e){
/////
}
但是后续连接http://*****013-09-25_03.csv进行下载的时候,程序堵住无法执行了。原因就是furl.getContent()持有了对文件的长 ...
1、ASCII字符对应的字符组 [\x00-\x7F]
例如:判断是否是ASCII字符
# -*- coding: UTF-8 -*-
import re
print (re.search("^[\x00-\x7F]$", "c")!=None)
print (re.search("^[\x00-\x7F]$", "I")!=None)
print (re.search("^[\x00-\x7F]$", "0")!=None)
...