- 浏览: 471663 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liyijie123:
楼主: 您好!您的资料非常有价值,数据分析阶段的图 ...
openfire 3.7 压力测试一(注册) -
z327117143:
当前项目引用的项目被close时执行main run as 也 ...
eclipse run 或 debug CreateProcess error=206 -
leeyisoft:
下面是我在 centos 上安装的步骤,http://192. ...
Review Board 的使用 -
lj2931:
ageha67 写道这个命令行有试过,输p(permanent ...
Review Board 的使用 -
ageha67:
这个命令行有试过,输p(permanently)接受了,但是r ...
Review Board 的使用
原文:http://www.iteye.com/topic/1112278
写道
有大数据量的User对象(name,sex,age)属性。
现要求直允许使用List存放,如何实现按name快速检索到对应的User对象?
现要求直允许使用List存放,如何实现按name快速检索到对应的User对象?
主类:
package com.kanmenzhu.test; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; /** * 测试主类 * * @param <V> */ public class FastList<V extends BaseUser> { //能保存的个数 private int LIST_SIZE=16; private List<LinkedList<V>> storeList; //当前保存个数 private int CUR_SIZE; //初始化list public FastList(int initSize){ this.LIST_SIZE=initSize; storeList=new ArrayList<LinkedList<V>>(LIST_SIZE); for(int i=0;i<LIST_SIZE;i++){ storeList.add(null); } } /** * 添加用户到list * @param bu * @return */ @SuppressWarnings("unchecked") public V addUser(V arg){ CUR_SIZE++; if(CUR_SIZE>LIST_SIZE){ throw new RuntimeException("容量超标,初始化容量设置太小!"); } int hashCode=(arg.getUserName()).hashCode(); int i=hashCode&(LIST_SIZE-1); Object o=storeList.get(i); BaseUser v; if(o!=null) { o=(LinkedList<V>)o; LinkedList<V> linkList=(LinkedList<V>)o; Iterator<V> iter=linkList.iterator(); for(v=iter.next();v!=null;v=iter.next()){ if(v.getUserName().equals(arg.getUserName())&&v.equals(arg)){ return arg; } if(!iter.hasNext()) break; } linkList.addLast(arg);//如果遍历下来,发现不存在姓名相同且用户也不相同的,则表示为同名或同索引用户,添加到链表未 return null; }else{//当前位置无数据 LinkedList<V> tempLinked=new LinkedList<V>(); tempLinked.add(arg); storeList.set(i, tempLinked); return null; } } /** * 根据姓名获取用户 * @param arg * @return */ @SuppressWarnings("unchecked") public List<V> getUser(String arg){ int hashCode=arg.hashCode(); int i=hashCode&(LIST_SIZE-1); List<V> retuList=new ArrayList<V>(); LinkedList<V> linkList=storeList.get(i); Iterator<V> iter=linkList.iterator(); BaseUser v; //遍历对应索引位置是否存在多个用户(用户姓名经过hash&list.size()之后可能存在同一位置多个不同名数据情况) for(v=iter.next();v!=null||iter.hasNext();v=iter.next()){ if(v.getUserName().equals(arg)){ retuList.add((V)v); } if(!iter.hasNext()) break; } if(retuList.size()==0) return null; return retuList; } public static void main(String[] args) { FastList<MyUser> fl=new FastList<MyUser>(16); MyUser mu1=new MyUser(); mu1.setAge(1); mu1.setUserName("张三"); MyUser mu2=new MyUser(); mu2.setAge(2); mu2.setUserName("张三"); MyUser mu3=new MyUser(); mu3.setAge(3); mu3.setUserName("李四"); fl.addUser(mu1); fl.addUser(mu2); fl.addUser(mu3); List<MyUser> ml=fl.getUser("张三"); for(MyUser mu:ml){ System.out.println(mu); } } }
辅助用户类:
package com.kanmenzhu.test;
/**
* 用户基类,以保证用户存在用户名方法
*
*/
public abstract class BaseUser {
protected abstract String getUserName();
}
用户类:
package com.kanmenzhu.test; /** * 测试用户类 * */ public class MyUser extends BaseUser { private String userName; private int age; @Override public String getUserName() { return userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setUserName(String userName) { this.userName = userName; } public String toString(){ return "userName:"+userName+" age:"+age; } }
代码上没太大难度,这里没考虑扩容的情况,hash与index的关系可以参数HashMap,重复度非常小。
评论
3 楼
lydawen
2011-08-15
hyj1254 写道
我曾被问过重写HashMap的问题,由于平常没接触过这方面的工作,所以即使知道HashMap的构造原理也不知道出于什么目的要重写。不知道除了lz所写的可以处理name重名的情况外,实际项目中还有什么典型应用吗?
重名问题考虑了,如果有重名的这个时候将返回一个重名List,HashMap原理也与这个类似,当两个Key最后算出来的索引一致且hashCode,equals都不相等,则添加到一个双向链表末端。我上边的实现是如果算出来的索引相等,则判断两个User是否equals,这里需要重载User的equals,如果equals不相等则添加到LinkedList末端。.
2 楼
lydawen
2011-07-18
hyj1254 写道
我曾被问过重写HashMap的问题,由于平常没接触过这方面的工作,所以即使知道HashMap的构造原理也不知道出于什么目的要重写。不知道除了lz所写的可以处理name重名的情况外,实际项目中还有什么典型应用吗?
很少有涉及到复杂数据结构,一般面试的时候会有这些。
1 楼
hyj1254
2011-07-18
我曾被问过重写HashMap的问题,由于平常没接触过这方面的工作,所以即使知道HashMap的构造原理也不知道出于什么目的要重写。不知道除了lz所写的可以处理name重名的情况外,实际项目中还有什么典型应用吗?
发表评论
-
jvm crash core dump分析
2015-05-29 10:58 3642一般会有hs_err_pidxxxxx.log这么个 ... -
eclipse 正则 查找替换
2014-11-25 17:44 900不得不说eclipse这个功能强大。 见图: 可以 ... -
eclipse 僵死/假死 问题排查及解决
2014-04-19 10:16 1860症状: 使用Eclipse win ... -
axis 工具包使用笔记
2012-09-06 15:19 929难得用一次,做个笔记。 wsdl2java -o . ... -
一次排查java占用cpu过高问题
2012-07-31 22:21 11456近几天现场报故障过来,说A系统(java b/s应用 ... -
struts1 与tomcat冲突的灵异问题
2012-05-25 10:49 892页面一个登录名,一个密码框,密码输入一个字符(数字或字母),后 ... -
EL表达式对Map操作
2012-05-14 17:43 1151普通的迭代key以及value都容易,如果需要根据key提取v ... -
TPTP监控远程Tomcat
2012-04-09 19:19 2TPTP这就不多介绍了,见 http://www.eclips ... -
SimpleDateFormat使用不当导致时间错乱
2012-02-08 22:50 11073近期一个老项目发现导入数据(节目单),存在时间错乱的问题。节目 ... -
System.out.print(anArray) anArray=char[] 及anArray=int[] 的区别
2012-02-01 15:25 1026无意看到有人在问,为什么 char[] ca={'1 ... -
openfire 3.7 在linux 日志目录
2011-11-14 14:22 4810openfire3.7在windows下目录目录即在open ... -
控制程序运行时间或外部接口调用超时时间
2011-11-09 17:29 6901经常在运行一 ... -
HashMap hashCode奇怪的实现
2011-09-20 15:17 936无意看群里有人讨论HashMap,new出来的HashMap实 ... -
动态修改log4j日志级别
2011-08-26 11:16 8172一直是使用properties或xml来配置log4j,偶 ... -
联通-彩信网关[中兴网关]对接
2011-08-14 22:16 0虽说个人认为彩信逐步变成鸡肋,但对于一些推广确又不失为一个好通 ... -
HSQLDB 密码修改
2011-08-14 21:55 1795因当前在写一个swing桌面应用,考虑到以后可能会有其他用户使 ... -
记一次简单性能调优(b/s)
2011-07-14 15:45 1234本系统作为接口适配系统,前有系统,后有系统,在现场集成测试 ... -
java 运行 jar classpath配置
2011-06-08 17:27 17040方法一 按照developrwo ... -
openfire jvm参数配置
2011-05-30 13:43 5089XMPP协议的一个服务器实现(也是目前较多使用的服务器)O ... -
java gc 信息说明
2011-05-18 22:28 2274在运行java时添加输出 ...
相关推荐
中软面试题解读 中软面试题涵盖了多个IT领域的知识点,包括Java编程、XML解析、JNDI、设计模式、面向对象编程、集合框架、排序算法和数据库查询等。下面将逐一解读这些知识点。 抽象类和接口 抽象类和接口是Java...
Java作为一门广泛使用的编程语言,其面试题涵盖了众多领域,包括基础、并发编程、网络、虚拟机、大数据处理以及各种框架。以下是对这些面试题集合的详细解析: 1. **BIO, NIO, AIO, Netty面试题 35道**: - **BIO*...
### 黑马面试题总结 #### 一、进程与线程状态 **知识点:** - **进程与线程的区别:** - **进程**:是系统进行资源分配和调度的基本单位,每个进程都有独立的代码和数据空间(程序上下文)。 - **线程**:是...
这些知识点涵盖了常见的面试问题,可以帮助准备面试或深入理解Hibernate技术的人士更好地掌握该领域的内容。 ### Hibernate的检索方式 1. **导航对象图检索**:通过已加载的对象来访问与其关联的对象,这种检索...
【.NET面试题详解】 1. .NET的内置对象: .NET框架提供了六个主要的内置对象,它们对于ASP.NET开发至关重要: - Response:该对象用于服务器向客户端浏览器发送信息,包括HTML、文本、文件等。 - Request:通过此...
在Java面试中,经常会遇到关于Hibernate、对象持久化、ORM映射和检索策略的问题。以下是对这些知识点的详细解释: 1. **Hibernate的检索方式**: - **导航对象图检索**:通过对象之间的关联关系直接获取相关数据。...
中科软面试题(java) 本文总结了中科软面试题中的多个java技术相关知识点,涵盖了面向对象编程、Tomcat配置、Http请求、SQL语句、String和StringBuffer的差异、集合类、异常处理、包、接口、类等多个方面。 1. 面向...
根据提供的文件信息,以下是关于Java面试题集默写的知识点总结: 标题为“面试题集默写”,描述为“这是我默写的java面试知识,小知识在于积累,尽量默写还是好些”,标签为“java知识”。文件中显示的内容是对...
Java 后端面试题答案 List 和 Set 是 Java 集合框架中的两个重要接口,都是继承自 Collection 接口。List 特点是元素有放入顺序,元素可重复,而 Set 特点是元素无放入顺序,元素不可重复。Set 的元素虽然无放入...
- **建立索引**:为经常用于查询的字段创建索引,以加快数据检索速度。 - **减少表关联**:尽量避免复杂的多表连接查询,减少数据跨表的交互。 - **优化SQL**:编写高效的SQL语句,避免全表扫描,确保SQL能快速...
PHP面试题大全 本资源提供了 PHP 面试题的完整...这些知识点涵盖了 PHP 面试题的基础知识点,包括简历准备、投递公司顺序建议、Redis 的基础知识点、Redis 的使用场景、Redis 的优势、Redis 相比 Memcached 的优势等。
.Net 面试题知识点总结 本资源摘要信息旨在总结.NET 面试题中的一些重要知识点,涵盖 Web 服务器控件、Windows 控件、SqlDataSource 组件、GridView 控件、DataList 控件、DetailsView 控件、SiteMapPath 控件、...
它内部使用哈希表结构存储键值对,通过哈希函数计算键的哈希码来定位数据的位置,从而实现快速查找。 #### 4. LinkedList 与 ArrayList 的区别 - **知识点**:`LinkedList` 与 `ArrayList` 的性能差异及应用场景。 ...
### Hibernate面试题及答案大集合解析 #### 1. 关系数据模型与对象模型之间的匹配关系 - **选项分析**: - A) 表对应类:正确。在ORM(对象关系映射)中,数据库中的每一张表通常对应着Java中的一个类。 - B) ...
SQL Server面试题通常涵盖以下内容: 1. **SQL基本操作**:SELECT、INSERT、UPDATE、DELETE语句,子查询,联接操作(INNER JOIN、LEFT JOIN、RIGHT JOIN)。 2. **索引**:理解B树、聚集和非聚集索引,优化查询性能...
- **HashMap**允许任何类型的对象作为键或值,只要键实现了`equals()`和`hashCode()`方法,确保能够正确地存储和检索数据。 **4.2 常见键值类型** - 常见的键类型包括`String`、`Integer`等不可变类型。 - 值类型...
### Java后端面试题知识点解析 #### 1. ArrayList初始化及扩容机制 - **知识点**: - `ArrayList`的内部实现与扩容机制。 - **解释**: - `ArrayList`是一个动态数组,初始容量可以通过构造函数指定。当构造一个`...
根据给定的“高级软件工程师面试题”文档的内容,我们可以提炼出以下重要的IT知识点: ### 类与对象 1. **类**:类是定义了一组相同类型的对象的模板,其中包括对象的状态(属性)和行为(方法)。类是面向对象...
根据给定文件的信息,我们可以总结出以下关于Java集合的相关知识点: ### 一、集合容器概述 #### 1.... 集合(Collection)是指在Java中用来存储、...希望这些知识点能帮助你在面试中更好地应对关于Java集合的问题。
ADO.NET提供了多种数据库相关的对象,用于处理数据库连接、执行命令、检索数据等: - `DataTable`:表示内存中的表格数据。 - `DataRow`:表示`DataTable`中的一行数据。 - `DataColumn`:表示`DataTable`中的一列...