摘要:本文的起因源于一次quartz的异常,在win2003正常运行的程序放在linux环境就抛出异常了,虽然找出异常没花我多长时间,不过由此加深了对quzrtz的了解;古人说,三折肱,为良医,说明经验对于我们平时开发的重要。quartz是一个任务调度框架,对于开发者而言通常是透明的,如果不熟悉内部机制,碰到问题往往会束手无策;接下来本人本着开放的精神,来阐述本人对quartz的理解。本人是采用spring对quartz封装的实现,spring的org.springframework.scheduling.quartz.SchedulerFactoryBean类用于初始化Scheduler对象并启动
阅读全文
06 2013 档案
摘要:转载 http://blog.csdn.net/cutesource/article/details/6192163最后我们再看看NIO方面最著名的框架Mina,抛开Mina有关session和处理链条等方面的设计,单单挑出前端网络层处理来看,也采用的是与Jetty和Tomcat类似的模式,只不过它做了些简化,它没有隔开请求侦听和请求处理两个阶段,因此,宏观上看它只分为两个阶段。先看看它的类图:其中:SocketAcceptor起线程调用SocketAcceptor.Work负责新连接侦听,并交给SocketIoProcessor处理SocketIoProcessor起线程调用SocketIo
阅读全文
摘要:本文转载自 http://blog.csdn.net/cutesource/article/details/6192145下面再来看看Tomcat是如何使用NIO来构架Connector这块的。先看看Tomcat Connector这块的类图:其中:NioEndpoint负责组装各部件Acceptor负责监听新连接,并把连接交给PollerPoller负责监听所管辖的channel队列,并把请求交给SocketProcessor处理SocketProcessor负责数据处理,并把请求传递给后端业务处理模块在整个服务端处理请求的过程可以分为三个阶段,时序图如下所示:阶段一:监听并建立连接这一阶段
阅读全文
摘要:本文转载自http://blog.csdn.net/cutesource/article/details/6192016如何正确使用NIO来构架网络服务器一直是最近思考的一个问题,于是乎分析了一下Jetty、Tomcat和Mina有关NIO的源码,发现大伙都基于类似的方式,我感觉这应该算是NIO构架网络服务器的经典模式,并基于这种模式写了个小小网络服务器,压力测试了一下,效果还不错。废话不多说,先看看三者是如何使用NIO的。Jetty Connector的实现先看看有关类图:其中:SelectChannelConnector负责组装各组件SelectSet负责侦听客户端请求SelectChan
阅读全文
摘要:目录信息检索的概念信息检索技术的分类全文检索与数据库查询对比全文检索工具一般由三部分构成全文检索中建立索引和进行检索的流程索引里面究竟存什么如何创建索引如何对索引进行检索Lucene系统结构与源码组织图Lucene索引文件的概念组成和结构组成1、信息检索的概念信息检索就是从信息集合中找出与用户需求相关的信息。被检索出的信息除了文本外,还有图像、音频、视频等多媒体信息。2、信息检索技术的分类目前信息检索技术可分为3类:全文检索:把用户的查询请求和全文中的每一个词进行比较,不考虑查询请求与文本语义上的匹配。在信息检索工具中,全文检索是最具通用性和实用性的。数据检索:查询要求和信息系统中数据都遵循一
阅读全文
摘要:Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。Java NIO出现不只是一个技术
阅读全文
摘要:五、迷惑不解:为什么要自己消耗资源?令人不解的是为什么我们的Java的New I/O要设计成这个样子?如果说老的I/O不能多路复用,如下图所示,要开N多的线程去挨个侦听每一个Channel (文件描述符),如果这样做很费资源,且效率不高的话。那为什么在新的I/O机制依然需要自己连接自己,而且,还是重复连接,消耗双倍的资源?通过WEB搜索引擎没有找到为什么。只看到N多的人在报BUG,但SUN却没有任何解释。下面一个图展示了,老的IO和新IO的在网络编程方面的差别。看起来NIO的确很好很强大。但似乎比起C/C++来说,Java的这种实现会有一些不必要的开销。六、它山之石:从Apache的Mina框
阅读全文
摘要:一、前言自从J2SE 1.4版本以来,JDK发布了全新的I/O类库,简称NIO,其不但引入了全新的高效的I/O机制,同时,也引入了多路复用的异步模式。NIO的包中主要包含了这样几种抽象数据类型:Buffer:包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。Charset:它提供Unicode字符串影射到字节序列以及逆映射的操作。Channels:包含socket,file和pipe三种管道,都是全双工的通道。Selector:多个异步I/O操作集中到一个或多个线程中(可以被看成是Unix中select()函数的面向对象版本)。我的大学同学赵锟在使用NIO类库
阅读全文
摘要:linux 下 shell命令 ,制作md5码 也用于软件的md5校验 MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相同的报文摘要的可能性是非常非常之小的。 在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了Linux后,就会有md5sum这个工具,直接在命令行终端直接运行。 1、使用md5sum来产生指纹(报...
阅读全文
摘要:Solr是一个使用开源的搜索服务器,它采用Lucene Core的索引和搜索功能构建,它可以用于几乎所有的编程语言实现可扩展的搜索引擎。Solr的虽然有很多优点,建立开发环境是不是其中之一。此博客条目介绍了我们如何通过使用使用Maven运行Solr,并确保每个开发人员使用相同的configuration, schema 和 Solr版本。我们的Maven构建的要求如下:The properties of our Maven build must be read from an external property file. The only exception to this rule i
阅读全文
摘要:大多数应用都必须具有某种搜索功能,问题是搜索功能往往是巨大的资源消耗并且它们由于沉重的数据库加载而拖垮你的应用的性能这就是为什么转移负载到一个外部的搜索服务器是一个不错的主意,Apache Solr是一个流行的开源搜索服务器,它通过使用类似REST的HTTP API,这就确保你能从几乎任何编程语言来...
阅读全文
摘要:Solris an open source search server which is built by using the indexing and search capabilities ofLucene Core, and it can be used for implementing scalable search engines with almost any programming language.Even though Solr has many advantages, setting up a a development environment is not one of
阅读全文
摘要:This is the ninth and the last part of mySpring Data JPA tutorial. Now it is time to take a look of what we have learned, and how we should use it to build better software.Table of ContentsThe contents of my Spring Data JPA tutorial is given in following:Part One: ConfigurationPart Two: CRUDPart Thr
阅读全文
摘要:The previous part of my tutorial describedhow you can paginate query results with Spring Data JPA. The example application of this blog entry has the same functional requirements, but it will use Querydsl instead of JPA criteria API. This blog entry assumes that you have got experience from both Que
阅读全文
摘要:The previous part of mySpring Data JPA tutorialdescribed how you can sort query results with Spring Data JPA. This blog entry will describe how you can paginate the query results by using Spring Data JPA. In order to demonstrate the pagination support of Spring Data JPA, I will add two new requireme
阅读全文
摘要:The fifth part of mySpring Data JPA tutorialdescribed how you cancreate advanced queries with Spring Data JPA and Querydsl. This blog entry will describe how you can use Spring Data JPA for sorting the query results. As an example I will be adding two new requirements for my example application:The
阅读全文
摘要:The fourth part of mySpring Data JPA tutorialdescribed how you can implement more advanced queries with the JPA criteria API. As you might remember, the goal of the previous part of this tutorial was to implement a search function which returns only such persons whose last name begins with the given
阅读全文
摘要:The third part of mySpring Data JPA tutorialdescribedhow you can create custom queries by using query methods. This blog entry will describe how you can implement more advanced queries by using the JPA criteria API.If you have read the previous part of this tutorial, you might remember that the sear
阅读全文
摘要:在本人的Spring Data JPA教程的第二部分描述了如何用Spring Data JPA创建一个简单的CRUD应用,本博文将描述如何在Spring Data JPA中使用query方法创建自定义查询,为了有一个合理的示例,我为我的应用创建了三个要求:实现通过他们的last name作为搜索条件搜索到person.搜索功能必须返回这样的person,它们的last name准确匹配搜索条件。搜索不区分大小写.现在开始扩展示例应用.所需步骤完成要求的步骤如下:创建一个query方法.使用该创建的query方法.Spring Data JPA提供了三种query方法的不同方式来创建自定义查询,
阅读全文
摘要:我的Spring Data Jpa教程的第一部分描述了,如何配置Spring Data JPA,本博文进一步描述怎样使用Spring Data JPA创建一个简单的CRUD应用。该应用要求如下:person 必须有 first name 和 last name. 这两者是强制的.能够列出所有persons.能够添加新的persons.能够编辑已存在的persons的信息.能够删除persons.现在我已经描述了创建的应用的要求,现在开始工作并实现它。所需步骤CRUD应用的实现可以分割成如下步骤:实现Person 模型对象为Person 对象创建repository使用创建的repository
阅读全文
摘要:Spring Data JPA项目旨在简化基于仓库的JPA的创建并减少与数据库交互的所需的代码量。本人在自己的工作和个人爱好项目中已经使用一段时间,它却是是事情如此简单和清洗,现在是时候与你分享我的知识。本文是我的Spring Data JPA教程的第一部分,将向你描述的是,当你使用Hibernate作为你的jpa提供者时怎样配置Spring Data JPA,在我们开始之前,首先应该明白一件事情,本教程不是Hibernate, JPA 或 Spring的人们教程,如果你想理解在我的Spring Data JPA教程中描述的概念,你必须有关于这些技术方面的经验本教程的依赖如下:BoneCP 0
阅读全文
摘要:写那些数据挖掘之类的博文 写的比较累了,现在翻译一下关于spring data jpa的文章,觉得轻松多了。翻译正文:你有木有注意到,使用Java持久化的API的数据访问代码包含了很多不必要的模式代码?即使你执行一个简单的查询也同样如此,如果你编写动态的查询或实现分页,则情况会更糟。Spring D...
阅读全文
该文被密码保护。
摘要:本人认为,如果介绍Aperture抽象的API,恐怕使人不知所云;抽象的API失去具体的上下文显得有点苍白。人们认识事物的方式从源头上而言总是从特殊到一般,从具体到抽象 。基于此,本文还是实现具有上下文的example本文先来演示一下一个简单的数据抽取程序,基本流程是:1根据InputStream识...
阅读全文
摘要:本人翻译自 http://sourceforge.net/apps/trac/aperture/wiki/RDF2Go在Aperture中使用RDF2GoAperture是基于RDF2Go建立的,它是一个抽象层,允许Aperture易于与流行的RDF存储引擎如Sesame, Jena工作。支持的RD...
阅读全文
摘要:本人翻译 http://sourceforge.net/apps/trac/aperture/wiki/RDFUsageAperture框架大量使用RDF graphs在组件之间交流信息,例如,Extractors作为RDF模型返回它抽取的文本和元数据,而Crawlers对通过采集获取的原文内容和元...
阅读全文
摘要:为了更好的使用Aperture组件,我们需要熟悉他的整体流程以及相关API接口下面是关于Aperture组件的通用结构,文章翻译自 http://sourceforge.net/apps/trac/aperture/wiki/GeneralStructure本人翻译得不伦不类,因为本人的汉语和英语都...
阅读全文
摘要:如果我们已经了解语义网的相关知识,那么接下来继续深入Aperture框架实现数据解析的机制Aperture框架内部是基于RDF2Go框架来实现RDF模型的存储引擎,RDF模型涉及语义网的概念,下面我们来看一个简单的XML格式的RDF文件 John Smith Smith ...
阅读全文
摘要:前言本文是一篇对W3C的资源描述框架(RDF)和 Jena(一个Java的RDF API)的教程性介绍. 本文是为那些不熟悉RDF的, 以及那些通过建立原形可以达到最好学习效果的, 或是因为其他原因希望能快速操作Jena的程序员而写的. 我们假设读者在阅读本文前已具有一定的XML和Java知识.如果读者在没有理解RDF数据模型的基础上就迅速进入操作阶段,往往会导致失败和失望. 然而,如果光学习数据模型又是十分枯燥乏味的, 并常常会导致曲折的形而上学的难题. 更好的学习办法是在理解数据模型的同时练习操作它. 可以先学习一点数据模型再动手试一试.然后在学习一点再试一试. 这样一来就能达到理论实践相
阅读全文
摘要:转载自http://www.cnblogs.com/yuyd902/archive/2008/10/09/1307262.htmlInputStream fs = FileManager.get().open("ontology\\test.rdf");if (fs != null) {Model model = ModelFactory.createDefaultModel();model.read(fs, "");model.write(System.out);Resource res = model.getResource("http:/
阅读全文
摘要:本人在linux系统下采用Chrome浏览器,有一个很不好的体验,就是字体发虚,前段时间还好点,不知动了哪里的设置,眼睛都看花了(特别是代码部分)本人不想设置浏览器为统一字体(网上的文章介绍为统一设置为文泉驿字体),那样就抹杀了网站的个性了;不晓得能不能像firefox浏览器,可以允许网页选择自身的...
阅读全文
摘要:在继续探索Aperture框架的数据抽取功能前,先要了解语义网的相关知识,以及关于本体及RDF等相关概念。可以参考一下本人语义网相关的资料Semantic Web本人对这部分也是很晕乎,语义网的探讨如果具备西方语言学的知识更佳(如果做自然语言处理(NLP),更需要具备语言学的背景),现代逻辑学知识也...
阅读全文
摘要:本文转载自 http://mushiqianmeng.blog.51cto.com/3970029/720448最近开发noCloud过程中,在更新maven库时,如果网络问不定或者是一些自己手动安装到本地maven库的jar包,在中心库找不到对应的jar,会生成一些.lastUpdated文件,会导致m2e工具无法找到依赖的jar包,从而提示编译错误。对于该问题,我也没有找到很好的解决方案,只能手动删除一下lastUpdated文件。文件多时十分繁琐。网上看到别人的解决方案也有利用命令行命令,匹配文件扩展名批量删除的。命令行不会,于是就写了几行代码用于删除.lastUpdated文件。如有其
阅读全文
摘要:转载自 http://blog.csdn.net/ljfbest/article/details/8045988安装好maven后,想要使用他的一些命令,需要配置环境变量PATH:D:\study\apache-maven-3.0.4\bin运行mvn命令实际上是执行了Java命令,既然是运行Java,那么运行Java命令可用的参数当然也应该在运行mvn命令时可用。这个时候,MAVEN_OPTS环境变量就 能派上用场。设置MAVEN_OPTS的值为:-Xms128m -Xmx512m,因为Java默认的最大可用内存往往不能够满足Maven运行的需要,比如在项目较大时,使用Maven生成项目站点
阅读全文
摘要:创建Owl模型,参数可以制定那种形式的推理机,比如owl dl:OntModel m=ModelFactory.createOntologyModel();OntModel m=ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM);OntModelSpecLanguage profileStorage modelReasonerOWL_MEMOWL fullin-memorynoneOWL_MEM_TRANS_INFOWL fullin-memorytransitive class-hierarchy inferenceOWL_ME
阅读全文
摘要:转载 http://www.cnblogs.com/yuyd902/archive/2008/10/08/1306652.html容器RDF定义了一类特殊的资源来表示事物的集合。这些资源称为容器。一个容器的成员可以是资源也可以是文本。有三类容器:一个BAG是一个无序的集合。一个ALT是一个用来表示备选项的无序的集合。一个SEQ是一个有序的集合。一个容器由一个资源表示。该资源会有一个rdf:type属性,属性值为rdf:Bag,或rdf:Alt,或是rdf:Seq,再或是这些类型的子类型,这取决于容器的类型。容器的第一个成员是容器的rdf:_1的属性所对应的属性值;第二个成员是容器的rdf:_2
阅读全文
摘要:转载 http://www.cnblogs.com/yuyd902/archive/2008/10/08/1306651.html让我们看看如何对所选择的陈述实行更好的控制。SimpleSelector可以被继承,它的select方法可以被修改来实现更好的过滤://selectalltheresourceswithaVCARD.FNproperty//whosevalueendswith"Smith"StmtIteratoriter=model.listStatements(newSimpleSelector(null,VCARD.FN,(RDFNode)null){pub
阅读全文
摘要:转载自http://www.cnblogs.com/yuyd902/archive/2008/10/08/1306649.htmlJena RDF 包Jena是一个为语义网应用设计的一个Java API。对应用开发者而言,主要可用的RDF包是com.hp.hpl.jena.rdf.model。因为API是以接口的方式定义的,所以应用代码可以使用不同的实现机制而不用改变代码本身。这个包包含了可以表示模型,资源,属性,文本,陈述和其他RDF关键概念的接口,还有一个用来创建模型的ModelFactory。所以如果要应用代码与实现类保持独立,最好尽可能地使用接口,而不要使用特定的实现类。(关于面向接口
阅读全文
摘要:转载自 http://www.cnblogs.com/yuyd902/archive/2008/10/08/1306648.html陈述RDF模型中的每一个箭头表示为一个陈述(statement)。每一个陈述声明了关于某个资源的某个事实。一个陈述由三部分组成。主体,也就是箭头的出发的资源。谓词,也就是标识箭头的属性。客体,也就是箭头所指向的那个资源或文本。一个陈述有时也叫做一个三元组的原因就是它由三部分组成。一个RDF模型(译者注: 指Jena中的接口Model)是由一组陈述所组成的。在Tutorial2中,每调用一次addProperty函数就会在模型中增加另一个陈述。(因为一个模型是由一组
阅读全文
摘要:转载自 http://www.cnblogs.com/yuyd902/archive/2008/10/08/1306647.html这篇文章是转贴《An Introduction to RDF and the Jena RDF API》的译文,并在适当的地方进行了标注,部分代码提供了jruby形式实现。前言本文是一篇对W3C的资源描述框架(RDF)和Jena(一个Java的RDF API)的教程性介绍。本文是为那些不熟悉RDF的,以及那些通过建立原形可以达到最好学习效果的,或是因为其他原因希望能快速操作Jena的程序员而写的。我们假设读者在阅读本文前已具有一定的XML和Java知识。如果读者在
阅读全文
摘要:转载自 http://my.oschina.net/xyly624/blog/122743今天在做個測試時,發現在 pom 文件內添加了一個新 jar 包的配置後報錯。第一反應是拼寫格式錯。但目測格式都正確,不得已只能從Maven 中央庫直接複製配置,錯誤還是存在。第二反應是 Maven 下載依賴失敗。進本地庫目錄查看果然只有 pom 文件存在,jar 包不存在。果斷架起梯子再次更新還是不更新 jar 包。映像中若目錄下存在"lastUpdated"後綴的文件代表更新失敗,但該目錄下沒有此類文件啊!奇怪了。翻開印象筆記找了下之前記錄下來的腳本,嘗試了下竟然成功了,說明有相關
阅读全文
摘要:网上了解到Aperture框架能够实现从文件系统中抽取数据,Aperture的介绍如下:Aperture这个Java框架能够从各种各样的资料系统(如:文件系统、Web站点、IMAP和Outlook邮箱)或存在这些系统中的文件(如:文档、图片)爬取和搜索其中的全文本内容与元数据。它当前支持的文件格式如...
阅读全文
摘要:首先需要安装Ubuntu SVN。Ubuntu下的SVN安装十分简单,sudo apt-get install subversion,然后根据提示一步一步,就完成了Ubuntu SVN的安装;想知道到Ubuntu SVN系统的真相么,想知道Ubuntu SVN系统中藏有的内在奥义么,只有我来给大家全面讲解介绍Ubuntu SVN系统,Ubuntu SVN作为日常开发中不可缺少的工具,今天终于开始在Ubuntu下使用了。1、首先需要安装Ubuntu SVN。Ubuntu下的SVN安装十分简单,sudo apt-get install subversion,然后根据提示一步一步,就完成了Ubunt
阅读全文
摘要:转载自 http://www.ruanyifeng.com/blog/有时候,很简单的数学方法,就可以完成很复杂的任务。这个系列的前两部分就是很好的例子。仅仅依靠统计词频,就能找出关键词和相似文章。虽然它们算不上效果最好的方法,但肯定是最简便易行的方法。今天,依然继续这个主题。讨论如何通过词频,对文章进行自动摘要(Automatic summarization)。如果能从3000字的文章,提炼出150字的摘要,就可以为读者节省大量阅读时间。由人完成的摘要叫"人工摘要",由机器完成的就叫"自动摘要"。许多网站都需要它,比如论文网站、新闻网站、搜索引擎等等。
阅读全文
摘要:转载自 http://www.ruanyifeng.com/blog/上一次,我用TF-IDF算法自动提取关键词。今天,我们再来研究另一个相关的问题。有些时候,除了找到关键词,我们还希望找到与原文章相似的其他文章。比如,"Google新闻"在主新闻下方,还提供多条相似的新闻。为了找出相似的文章,需要用到"余弦相似性"(cosine similiarity)。下面,我举一个例子来说明,什么是"余弦相似性"。为了简单起见,我们先从句子着手。 句子A:我喜欢看电视,不喜欢看电影。 句子B:我不喜欢看电视,也不喜欢看电影。请问怎样才能计算上面
阅读全文
摘要:转载自 http://www.ruanyifeng.com/blog/这个标题看上去好像很复杂,其实我要谈的是一个很简单的问题。有一篇很长的文章,我要用计算机提取它的关键词(Automatic Keyphrase extraction),完全不加以人工干预,请问怎样才能正确做到?这个问题涉及到数据挖掘、文本处理、信息检索等很多计算机前沿领域,但是出乎意料的是,有一个非常简单的经典算法,可以给出令人相当满意的结果。它简单到都不需要高等数学,普通人只用10分钟就可以理解,这就是我今天想要介绍的TF-IDF算法。让我们从一个实例开始讲起。假定现在有一篇长文《中国的蜜蜂养殖》,我们准备用计算机提取它的
阅读全文
摘要:先讲两个很老的小故事。第一个故事。有一家日本最大的化妆品公司,收到了用户的投诉。用户抱怨买来的肥皂盒是空的。这家公司为了防止再发生这样的事故,很辛苦地发明了一台X光检查器,能够透视每一个出货的肥皂盒。同样的事故,发生在一家小公司。他们的解决方法是买一台强力的工业电扇,对着肥皂盒猛吹,被吹走的就是空肥皂盒。第二个故事。美国太空总署(NASA)发现在太空失重状态下,航天员无法用墨水笔写字。于是,他们花了大量经费,研发出了一种可以在失重状态下写字的太空笔。猜猜看,俄国人是怎么解决的?(答案在本文结尾处。)=====================这几天,我在看Unix,发现很多人在谈“Unix哲学”
阅读全文
摘要:获取元素有了前面的分析,获取元素的逻辑就非常清晰。首先,调用者传递key,从key的hashCode方法获得值后,调用hash函数做一些低位置换,保证hash值的均匀分布,之后和size-1按位与后得到数组的位置。然后取出对应位置的链表,遍历该链表,查找hash值相等,并且key的引用或者值相等的对象,然后返回。代码见下面:[java]view plaincopyprint?publicVget(Objectkey){if(key==null)returngetForNullKey();inthash=hash(key.hashCode());for(Entry<K,V>e=tab
阅读全文
摘要:现在,有了hash code,来考虑如何计算放入数组的位置。hash code值通常会很大,但是数组的大小有限,默认只有16,大的也不能超过2的30次方。所以,用模运算来保证在数组大小范围内是合理的,比如:index = hash code % array size.不过这有点慢,JDK采用了更快的算法。这个更快的算法源于一个数学规律,就是如果size是2的N次方,那么数X对size的模运算结果等价于X和size-1的按位与运算,也就是 X % size <=> X & (size -1).按位与只消耗一个CPU周期,当然快多了。现在就可理解为什么要故意把数组大小弄成2的N
阅读全文
摘要:散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪个链表里面。按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值。比如String类就有如下方法:[java]view plaincopyprint?publicinthashCode(){inth=hash;intlen=count;if(h==0&&len>0){intoff=offset;charval[]=value;for(inti=0;i<len;i++){h=31*h+val[off++];}hash=h;}returnh;}
阅读全文
摘要:Java的HashMap非常的常用,本篇研究它的实现算法,最后希望计算出内存占用,性能的量化数据,然后得出什么时候使用HashMap,什么时候不能滥用的结论。HashMap实际上是一个数组,数组里面的每个元素都是一个链表。每个元素在通过put方法放入HashMap中的时候,要按照如下步骤进行:1.根据该元素自身提供的hashcode计算出散列值,该散列值就是数组的下标2.将新元素放入该数组位置的链表中先来看一下数组的定义:[java]view plaincopyprint?/***Thetable,resizedasnecessary.LengthMUSTAlwaysbeapoweroftwo
阅读全文
摘要:Java Collections Framework是Java提供的对集合进行定义,操作,和管理的包含一组接口,类的体系结构。Java集合框架的基本接口/类层次结构:java.util.Collection [I]+--java.util.List [I] +--java.util.ArrayList [C] +--java.util.LinkedList [C] +--java.util.Vector [C] +--java.util.Stack [C]+--java.util.Set [I] +--java.util.HashSet [C] +--java.util.SortedSet [
阅读全文
摘要:Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapCollection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些 Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。 所有实现Collection..
阅读全文
摘要:集合交集在数学上面的定义是:A和B的交集写作 "A∩B"。 形式上:x属于A∩B当且仅当x属于A,且x属于B。在Java集合类List里面也提供了一个内置的方法,求两个List集合的交集。方法如下:public boolean retainAll(Collection<?> c)子类必须实现该方法。下面是以子类ArrayList为例的一段代码:view sourceprint?01publicclassListDemo {0203/**04* @param args05*/06publicstaticvoidmain(String[] args) {07List
阅读全文
摘要:List集合代表一个有序集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。1、List接口和ListIterator接口 List作为Collection接口的子接口,可以使用Collection接口里的全部方法。List是有序集合,所以List集合里增加了一些根据索引来操作集合元素的方法:void add(int index, Object element):将元素element插入在List集合的index处。boolean addAll(int index, Collection c):将集合c所包含的所有元素都插入在List集
阅读全文
摘要:TreeSet支持两种排序方法:自然排序和定制排序。TreeSet默认采用自然排序。1、自然排序TreeSet会调用集合元素的compareTo(Object obj)方法来比较元素之间大小关系,然后将集合元素按升序排列,这种方式就是自然排序。(比较的前提:两个对象的类型相同)。 java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类的对象就可以比较大小。当一个对象调用该方法与另一个对象进行比较,例如obj1.comparTo(obj2),如果该方法返回0,则表明这两个对
阅读全文
摘要:1、Set接口的使用Set集合里多个对象之间没有明显的顺序。具体详细方法请参考API文档(可见身边随时带上API文档有多重要),基本与Collection方法相同。只是行为不同(Set不允许包含重复元素)。 Set集合不允许重复元素,是因为Set判断两个对象相同不是使用==运算符,而是根据equals方法。即两个对象用equals方法比较返回true,Set就不能接受两个对象。01publicclassTestSet02{03publicstaticvoidmain(String[] args)04{05Set<String> books =newHashSet<String
阅读全文
摘要:说明:先从整体介绍了Java集合框架包含的接口和类,然后总结了集合框架中的一些基本知识和关键点,并结合实例进行简单分析。1、综述所有集合类都位于java.util包下。集合中只能保存对象(保存对象的引用变量)。(数组既可以保存基本类型的数据也可以保存对象)。当我们把一个对象放入集合中后,系统会把所有集合元素都当成Object类的实例进行处理。从JDK1.5以后,这种状态得到了改进:可以使用泛型来限制集合里元素的类型,并让集合记住所有集合元素的类型(参见具体泛型的内容)。 Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口
阅读全文
摘要:翻译自:The Collection Interface一个集合表示一组对象。Collection接口被用来传递对象的集合,具有最强的通用性。例如,默认所有的集合实现都有一个构造器带有一个Collection类型参数。这个构造器被称作转换构造器,用指定集合的元素来初始化新集合,而不管指定集合实现的是哪个集合接口和实现类型。换句话说,这个构造器使得我们可以转化集合的类型(比如List到Set,Set到List)。设想一下,假如你有一个Collection<String> c,它可能是一个List,也可能是一个Set,或者其他类型的Collection。按照上面的方法可以这样初始化一个
阅读全文
摘要:翻译自:The Set Interface一个Set是一个不能包含重复元素的集合。它映射了数学意义上的集合抽象。Set接口只是在继承自Collecton接口的方法基础之上加上不允许元素重复的限制。Set也对equals和hashCode的行为规约施加了更强的限制,使得Set实例允许进行有意义的比较,即使他们的具体实现不同。两个集合实例相等(equal)如果它们包含相同的元素。一个Set是一个不能包含重复元素的集合。它映射了数学意义上的集合抽象。Set接口只是在继承自Collecton接口的方法基础之上加上不允许元素重复的限制。Set也对equals和hashCode的行为规约施加了更强的限制,
阅读全文
摘要:翻译自:http://docs.oracle.com/javase/tutorial/collections/interfaces/index.html核心集合接口封装了不同类型的集合,如下图所示。这些接口使得我们可以操作集合而不必关心它们的具体实现细节。核心集合接口是Java集合框架的基础。正如我们可以从下图看到的,核心集合接口形成了层次结构:Set是一种特殊的集合,而一个SortedSet是一种特殊的Set,以此类推。注意上图的层次结构中包含两棵独立的树 —Map不是一个真正意义上的集合。注意所有的核心集合接口都是泛型化的(generic)。例如下面是Collection接口的声明:pub
阅读全文
摘要:翻译自:http://docs.oracle.com/javase/tutorial/collections/intro/index.html一个集合,即collection,有时也被称为一个容器,只是将多个元素聚集成一个单元。Collections常被用来存储、检索、操纵聚集数据以及聚集数据间的通信。一般来说,Collections表示一组形成自然集合的数据项,比如一手扑克牌、一个信箱(由很多信组成)或者电话簿。 如果你熟悉Java语言或者任何一门其他编程语言,你可能已经对Collections比较熟悉了。Java 1.2之前的集合实现,包括Vector、Hashtable和array,但是
阅读全文
摘要:人类学习的方式在很大程度上始于模仿,“古者包犠氏之王天下也……作结绳而为网罟,以佃以渔,盖取诸离”,古人从自然法则中求生存,逐步走出蒙昧,人法地,地法天,天法道,道法自然。(历代对本句训诂汗牛充栋,还不如本人的解释来得直接 ,顺便鄙视一下那些训诂专家,小题大做,愚不可及)而本文要描述的是,先来模仿几...
阅读全文
摘要:本人一贯的风格是先了解系统的基础部分,然后在深入到高级部分;如果违背这种循序渐进的次序,也超出了本人的接受能力。古人说,学有本末,事有终始,知所先后,则尽道矣。我们还是从基础开始吧(本人上文提到的开发图片服务器还是放到后面吧)本人在第一篇文章中描述的WordCount单词统计程序是在单机环境运行的,...
阅读全文
摘要:上文中本人是通过Hadoop的eclipse插件来管理HDFS文件系统的,在实际生产环境通常是用编程的方式来管理hadoop的文件系统下面我们编程方式开发一个管理hadoop文件系统的应用首先打开eclipse开发工具,新建Map/Reduce Project项目点击Next,填写项目名称,并且配置...
阅读全文
摘要:在上文中我们已经学会了如何启动hadoop,可以通过jps命令查看运行中的进程启动hadoop后,我们可以用通过配置hadoop的eclipse插件管理HDFS文件系统在eclipse开发工具打开Map/Reduce视图,新建hadoop location上面的相关配置与配置文件mapred-sit...
阅读全文