Map接口

Map接口

一,前言

​ 了解Map集合的特点,掌握Map集合的常用方法,Map集合的4种遍历方式,掌握集中常用的Map接口下实现类的子类集合

二,Map集合的特点

  • Map并不是集合,而表示两个集合之间的一种关系,故Map没有实现Collection接口。
  • A集合应该是一个Set集合,B集合应该是List集合。
  • 我们把A集合中的元素称之为key,把B集合中的元素称之为value。
  • Map其实就有多个key-value(键值对)组成的,每一个键值对我们使用Entry表示,Map结构也可以理解为是Entry的集合,即Set

三,Map集合的常用方法

增加方法:

boolean put(Object key,Object value):
	存储一个键值对到Map中。
boolean putAll(Map m):
	把m中的所有键值对添加到当前Map中。

删除方法:

Object remove(Object key):
	从Map中删除指定key的键值对,并返回被删除key对应的value。

修改方法:

无专门的方法,可以调用put方法,存储相同key,不同value的键值对,可以覆盖原来的。

查询方法:

int size():
	返回当前Map中键值对个数。
Object get(Object key):
	返回Map中指定key对应的value值,如果不存在该key,返回null
boolean isEmpty():
	判断当前Map中键值对个数是否为0boolean containsKey(Object key):
	判断Map中是否包含指定key。
boolean containsValue(Object value):
	判断Map中是否包含指定value。
        
Set keySet():
	返回Map中所有key所组成的Set集合。
Collection values():
	返回Map中所有value所组成的Collection集合。
Set<Entry> entrySet():
	返回Map中所有键值对所组成的Set集合。

四,Map集合的遍历方式

1.keySet方法或者values方法

public void test() {
	Map map = new HashMap(); 
	// KeySet 获取key  
	for (Integer key : map.keySet()) {
		System.out.println(key);
	}
    // values 获取value
	for (Integer value : map.values()) {
		System.out.println(value);
	}     
}

2.利用keySet get(key)方法

// keySet get(key) 获取key and value
public void testKeySetAndGetKey() {
	for (Integer key : map.keySet()) {
		System.out.println(key + ":" + map.get(key));
	}
}

3.利用entrySet方法

// entrySet 获取key and value
public void testEntry() {
	for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
		System.out.println(entry.getKey() + ":" + entry.getValue());
	}
}

4. Iterator迭代器

public void testIterator() {
	Iterator<Map.Entry<Integer, Integer>> it = map.entrySet().iterator();
	while (it.hasNext()) {
		Map.Entry<Integer, Integer> entry = it.next();
			System.out.println(entry.getKey() + ":" + entry.getValue());
	}
}

五,常用的Map集合

1.HashMap & Hashtable集合

  • HashMap 和 Hashtable 是 Map 接口的两个典型实现类。
  • Hashtable 、HashMap 也不能保证其中 key-value 对的顺序
  • Hashtable 、HashMap 判断两个 Key 相等的标准是:两个 Key 通过 equals 方法返回 true,hashCode 值也相等。
  • Hashtable 、HashMap 判断两个 Value相等的标准是:两个 Value 通过 equals 方法返回 true

区别:

  • Hashtable 是一个古老的 Map 实现类,不建议使用。
  • Hashtable 是一个线程安全的 Map 实现,但 HashMap 是线程不安全的。
  • Hashtable不允许使用 null 作为 key 和 value,而 HashMap 可以。

例:(统计一个字符串中每隔字符出现次数)

public class HashMapDemo2{
	public static void main(String[] args) {		
		String str = "ABCDEFABCDEABCDABCABA";     
       //把字符串转换为char数组
		char[] charArray = str.toCharArray();       
       //Map的key存储字符,value存储出现的次数
        Map<Character, Integer> map = new HashMap<>(); 
        //迭代每一个字符
        for (char ch : charArray) {
           //判断Map中是否已经存储该字符
            if (map.containsKey(ch)) {
                Integer count = map.get(ch);
                //如果已经存储该字符,则把出现次数加上1
                map.put(ch, count+1);
            }else {
                //如果没有存储该字符,则把设置次数为1
                map.put(ch, 1);
            }
        }
        System.out.println(map); 
    }
}

2.TreeMap集合

​ TreeMap底层基于红黑树算法,因为Map中的key是Set,所以不能保证添加的先后顺序,也不允许重复,但是Map中存储的key会默认使用自然排序(从小到大),和TreeSet一样,除了可以使用自然排序也可以自定义排序。

例:

实力化TreeSet自定义排序Comparator方法:(如按类的年龄排序)
(Comparator方法,compare(T o1, T o2))

public void test(){
	Comparator com = new Comparator(){
		@Override
    	public int compareTo(Person o1,Person o2) {
       		if(o1 instanceof User && o1 instanceof User){
       			User u1 = (User)o1;
       			User u2 = (User)o2;
       			return Integer.compare(u1.getAge(),u2.getAge())
       		}else{
       			throw new RuntimeException("输入的数据类型不匹配")
       		}
    	}
    	TreeSet ts = new TreeSet(com);
    	for (ts.Entry<Integer, Integer> entry : ts.entrySet()) {
			System.out.println(entry.getKey() + ":" + entry.getValue());
		}	
	}
}

3. LinkedHashMap

  • LinkedHashMap 是 HashMap 的子类.
  • LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致

六,Map集合总结

  • Map 用于保存具有映射关系的数据,因此 Map 集合里保存着两组值,一组值用于保存 Map 里的 Key,另外一组用于保存 Map 里的 Value。
  • Map 中的 key 和 value 都可以是任何引用类型的数据。
  • Map 中的 Key 不允许重复,即同一个 Map 对象的任何两个 Key 通过 equals 方法比较中返回 false。
  • Key 和 Value 之间存在单向一对一关系,即通过指定的 Key 总能找到唯一的,确定的 Value。

七,操作集合的工具类:Collections

1.特点

  • Collections 是一个操作 Set、List 和 Map 等集合的工具类。
  • Collections 中提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象设置不可变、对集合对象实现同步控制等方法

2.Collections集合常用的方法

排序操作:

reverse(List):
	反转 List 中元素的顺序。
shuffle(List):
	对 List 集合元素进行随机排序。
sort(List):
	根据元素的自然顺序对指定 List 集合元素按升序排序。
sort(List,Comparator):
	根据指定的 Comparator 产生的顺序对 List 集合元素进行排序。。
swap(List,intint):
	将指定 list 集合中的 i 处元素和 j 处元素进行交换。

查找、替换:

Object max(Collection):
	根据元素的自然顺序,返回给定集合中的最大元素。
Object max(Collection,Comparator):
	根据 Comparator 指定的顺序,返回给定集合中的最大元素。
Object min(Collection):
	根据元素的自然顺序,返回给定集合中的最小元素。
Object min(Collection,Comparator):
	根据 Comparator 指定的顺序,返回给定集合中的最小元素。
int frequency(Collection,Object):
	返回指定集合中指定元素的出现次数。
boolean replaceAll(List list,Object oldVal,Object newVal):
	使用新值替换 List 对象的所有旧值。
posted @   morrowday  阅读(96)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示