Java Map集合

来源:互联网 发布:apache服务器添加域名 编辑:程序博客网 时间:2024/06/11 21:39

Java Map集合

Map用来保存具有映射关系的数据,即key-value。key和value存在一一对应的关系,即通过key能查出唯一的确定的value值。Map中的key是唯一的不能重复的可以是null但只能有一个null,value值可以重复。

public class Test{public static void main(String[] args){Map map = new HashMap();// map中放入key-value对map.put("aa", 10);map.put("bb", 20);map.put("cc", 30);System.out.println(map);System.out.println("map中是否包含aa的key :&" + map.containsKey("aa"));System.out.println("map中是否包含40的value :" + map.containsValue(40));System.out.println("返回指定key对应的value " + map.get("aa"));System.out.println("判断改map是否为空 :" + map.isEmpty());// 返回该map中所有key组成Set集合Set keySet = map.keySet();for (Object key : keySet){System.out.println(key);}}}
{aa=10, bb=20, cc=30}map中是否包含aa的key :truemap中是否包含40的value :false返回指定key对应的value :10判断改map是否为空 :falseaabbcc

HashMap和Hashtable类

HashMap和Hashtable都是Map接口的典型实现类,它们关系完全类似于ArrayList和Vector的关系。Hashtable是一个线程安全的Map实现,HashMap是线程不安全的,所以HashMap比Hashtable的性能高一点。Hashtable不允许使用null作为key和value,如果试图将null放入Hashtable会报空指针异常,HashMap可以使用null作为key和value。

Hashtable是一个比较古老的类,命名上都没有遵守Java的命名规则,我们的代码中应该尽少使用Hashtable,即使需要线程安全的Map实现,可以通过Collections工具类把HashMap变成线程安全的。

Map m = Collections.synchronizedMap(new HashMap());

LinkedHashMap类

LinkedHashSet是HashMap的子类,它和LinkedHashSet一样使用双向链表维护key-value对的顺序,LinkedHashSet中的元素顺序按插入顺序进行排列。

public class Test{public static void main(String[] args){Map map = new LinkedHashMap();map.put("bb", 10);map.put("cc", 20);map.put("dd", 30);System.out.println(map);}}
{bb=10, cc=20, dd=30}

LinkedHashMap要维护元素插入顺序所以性能略低于HashMap,但是它以链表维护内部顺序,所以迭代访问Map中全部元素有较好的性能

TreeMap类

TreeMap是Map的子接口SortedMap的实现类,TreeMap和TreeSet一样底层也是个红黑树,保证其中元素处于有序状态。TreeMap也有两种排序方式自然排序和定制排序。具体可以参考TreeSet。

TreeMap通常比HashMap和Hashtable要慢,尤其是对元素插入删除的时候,但TreeMap中元素处于有序状态下的所以无需专门进行排序操作。对于一般的场景建议使用HashMap,它专门为快速查询而设计的。

原创粉丝点击