ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

20 集合(Map)、Collections集合工具类

2022-01-25 12:02:59  阅读:95  来源: 互联网

标签:Map 20 map System put key 集合 println out


Map集合概述

  • 元素成对存在,由键值对组成
  • 值可以重复,键不能重复
  • 每个键只能对应一个值,可以是单个值,也可以是一个数组或集合

Map常用方法

添加

  • V put(K key,V value)
  • 若指定的键(key)在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键所对应的值,替换成指定的新值

删除

  • void clear()
  • V remove(Object key)

查询

  • V get(Object key)
  • boolean containsKey(Object key)
  • boolean containsValue(Object value)
  • boolean isEmpty()

元视图操作方法

  • Set keySet()
  • Collection values()
  • Set<Map.Entry<K,V>> entrySet()

其他方法

  • int size()

Map集合的遍历

public class TestMap {
	public static void main(String[] args) {
		HashMap<String,String> map = new HashMap<>();
		map.put("许仙", "白娘子");
		map.put("董永", "七仙女");
		map.put("牛郎", "织女");
		map.put("许仙", "小青");
		
		System.out.println("所有的key:");
		Set<String> keySet = map.keySet();
		for (String key : keySet) {
			System.out.println(key);
		}
		
		System.out.println("所有的value:");
		Collection<String> values = map.values();
		for (String value : values) {
			System.out.println(value);
		}
		
		System.out.println("所有的映射关系");
		Set<Map.Entry<String,String>> entrySet = map.entrySet();
		for (Map.Entry<String,String> entry : entrySet) {
//			System.out.println(entry);
			System.out.println(entry.getKey()+"->"+entry.getValue());
		}
	}
}

Map的实现类

HashMap 和 Hashtable

  • 都是哈希表
  • 作用键的对象必须实现hashCode方法和equals方法
  • Hashtable是线程安全的,HashMap是线程不安全的

TreeMap

  • 基于红黑树实现

    package com.atguigu.map;
    
    import java.util.Comparator;
    import java.util.Map.Entry;
    import java.util.Set;
    import java.util.TreeMap;
    
    import org.junit.Test;
    
    public class TestTreeMap {
    	@Test
    	public void test1() {
    		TreeMap<String,Integer> map = new TreeMap<>();
    		map.put("Jack", 11000);
    		map.put("Alice", 12000);
    		map.put("zhangsan", 13000);
    		map.put("baitao", 14000);
    		map.put("Lucy", 15000);
    		
    		//String实现了Comparable接口,默认按照Unicode编码值排序
    		Set<Entry<String, Integer>> entrySet = map.entrySet();
    		for (Entry<String, Integer> entry : entrySet) {
    			System.out.println(entry);
    		}
    	}
    	@Test
    	public void test2() {
    		//指定定制比较器Comparator,按照Unicode编码值排序,但是忽略大小写
    		TreeMap<String,Integer> map = new TreeMap<>(new Comparator<String>() {
    
    			@Override
    			public int compare(String o1, String o2) {
    				return o1.compareToIgnoreCase(o2);
    			}
    		});
    		map.put("Jack", 11000);
    		map.put("Alice", 12000);
    		map.put("zhangsan", 13000);
    		map.put("baitao", 14000);
    		map.put("Lucy", 15000);
    		
    		Set<Entry<String, Integer>> entrySet = map.entrySet();
    		for (Entry<String, Integer> entry : entrySet) {
    			System.out.println(entry);
    		}
    	}
    }
    

Properties

  • Hashtable的子类,可以保存在流中或从流中加载

    	public static void main(String[] args) {
    		Properties properties = System.getProperties();
    		String p2 = properties.getProperty("file.encoding");//当前源文件字符编码
    		System.out.println(p2);
    	}
    

HashMap源码分析

JDK1.8

hashmap
hashmap流程

put方法源码分析

put

关于映射关系的key是否可以修改

  • 如果已经put到Map中的映射关系,再修改key的属性,而这个属性又参与hashcode值的计算,那么会导致匹配不上原来的hash值
  • 所以实际开发中,经常选用String,Integer等作为key,因为它们都是不可变对象

集合框架

集合框架2

Collections工具类

  • 参考数组的工具类:Arrays
  • public static void shuffle(List<?> list) List 集合元素进行随机排序,类似洗牌
  • public static void reverse(List<?> list)反转指定列表List中元素的顺序
  • public static int frequency(Collection<?> c,Object o)返回指定集合中指定元素的出现次数

标签:Map,20,map,System,put,key,集合,println,out
来源: https://www.cnblogs.com/19BigData/p/15842384.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有