有序平行数组实现符号表
Posted youzoulalala
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有序平行数组实现符号表相关的知识,希望对你有一定的参考价值。
有序平行数组实现符号表
2019-06-27 17:35:23
import java.io.ObjectInputStream; import java.util.ArrayList; import java.util.Arrays; /** * @ClassName ArrayST * @Author wangyudi * @Date 2019/6/27 16:46 * @Version 1.0 * @Description 有序平行数组实现符号表 * 成员变量:键数组、值数组、数量 * 成员函数:获取值get()、添加/更新值put()、获取键的排名rank()、删除键值对delete()、获取大小size()、显示display()、调整内部数组的大小 * */ public class ArrayST<Key extends Comparable<Key>, Value> private Key[] keys; private Value[] values; private int count; public ArrayST() this.count = 0; keys = (Key[])new Comparable[3]; values = (Value[])new Object[3]; private void resize(int num) Key[] tempKeys = (Key[])new Comparable[num]; Value[] tempValues = (Value[])new Object[num]; for(int i=0;i<count;i++) tempKeys[i]=keys[i]; tempValues[i]=values[i]; keys = tempKeys; values = tempValues; public int size() return count; public void display() for(int i=0;i<count;i++) System.out.print(keys[i]+" "); System.out.println(); for(int i=0;i<count;i++) System.out.print(values[i]+" "); System.out.println(); public Value get(Key key) int j = rank(key,0,count-1); if(j < count && keys[j].compareTo(key)==0) return values[j]; return null; public void put(Key key, Value value) int j = rank(key,0,count-1); if(j < count && keys[j]==key) values[j]=value; return; if(count>=keys.length) resize(keys.length*2); for(int i=count-1;i>=j;i--) keys[i+1]=keys[i]; values[i+1]=values[i]; keys[j] = key; values[j] = value; count++; public void delete(Key key) int j = rank(key,0,count-1); if(j<count&&keys[j].compareTo(key)==0) //use compareTo() to compare two keys for(;j<count-1;j++) keys[j] = keys[j+1]; values[j]=values[j+1]; count--; /** * rank方法是有序平行数组实现符号表的关键 * @param key * @return 该键的排名,即比多少个键大 */ public int rank(Key key, int lo, int hi) if(lo>hi) return lo; int mid = lo+(hi-lo)/2; int cmp = keys[mid].compareTo(key); if(cmp<0) return rank(key,mid+1,hi); else if(cmp>0) return rank(key,lo,mid-1); else return mid;
/** * @ClassName TestCase * @Author wangyudi * @Date 2019/6/27 17:23 * @Version 1.0 * @Description 测试案例 */ public class TestCase public static void main(String[] args) ArrayST<Integer, String> st = new ArrayST<>(); st.put(5,"5.."); st.put(2,"2.."); st.put(34,"34.."); st.put(17,"17.."); st.put(55,"55.."); st.put(214,"214.."); st.delete(34); System.out.println(st.get(214)); System.out.println(st.size()); st.display(); //结果 214.. 5 2 5 17 55 214 2.. 5.. 17.. 55.. 214..
以上是关于有序平行数组实现符号表的主要内容,如果未能解决你的问题,请参考以下文章