转自:http://gzsangel.blog.163.com/blog/static/12003880820101100165650/
HashMap实现了Map接口,使用key-value(键-值)对应的方法存储数据,对于其中的数据,HashMap不保证其中元素(映射信息)的先后顺序,也就是说是无序的,并且允许一个null键和多个null值,当集合中不存在当前检索的键所对应的值时,HashMap的get()方法返回一个null值并且不报错。
影响HashMap的性能的两个参数
1初始容量,顾名思义,就是HashMap初始化时的默认存储key-value对个数
2负载因子,java编程思想中的解释就是,当存储的数据超过负载因子时,HashMap会成倍的增加容量来存储。
并且HashMap不是线程安全的。即不是同步的,所以使用时要考虑好.
另外关于HashMap的内存分配问题,即JVM如何管理HashMap的内存,首先,JVM在堆内存中分配一块空间存储HashMap,然后在栈内存中分配一块空间存储指向堆内存的HashMap的特殊变量,当HashMap的存储内容不超过负载因子时,堆内存空间不变,当超过时,JVM将重新分配堆内存,将HashMap的堆内存容量扩大一倍,这是内存分配,内存管理也由JVM控制,当HashMap过了他的作用域后,栈内存中的HashMap特殊变量立即被摧毁,而堆内存中的由java的垃圾回收机制在一个不确定的时间回收。
String Agent = request.getHeader("User-Agent");
StringTokenizer st = new StringTokenizer(Agent,";");
st.nextToken();
//得到用户的浏览器名
String userbrowser = st.nextToken();
//得到用户的操作系统名
String useros = st.nextToken();