Java数据结构:Map接口及其实现类

Map接口

                            ---- SortedMap接口  为Map增加排序功能

在这里插入图片描述

常用方法

  1. 添加
    put(K key, V value) //添加键-值对,如果键已存在,则旧值被新值替换

  2. 删除
    remove(Object key) //根据键删除指定键值对
    clear() //删除全部键值对

  3. 获取
    get(Object key) //根据键返回对应的值
    size() //返回长度

  4. 判断
    containsKey(Object key) //判断是否包含值
    containsValue(Object value) //判断是否包含值
    isEmpty() //判断是否为空

  5. 迭代遍历
    keySet() //返回键的集合
    values() //返回值的集合
    entrySet() //返回键值对的集合 键-值对又叫条目

HashMap

  • key无序而且不允许重复,key和value都允许为空
  • 当键是自定义类时,需要同时重写hashCode()方法和equals方法,以保证键的唯一性
  • HashTable—线程安全的老类,操作效率低,键值都不允许为null
  • HashMap—线程不安全的新类,操作效率高,键值都允许为null

Map的四种遍历方式

  1. 增强循环遍历keySet
  2. 增强循环遍历entrySet
  3. iterator遍历keySet
  4. iterator遍历entrySet
//使用Iterator迭代器
Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
while(it.hasNext()){		
	Map.Entry<String, String> entry = it.next();
	String key = entry.getKey();
	String value = entry.getValue();
	System.out.println("key=" + key + " value=" + value);
}	

HashMap和HashSet的关系

  1. HashSet内部组合了一个HashMap对象,其key存储的为HashSet中的元素,其value为哑元素(private static final Object PRESENT = new Object();
  2. 对HashSet的所有操作,方法内部都委托给HashMap来完成
    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
        public boolean remove(Object o) {
        return map.remove(o)==PRESENT;
    }
  1. TreeMap和TreeSet的关系也是一个道理

Properties类

Properties类是Hashtable的子类,键和值都是String类型,用于读取属性文件中的配置信息

  1. void load(InputStream inStream) //加载属性文件
  2. void store(OutputStream out,String comments) //保存属性文件
  3. String getProperty(String key) //根据属性名读取属性值
  4. Object setProperty(String key,String value) //根据属性名设置属性值
public String getProperty(String key) {
    Object oval = super.get(key);
    String sval = (oval instanceof String) ? (String)oval : null;
    return ((sval == null) && (defaults != null)) ? defaults.getProperty(key) : sval;
}
public synchronized Object setProperty(String key, String value) {
    return put(key, value);
}

TreeMap类

底层基于红黑树结构,可以对键进行排序,与值无关

  1. 如果key具备自然顺序的特性,TreeMap按照元素的自然顺序进行排序存储
  2. 如果key不具备自然顺序的特性,则元素无法直接加入TreeMap,必须先提供元素的比较规则
    1. Comparable接口,重写compareTo()方法
    2. Comparator接口,重写compare()方法

Iterator迭代器

在这里插入图片描述

  1. Aggregate—集合接口,定义访问集合元素方法,如List
  2. ConcreteAggregate—具体的集合实现类,如ArrayList,LinkedList
  3. Iterator—迭代器接口,定义遍历元素时使用的方法
  4. Concretelterator—具体的迭代器实现类,一般作为集合实现类的内部类出现
    在这里插入图片描述
    之后再看,太长了

迭代器设计模式的优点:

  1. 通过迭代器设计模式可以把管理集合元素和遍历集合元素这俩个功能解耦分离,俩者各司其职,符合类的单一职责原则
  2. 迭代器模式提供一种遍历集合元素的统一接口,使用相同的方法遍历集合元素。无需关注集合类型和底层实现。只需调用iterator()方法拿到迭代器,并调用迭代器的hasNext()和next()方法就能完成遍历操作
  3. iterator()方法对外返回一个实现了Iterator接口的具体子类对象,体现了多态性
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值