JAVA类集(2)简单操作

来源:互联网 发布:学网络编程 编辑:程序博客网 时间:2024/06/05 20:01

本博文将简单简单讲解Java类集的使用.
在整个JAVA类集中,最常用的类集接口是:
Collection,List,Set,Map,Iterator,ListIterator,Enmueration,SortedSet,SortedMap,Queue,Map.Entry

上一篇博文,简单讲解了单值存储类集的使用.

http://blog.csdn.net/haiyang_duan/article/details/76851429

那么本博文,将简单讲解键值对类集的使用.

一. Map

这里写图片描述

二. Map.Entry

这里写图片描述

从之前的内容知道,在Map的操作中,所有的内容都是通过key–>value的形式保存的,那么对于集合来讲,实际上是将key–>value的数据保存在了Map.Entry的实例之后,再在Map集合中插入一个Map.Entry的实例化对象.

提示:
在Map的一般操作中,如增加或删除元素时,不用使用Map.Entry接口,但是在将Map的全部数据输出时,就必须使用Map.Entry接口.

三. Map常用子类

Map的常用子类有:
HashMap,Hashtable,TreeMap,WeakHashMap,IdentityHashMap

HashMap:无序存放,新的操作类,key不允许重复
Has和table:无序存放,旧的操作类,key不允许重复
TreeMap:可以排序的Map集合,按集合中的key排序,key值不允许重复
WeakHashMap:弱引用的Map集合,当集合中的内容不再使用时清除掉无用的数据,使用gc进行回收.
IdentityHashMap:Key可以重复的Map集合

3.1 HashMap

HashMap是Map接口的子类,直接使用其为Map接口实例化即可.

         增加内容:put(Object key,Object value)         取出内容:get(E key)         判断key是否存在:containsKey(Object key)         判断value是否存在:containsValue(Object value)         输出全部的key:keySet() + Iterator         输出全部的value:values() + Iterator

3.2 Hashtable

HashMap也是一个Map的集合,与Vector退出的时间一样,都属于旧的操作类.

HashMap与Hashtable的区别:

这里写图片描述

3.3 TreeMap

之前的类在存放数据时并未对其进行排序,而TreeMap的主要功能是按照Key进行排序.

注意:在使用自定义类作为key时,需要实现Comparable接口,否则会出现类转换异常

3.4 WeakHashMap

之前的类使用的都是强类型的引用,即所有的数据不管使用与否,都会保存下来,但是弱引用类型就不一样了,会自动清理暂时不使用的数据.

对象的引用类型分为四类:
强引用:当内存不足时,JVM宁可出现OutOfMemeryError错误而停止程序也不会回收对象来释放空间.
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存.
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收.
虚引用:和没有任何引用一样.

3.5 IdentityHashMap

IdentityHashMap时key可以重复的Map集合.之前的Map的子类,如HashMap的key是不能重复的,否则会覆盖掉重复的内容.
只要IdentityHashMap的key对象的地址不同,就不认为是相同的key,就可以进行存储.

四. Map接口的使用注意事项

4.1 不能直接使用迭代输出Map中的全部内容

Iterator或foreach一次只能找到一个值,而Map中存放的是一对值,所以不能直接进行迭代输出,如果非要进行迭代输出,则必须按照以下步骤进行:
(1)将Map的势力通过entrySet()方法变为Set接口对象.
(2)通过Set实例为Iterator实例化.
(3)通过Iterator迭代输出,每个内容都是Map.Entry的当对象.
(4)通过Map.Entry进行key–>value的分离.

package cn.mysql;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set;public class MapDemo {    public static void main(String[] args) {        Map<String, String> map = new HashMap<String,String>();        map.put("nihao", "beijing");        map.put("hello", "shanghai");        map.put("hello", "world");        Set<Map.Entry<String, String>> entry = map.entrySet();        Iterator<Map.Entry<String, String>> iter = entry.iterator();        while(iter.hasNext()){            Map.Entry<String, String> next = iter.next();            System.out.println(next.getKey() + "-->" + next.getValue());        }        //或者使用foreach迭代输出        for(Map.Entry<String, String> me : map.entrySet()){            System.out.println(me.getKey() + "-->" + me.getValue());        }    }}

4.2 直接使用非系统类作为key

如果要想使用自定义的对象表示key,则对象所在的类一定要覆写equals()和hashCode()方法,否则无法找到对应的value.

五. SortedMap接口

TreeMap是此接口的一个子类,属于可排序Map

这里写图片描述

原创粉丝点击