- 浏览: 464618 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
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 3554一般会有hs_err_pidxxxxx.log这么个 ... -
eclipse 正则 查找替换
2014-11-25 17:44 832不得不说eclipse这个功能强大。 见图: 可以 ... -
eclipse 僵死/假死 问题排查及解决
2014-04-19 10:16 1785症状: 使用Eclipse win ... -
axis 工具包使用笔记
2012-09-06 15:19 863难得用一次,做个笔记。 wsdl2java -o . ... -
一次排查java占用cpu过高问题
2012-07-31 22:21 11378近几天现场报故障过来,说A系统(java b/s应用 ... -
struts1 与tomcat冲突的灵异问题
2012-05-25 10:49 826页面一个登录名,一个密码框,密码输入一个字符(数字或字母),后 ... -
EL表达式对Map操作
2012-05-14 17:43 1095普通的迭代key以及value都容易,如果需要根据key提取v ... -
TPTP监控远程Tomcat
2012-04-09 19:19 2TPTP这就不多介绍了,见 http://www.eclips ... -
SimpleDateFormat使用不当导致时间错乱
2012-02-08 22:50 10992近期一个老项目发现导入数据(节目单),存在时间错乱的问题。节目 ... -
System.out.print(anArray) anArray=char[] 及anArray=int[] 的区别
2012-02-01 15:25 1000无意看到有人在问,为什么 char[] ca={'1 ... -
openfire 3.7 在linux 日志目录
2011-11-14 14:22 4721openfire3.7在windows下目录目录即在open ... -
控制程序运行时间或外部接口调用超时时间
2011-11-09 17:29 6843经常在运行一 ... -
HashMap hashCode奇怪的实现
2011-09-20 15:17 911无意看群里有人讨论HashMap,new出来的HashMap实 ... -
动态修改log4j日志级别
2011-08-26 11:16 8123一直是使用properties或xml来配置log4j,偶 ... -
联通-彩信网关[中兴网关]对接
2011-08-14 22:16 0虽说个人认为彩信逐步变成鸡肋,但对于一些推广确又不失为一个好通 ... -
HSQLDB 密码修改
2011-08-14 21:55 1757因当前在写一个swing桌面应用,考虑到以后可能会有其他用户使 ... -
记一次简单性能调优(b/s)
2011-07-14 15:45 1187本系统作为接口适配系统,前有系统,后有系统,在现场集成测试 ... -
java 运行 jar classpath配置
2011-06-08 17:27 16971方法一 按照developrwo ... -
openfire jvm参数配置
2011-05-30 13:43 5048XMPP协议的一个服务器实现(也是目前较多使用的服务器)O ... -
java gc 信息说明
2011-05-18 22:28 2231在运行java时添加输出 ...
相关推荐
10个Java经典的List面试题!.zip
1、List集合:ArrayList、LinkedList、Vector等 2、Vector是List接口下线程安全的集合 3、List是有序的 4、Array
该文档主要整理了常见的Java基础面试题,包含以下内容: 1. 抽象类和接口的区别 2. 什么时候使用抽象类,什么时候使用接口 3. 八大基本数据类型,所占字节数 4. List、Set、Map的区别 5. 什么情况下使用List、...
对于平时java面试的一些总结,关于基础java的一些原理题型、还有map、list、set等相关的知识面试题
10个Java经典的List面试题
Redis通常被称为数据结构服务器,因为值(value)可以是 字符串(String)、哈希(Map)、列表(list)、集合(sets)、有序集合(sorted sets)等类型。 Redis是一个key-value存储系统,它支持丰富的数据类型,这些数据类型...
面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...
如果要按照键值保存或者访问数据,使用什么数据结构? 要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的destroy()方法有什么后果? 58.多...
│ 上海税友软件 面试题.doc │ 公司培训文档-混淆的基本概念.doc │ 基本算法.doc │ 孙卫琴精通struts.基于MVC的.java.web设计与开发.pdf │ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科...
CoreJava面试题总结。 1 常用的集合有哪些?为什么这么用? 2 静态变量和成员变量的区别 3 filter过滤器用过么,一般用在什么地方? 4 多线程一般用在什么地方? 5 list用过哪些?ArrayList如何排序?list跟set的...
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符...
⾯试题: ⾯试题:robotframework题 题 根据我之前总结的robotframework笔记,相信这些题不在话下,否则的话,只能再去回顾⼀遍啦! 01: :RF⽀持的四种表? ⽀持的四种表? Setting,Variable,Testcase,keywords...
Redis可以用来实现很多有用的功能,比方说用他的List来做FIFO双向链表,实现-个轻量 级的高性能消息队列服务,用他的Set可以做高性能的tag系统等等。另外Redis也可以对存 入的Key-Value设置expire时间,因此也可以被...
Python经典面试题 Python常见面试考试题目整理总结 Python面试题手册 1:Python 如何实现单例模式? 2:什么是 lambda 函数? 3:Python 是如何进行类型转换的? 4:Python 如何定义一个函数 5:Python 是如何进行...
以下是一个关于Redis面试题的例子: 1. Redis的优势是什么? Redis具有以下几个优势: - 高性能:Redis是基于内存的数据库,读写速度非常快。 - 支持丰富的数据结构:Redis支持字符串、哈希表、列表、集合、有序...
实现列表数据渲染,点击对应的筛选条件(全部、按进度排序、按总需人次排序、即将揭晓)加载及渲染相应的数据,所有筛选条件的url请求地址都为http://192.168.2.10:90/app/mock/21/list,(返回的数据不需要排序,...
36、Redis 持久化数据和缓存怎么做扩容? 37、分布式 Redis 是前期做还是后期规模上来了再做好?为 什么? 38、Twemproxy 是什么? 39、支持一致性哈希的客户端有哪些? 40、Redis 与其他 key-value 存储有什么不同...
Python基础 文件操作 1.有一个jsonline格式的文件file....企业面试题 15.python新式类和经典类的区别? 16.python中内置的数据结构有几种? 17.python如何实现单例模式?请写出两种实现方式? 18.反转一个整数,例如-123
前端大厂最新面试题-Linked List.docx