Java中HashMap,Hashtable和LinkedList
今天碰到一个很有意思的问题,就是关于使用LinkedList作为HashMap或者Hashtable得key,但是最后发现数据并没有存进去。
首先说一下HashMap,Hashtable吧,它们都继承了Cloneable, Map, Serializable。它们两个基本上是一样的,“The HashMap
class is roughly equivalent to Hashtable
, except that it is
unsynchronized and permits nulls.”。区别就是HashMap允许“ null
values and the null
key”,同时 unsynchronized。它的性能取决于“ initial capacity
and load factor
”,具体参考官方文档。HashMap还有一个特性就是不能保证存入的元素的顺序,“HashMap does not guarantee that the order
will remain constant over time。” 对于存入到里面的key,要求“To successfully store and retrieve objects from a hashtable, the
objects used as keys must implement the hashCode
method and the equals
method. ”。更具我的测试,其实这个对于HashMap也是适用的。
这个就和我今天碰到的问题联系上了,LinkedList类里面的hashCode()函数来源于List.hashCode(),具体如下:
int hashCode = 1;
Iterator<E> i = list.iterator();
while (i.hasNext()) {
E obj = i.next();
hashCode = 31*hashCode + (obj==null ? 0 : obj.hashCode());
}
也就是说hashCode依赖于内部存储的对象,恰好我存储的是一个抽象类,以方便实现多态性,所以并没有实现hashCode函数。如果存储的是类似String的基本数据类型或者是实现了hashCode函数的对象就可以了。
最后还有一个和HashMap有点容易混淆的类就是TreeMap。它继承了“Serializable, Cloneable, Map<K,V>, SortedMap<K,V>”,是SortedMap接口类唯一的实现。它本质上是“Red-Black tree”,里面存储的key是升序排列的,“ascending key order”。
参考:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/HashMap.html
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Hashtable.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/LinkedList.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/TreeMap.html
http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html
相关文档:
首先,AMF3似乎并不支持List.ArrayList等数组的解析...Java客户端传递List对象,AMF3无法解析为Array...
原因是:AMF3只支持基础数据类型...
故,需要将List等数据转换为Object[] !这样AMF3才能将Java传递的数组解析为Array...
由于数组的创建,即便一开始不赋值,也需要设置数组的length,如:String[] myString = new Str ......
最近班里的同学都忙着报班,有个达内是java培训,有个深蓝是C++培训,网上看了些帖子说什么的都有,自我感觉培养一个C++程序员的周期要比培养一个jAVA程序员的周期长很多,当然,C++要是学的好的话肯定比学java的牛,但是付出的代价个人认为是有很大差距的。对于现在市场上对于语言的需求也 ......
一个软件设计的好坏,我想很大程度上取决于它的整体架构,而这个整体架构其实就是你对整个宏观商业业务的抽象框架,当代表业务逻辑的高层抽象层结构 合理时,你底层的具体实现需要考虑的就仅仅是一些算法和一些具体的业务实现了。当你需要再开发另一个相近的项目时,你以前的抽象层说不定还可以再次利用 呢,面对对象的设计 ......
这个是加图片水印的!
package com.pic;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.awt.image.*;
import org.w3c.dom.*;
import com.sun.image.codec.jpeg.*;
import javax.imageio.*;
public class ImgBean_i{
public void ImgBean_i(){
}
public void ImgYin(S ......
1.最简单的图形,一个消息框
import javax.swing.JOptionPane;
//表明程序使用javax.swing包的JOptionPane类
public class Dialog1{
public static void main(String[] args) {
// TODO Auto-generated method stub
&n ......