java.util.HashMap 逃离我推掉我的手 2022-05-22 00:21 83阅读 0赞 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集合变成线程安全的。
还没有评论,来说两句吧...