利用key进行索引的数据结构
Dictionary
Dictionary是一个抽象类,它的所有方法都是抽象的,这些性质导致它更像一个intertace(接口).但是这个类出现时还不存在接口的概念.
函数结构如下:
函数名称 | 函数描述 |
Dictionary() | 构造函数,被非抽象子类隐式调用 |
elements() | 获得这个dictionary中的所有的key |
get( Object key ) | 通过key查询到字典中的对应的值 |
isEmpty() | 判断dictionary是否为空 |
keys() | 获得这个dictionary中的所有的key |
put() | 向dictionary中添加一个对 |
remove(Object key) | 删除dictionary中关键字为key的对 |
size() | 获得dictionary中对的个数 |
HashTable
HashTable***继承*自Dictionary,利用哈希算法散列来在字典中通过关键字查找对应的内容。查找的复杂度是常数,具体与dictionary中的元素的冲突来决定的。
1. 函数列表
通过继承关系得到的函数方法不再重复列举
函数名称 | 函数描述 |
HashTable() | 构造函数 |
clear() | 清空hashTable中所有的元素 |
clone() | 获取一个hashTable的拷贝 |
contains() | 检查某个对象是否作为值存在于dictionary中 |
containsValue() | 同上 |
containsKey() | 检查某个对象是否作为关键存于dictionary中 |
entrySet() | 返回hashTable里的所有(key,value) |
equals() | 判断当前对象和参数是否相等 |
putAll() | 将一个集合添加到dictionary当中 |
hashCode() | 获得一个hashTable的哈希码 |
rehash() | 增长hashTable的内部的空间 |
2. 创建hashTable
public Hashtable()
public Hashtable(int initialCapacity)
public Hashtable(int initialCapacity, float loadFactor)
第一个参数用来设定hashTable的初始的空间大小,第二个参数是决定拓展空间的边界条件,用来控制冲突,当loadFactor小的时候出现冲突的情况比较少,会得到较良好的时间复杂度,达到loadFactor*capacity时,空间会拓展一倍。
public Hashtable(Map t)
这个hashTable会将初始空间拓展一倍,loadFactor设定为75%.
3. 添加(key,value)对
public Object put(Object key, Object value)
注意:
1. 添加的时候key和value都不能是null,否则抛出异常NullPointerException
2. key是唯一的,每次插入的新的对如果之前关键字已经插入过,那么会返回旧的值,然后更新新的值。否则返回null.
public void putAll(Map map)
将一整个集合插入到当前的dictionary中。
4. 通过关键字key删掉元素
public Object remove(Object key)
删除关键字索引到的元素,并且返回这个元素
public void clear()
删除字典中的所有索引和元素
5. dictionary的大小
public int size()
public boolean isEmpty()
前一个是获得dictionary的大小,第二个用来判断dictionary是否为空。
protected void rehash()
一般被隐式调用的函数,用来拓展hashTable的空间。
6. 获得dictionary中的key和value
通过关键字索引到具体的元素
public Object get(Object key)
找不到的情况下,返回null。
public Enumeration keys()
public Set keySet()
获得全部的key
public Enumeration elements()
public Collection values()
获得全部的value
public Set entrySet()
获得全部的索引+元素
7. 查找索引和元素的存在性
public boolean containsKey(Object key)
判断某个key是否在hashTable中存在
public boolean contains(Object value)
public boolean containsValue(Object value)
判断某个value是否存在,需要遍历整个hashTable,效率低得吓人。
8. 克隆一个hashTable
public Object clone()
得到当前对象的一个拷贝
9. 相等性的判断
public boolean equals(Object o)
EntrySet一样的hashTable相等,在Map整个Interface的层面实现的。
Properties
一般情况下Properties的key和value都使用string,否则应该避免listing和loading函数的使用
函数列表:
函数名称 | 函数描述 |
Properties() | 构建一个属性 |
getProperty() | 通过索引获得value |
list() | 展示出所有的属性的值 |
load() | 从流中读取出一个属性 |
propertyNames() | 返回一个属性的列表的集合 |
setProperties() | 设置一个属性 |
store() | 将一个属性输出到流当中 |
1. 设置一个属性
public Object setProperty(String key, String value)
关键字的设置不能包含一些字符,“=”,“:”,“\t”,”\r”,”\n”,”\f”
2. 查找一个属性
public String getProperty(String key)
public String getProperty(String key, String defaultValue)
如果能够找到关键字,返回属性的值,如果不能找到的话,存在defaultValue的话,那么返回defaultValue,没有的话返回null。
public Enumeration propertyNames()
获得一个属性索引的枚举
3. 属性的流操作
void load(InputStream inStream) throws IOException
void store(OutputStream out, String header) throws IOException
输出的格式:
#header
key1=value1
key2=value2
key3=value3
输入格式有多种:
foo:bar
one
two
three=four
five six seven eight
nine ten
public void list(PrintStream out)
public void list(PrintWriter out)
直接不好讲,举个例子:
props.list(System.out).
得到如下结果:
− listing properties −
five=six seven eight
two=
one=
three=four
nine=ten
foo=bar
Dictionary相关的collections介绍到这里,over~~