发文章
发文工具
撰写
网文摘手
文档
视频
思维导图
随笔
相册
原创同步助手
其他工具
图片转文字
文件清理
AI助手
留言交流
Java实现的散列表,如下代码:
public class MyHashtable { private int manyItems;//表中元素个数 private Object[] keys; private Object[] data; private boolean[] hasBeenUsed;//若索引i处存在元素,则hasBeenUsed[i]为ture,否则为false public MyHashtable(int capacity) { if(capacity <= 0) throw new IllegalArgumentException("capacity is negative"); keys = new Object[capacity]; data = new Object[capacity]; hasBeenUsed = new boolean[capacity]; } //hash函数 private int hash(Object key) { return Math.abs(key.hashCode()%data.length); } //当前索引发生冲突,找下一索引 private int nextIndex(int i) { if(i + 1 == data.length) { return 0; } else { return i + 1; } } //如果在表中找到指定的关键字,返回值为关键字的索引,否则返回-1 private int findIndex(Object key) { int count = 0; int i = hash(key); while((count < data.length) && hasBeenUsed[i]) { if(key.equals(keys[i])) { return i; } else { count++; i = nextIndex(i); } } return -1; } public Object get(Object key) { int index = findIndex(key); if(index == -1) { return null; } else { return data[index]; } } public Object put(Object key, Object element) { int index = findIndex(key); Object answer; if(index != -1) { answer = data[index]; data[index] = element; return answer; } else if(manyItems < data.length) { index = hash(key); while(keys[index] != null) { index = nextIndex(index); } keys[index] = key; data[index] = element; hasBeenUsed[index] = true; manyItems++; return null; } else { throw new IllegalStateException("Hashtable is full!"); } } public Object remove(Object key) { int index = findIndex(key); Object answer = null; if(index != -1) { answer = data[index]; data[index] = null; keys[index] = null; manyItems--; } return answer; } public boolean contains (Object key) { return (findIndex(key) != -1); } public static void main(String[] args) { MyHashtable table = new MyHashtable(100); table.put(1, "china"); table.put(2, "美国"); System.out.println(table.get(2).toString()); } }
来自: 最初九月雪 > 《Java基础》
0条评论
发表
请遵守用户 评论公约
《算法导论》读书笔记7 (散列表)
public void put(String key, Object value) {int hash = hash(key.hashCode());重构putJava代码 public void put(String key, Object value) { int hash = hash(key.hashCode()); if (...
XMemcached与Spring3.2缓存框架集成
Java之通过Collections.synchronizedMap创建线程安全的HashMap
Java之通过Collections.synchronizedMap创建线程安全的HashMap 1 问题。public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) { return new SynchronizedMap<K,V>(m);}...
jdk_Collection_HashMap源码 深入 解读
//加载因子 transient int modCount;//HashMap被改变的次数 transient int size;//宽度 private transient Set<com.collection.Map.Map.Entry<K, V>> entrySet = null; pu...
C# 键盘改键功能
打个比方,假如我键盘某个键坏了,比如回车键(这个键很重要),在没有备用键盘的情况下我们就可以用此功能来暂时顶替下;C# 实现键盘改...
C#过滤敏感词DFA算法
C#+AE 鹰眼
private void MainFrm_Load(object sender, EventArgs e) { pMapControl = (IMapControl2)axMapControl1.private voi...
使用ScriptableObject创建.asset文件
namespace XXX{ [CreateAssetMenu(fileName="xxx", menuName="xxx")] public class CommonConfig : ScriptableObject { [HideInInspector] public List<string> Keys;public...
WPF customize DelegateCommand
public DelegateCommand UCCmd { get { if(UCCmdValue==null) { UCCmdValue = new DelegateCommand(UCCmdExecuted, UCCmdCanExecute);7 8 public DelegateCommand(Action<object> execute) 9 : ...
微信扫码,在手机上查看选中内容