java.util.HashMap

HashMap浅谈

首先HashMap是Map接口的实现类。

每次存储两个对象,一个为键key,一个为值value。

键key是没有重复的,是唯一的存在。

无序集合,非线程安全,key和value都可以存入null。

-----------------------------------------

常用方法:

put(key,value);   添加方法,有返回值,通常返回值为null,在存入的key已经存在时,返回值则返回被覆盖之前的value值。

get(key); 得到value值方法,通过key得到value值。

remove(key) 删除方法,通过key删除数据。返回被删除的数据中的value值,没有改key的数据删除失败则返回null。

keySet();得到所有的key,是一个Set集合。

entrySet();得到键值对的关系对象的集合,也是一个Set集合。

-----------------------------------------

遍历方法1:用迭代器

public static void main(String[] args) {
        HashMap<String, Integer> hashMap = new HashMap();
        hashMap.put("1", 2);
        hashMap.put("2", 3);
        //开始遍历
        Set set = hashMap.keySet();
        Iterator<String> iterator = set.iterator();
        while (iterator.hasNext()) {
            String key = iterator.next();
            Integer value = hashMap.get(key);
            System.out.println(key + "," + value);
        }
    }

遍历方法2:用增强for循环

public static void main(String[] args) {
        HashMap<String, Integer> hashMap = new HashMap();
        hashMap.put("1", 2);
        hashMap.put("2", 3);
        //开始遍历
        for (String key:hashMap.keySet()){
            Integer value=hashMap.get(key);
            System.out.println(key+","+value);
        }
    }

遍历方法3:用增强for遍历Entry键值对关系对象集合

public static void main(String[] args) {
        HashMap<String, Integer> hashMap = new HashMap();
        hashMap.put("1", 2);
        hashMap.put("2", 3);
        //开始遍历
        for (Map.Entry<String,Integer> entry:hashMap.entrySet()){
            String key=entry.getKey();
            Integer value=entry.getValue();
            System.out.println(key+","+value);
        }
    }

-----------------------------------------

需要注意的是:增强for不能遍历Map集合。

Entry到底是什么东东?她是Map集合接口里的一个内部静态接口,作用就是把key和value对应的关系封装成对象。

当用对象作为key时,注意该对象要重写equals方法和hashcode方法,确保key的唯一性。

-----------------------------------------

那么HashMap和Hashtable有什么区别呢:

HashMap:非线程安全,能存null,速度快。

Hashtable:线程安全,不能存null,速度慢。

因此,Hashtable几乎很少出现在编程的舞台,但是她有一个子类比她受欢迎得多,就是Properties集合,这个集合可以和流进行配合,实现持久存储。

-----------------------------------------

说到集合的线程安全的问题,让我想起一个集合操作类顺带题一下:

Collections类,注意,,不是Collection接口,是Collections,后面多了个s。

这个类全部是静态方法,直接调用即可,比如常用的方法有:

sort 排序,默认升序,只针对List集合,Set集合不行,因为Set集合没有索引。

shuffle 随机排序,把集合的位置随机打乱。

synchronizedSet,把非线程安全的Set集合变成线程安全的。

synchronizedList,把非线程安全的List集合变成线程安全的。

synchronizedMap,把非线程安全的Map集合变成线程安全的。


猜你喜欢

转载自blog.csdn.net/qq_40550973/article/details/80653526