HashMap集合与TreeMap集合的比较

1、HashMap集合是可以插入Null键的,而TreeMap不可以插入Null键
具体如以下程序所示:

package _11.homework;

import java.util.HashMap;
import java.util.TreeMap;

public class Compare {
    public static void main(String[] args){
        HashMap<Integer,String> hashMap=new HashMap<Integer,String>();
        hashMap.put(null, "sindy");
        hashMap.put(0002,null);
        hashMap.put(null,null);
        System.out.println(hashMap);
        System.out.println("------------------------------------------------------------------");
        TreeMap<Integer,String> treeMap=new TreeMap<Integer,String>();
        treeMap.put(null, "judy");
        treeMap.put(0004,null);
        treeMap.put(null,null);
        System.out.println(treeMap);
    }
}
运行结果:
{null=null, 2=null}
-----------------------------------------------------------
Exception in thread "main" java.lang.NullPointerException
    at java.util.TreeMap.compare(TreeMap.java:1188)
    at java.util.TreeMap.put(TreeMap.java:531)
    at _11.homework.Compare.main(Compare.java:15)

2、HashMap集合的元素唯一并且无序,而TreeMap集合的元素不仅唯一而且是排好顺序的。(原因:TreeMap集合底层的数据结构是基于红黑树的(将数据与根节点进行比较,如果相减为负数放在节点的左边,相为0则拒绝进入,为正数则放在节点右边;并且红黑树是自平衡的。因此TreeMap集合的元素唯一且排好顺序,但是排序是有条件的即必须实现Comparable接口 重写 CmcompareTo(T)方法,一般String和Integer类型底层已经重写过了,可以直接用!若是自己写的类则要重写CompareTo(T)方法);HashMap集合的底层是哈希表结构,只能保证元素的唯一性(哈希表结构重写了equals()方法和hashCode()方法))
具体比较键下列程序:

package _11.homework;

import java.util.HashMap;
import java.util.TreeMap;

public class Compare {
    public static void main(String[] args){
        HashMap<String,Integer> hashMap=new HashMap<String,Integer>();
        hashMap.put("sindy",10);
        hashMap.put("amy",3);
        hashMap.put("alice",5);
        hashMap.put("sindy",10);
        System.out.println(hashMap);
        System.out.println("------------------------------------------------------------------");
        TreeMap<String,Integer> treeMap=new TreeMap<String,Integer>();
        treeMap.put("sindy",10);
        treeMap.put("amy",3);
        treeMap.put("alice",5);
        treeMap.put("alice",5);
        System.out.println(treeMap);
    }
}

运行结果:
{amy=3, alice=5, sindy=10}
----------------------------
{alice=5, amy=3, sindy=10}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值