java 集合学习笔记4-HashMap TreeMap

1、集合-Map
    将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值
    
    Map接口和Collection接口的不同:
        Map是双列的,Collection是单列的
        Map的键唯一,Collection的子体系Set是唯一的
        Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
        
    其实Set里面的底层也是通过Map实现的,因为只需要将Map列中的值隐藏掉就是Set了
    
        
2、Map集合的功能概述
a:添加功能
V put(K key,V value):添加元素。
如果键是第一次存储,就直接存储元素,返回null
如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
b:删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
c:判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
d:获取功能
Set<Map.Entry<K,V>> entrySet():
V get(Object key):根据键获取值
Set<K> keySet():获取集合中所有键的集合
Collection<V> values():获取集合中所有值的集合
e:长度功能
int size():返回集合中的键值对的个数  
        
3、Map集合例子:
    Map<String, Integer> map = new HashMap<>();
    Integer i1 = map.put("张三", 23);
    Integer i2= map.put("李四", 24);
    Integer i3 = map.put("王五", 25);
    Integer i4 = map.put("赵六", 26);
    Integer i5 = map.put("张三", 26); //相同的键不存储,值覆盖,把被覆盖的值返回
    
    System.out.println(map);
    
    System.out.println(i1);
    System.out.println(i2);
    System.out.println(i3);
    System.out.println(i4);
    System.out.println(i5);
    System.out.println(map.containsKey("张三")); //判断是否包含传入的键
System.out.println(map.containsValue(100)); //判断是否包含传入的值
        
        
        
4、Map集合遍历:
        HashMap<String, Integer> hm = new HashMap<>();
        hm.put("张三", 23);
        hm.put("李四", 24);
        hm.put("王五", 25);
        hm.put("赵六", 26);
        
        第一种方式:
        Set<String> keySet = hm.keySet(); //获取集合中所有的键
        Iterator<String> it = keySet.iterator(); //获取迭代器
        while(it.hasNext()) { //判断单列集合中是否有元素
            String key = it.next(); //获取集合中的每一个元素,其实就是双列集合中的键
            Integer value = hm.get(key); //根据键获取值
            System.out.println(key + "=" + value); //打印键值对
        }
        
        第二种方式:
        for(String key : hm.keySet()) { //增强for循环迭代双列集合第一种方式
            System.out.println(key + "=" + hm.get(key));
        }
        
        
        
5、Map集合-LinkedHashMap:
    底层是链表实现的可以保证怎么存就怎么取    
    
    public static void main(String[] args) {
            LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>();
            lhm.put("张三", 23);
            lhm.put("李四", 24);
            lhm.put("赵六", 26);
            lhm.put("王五", 25);
            
            System.out.println(lhm);
        }
        //结果{张三=23, 李四=24, 赵六=26, 王五=25}
        
        
6、使用Map集合统计字符串中每个字符出现的次数:
    String str = "aaaabbbcccccccccc";
    char[] arr = str.toCharArray(); //将字符串转换成字符数组
    HashMap<Character, Integer> hm = new HashMap<>(); //创建双列集合存储键和值,记住必须是引用数据类型
    
    for(char c : arr) { //遍历字符数组
        /*if(!hm.containsKey(c)) { //如果不包含这个键
            hm.put(c, 1); //就将键和值为1添加
        }else { //如果包含这个键
            hm.put(c, hm.get(c) + 1); //就将键和值再加1添加进来
        }
        
        //hm.put(c, !hm.containsKey(c) ? 1 : hm.get(c) + 1);
        Integer i = !hm.containsKey(c) ? hm.put(c, 1) : hm.put(c, hm.get(c) + 1);
    }
    
    for (Character key : hm.keySet()) { //遍历双列集合
        System.out.println(key + "=" + hm.get(key));
    }
        
        
7、HashMap和Hashtable的区别:
Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
Hashtable不可以存储null键和null值,HashMap可以存储null键和null值

        
8、集合-Collections类概述:
    可以对集合进行排序,查找,比较等,就和操作数组的Arrays类的功能类似
    
    里面的方法:
        public static <T> void sort(List<T> list)
        public static <T> int binarySearch(List<?> list,T key)
        public static <T> T max(Collection<?> coll)
        public static void reverse(List<?> list)
        public static void shuffle(List<?> list)

    例如:
    ArrayList<String> list = new ArrayList<>();
list.add("c");
list.add("a");
list.add("a");
list.add("b");
list.add("d");

System.out.println(list);        //[c, a, a, b, d]
Collections.sort(list); //将集合排序
System.out.println(list);        //[a, a, b, c, d]
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值