项目描述:
为提高传统KNN算法在海量数据的文本分类效率,提出了基于K-Medoids聚类的改进KNN算法,实验数据来自复旦大学的语料集,实验结果表明提出的改进算法确实提高了KNN算法的运行效率和分类能力。
开发平台:以Eclipse为集成开发环境,Windows7 64位操作系统、CPU为AMD A8-5600K、内存为8G
主要工作:用Java实现了KNN算法和基于K-Medoids聚类的KNN算法,并得出比较结果。
EHCache
关键类
类CacheManager管理着Caches。Caches包含有elements,这些elements都是键值对。Caches包括内存缓存和磁盘缓存。
CacheManager
CacheManager有着包含Elements的Caches。
CacheManager管理着创建、移除、使用缓存
CacheManager有两种实例方法:单例和普通的实例。
单例模式 ehcache-1.1只支持一个缓存管理器实例(就是单例)。CacheManager通过使用静态工厂模式来达到目的。
这是它的实现方式:
public static CacheManager create()throws CacheException {
synchronized (CacheManager.class) {
if (singleton == null) {
if (LOG.isDebugEnabled()) {
LOG.debug("Creatingnew CacheManager with default config");
}
singleton = new CacheManager();
} else {
if(LOG.isDebugEnabled()) {
LOG.debug("Attemptingto create an existing singleton. Existing singleton returned.");
}
}
return singleton;
}
}
普通的实例模式:是从ehcache-1.2开始的CacheManager有各种构造方法,方法。这允许多个Cachemanagers被创建并同时使用。每个缓存管理器都有自己的配置。即使没有给它指定参数,也有默认的参数。
public CacheManager(Configuration configuration)throws CacheException {
status = Status.STATUS_UNINITIALISED;
init(configuration, null, null, null);
}
publicCacheManager(String configurationFileName) throws CacheException {
status = Status.STATUS_UNINITIALISED;
init(null, configurationFileName, null,null);
}
publicCacheManager(URL configurationURL) throws CacheException {
status = Status.STATUS_UNINITIALISED;
init(null, null, configurationURL,null);
}
publicCacheManager(URL configurationURL) throws CacheException {
status = Status.STATUS_UNINITIALISED;
init(null, null, configurationURL,null);
}
publicCacheManager(InputStream configurationInputStream) throws CacheException {
status = Status.STATUS_UNINITIALISED;
init(null, null, null,configurationInputStream);
}
publicCacheManager() throws CacheException {
//default config will be done
status = Status.STATUS_UNINITIALISED;
init(null, null, null, null);
}
privatevoid init(Configuration configuration, String configurationFileName, URLconfigurationURL,
InputStreamconfigurationInputStream) {
Configuration localConfiguration =configuration;
if (configuration == null) {
localConfiguration =parseConfiguration(configurationFileName, configurationURL,configurationInputStream);
} else {
localConfiguration.setSource("Programmatically configured.");
}
ConfigurationHelper configurationHelper= new ConfigurationHelper(this, localConfiguration);
configure(configurationHelper);
status = Status.STATUS_ALIVE;
if (cacheManagerPeerProvider != null) {
cacheManagerPeerProvider.init();
}
cacheManagerEventListenerRegistry.init();
addShutdownHookIfRequired();
//do this last
addConfiguredCaches(configurationHelper);
}
如果是内存模式的话,就没有什么特殊的要求,但是如果是磁盘模式的缓存的话,就需要给每个CacheManager配置一个唯一的路径。因为只有这样,才不会造成写冲突,这里面应该没有锁。如果不唯一,则会抛出CacheException.
如果一个应用里有用CacheManager的构造方法生成的CacheManager和用Create()函数生成的单例模式,那么这个单例和实例都可以共存,因为:
private static CacheManager singleton;这让这些实例和单例不会冲突。