Map和Set

Map
1.Map是一个接口类,没有继承自Collection,存储的是<K,V>结构的键值对,K唯一且不重复
注意:

  1. Map是一个接口,不能直接实例化对象,要想实例化对象只能实例化Map的实现类TreeMap和HashMap
  2. Map中存放的K不能重复,V可以重复
  3. 在Map中插入键值对时K不能为空,否则抛异常,但是V可以为空
  4. Map键值对中K不能直接修改,V可以修改,要想修改只能先删除K再插入

TreeMap的实现

package map_set;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class TreeMapDemo {
    public static void main(String[] args) {
        Map<String,String> map=new TreeMap<>();
        System.out.println("map中键值对的个数:"+map.size());
        map.put("apple","苹果");
        map.put("orange","橘子");
        map.put("banana","香蕉");
        System.out.println("map中键值对的个数:"+map.size());
        //遍历map
        for (Map.Entry<String,String> e:map.entrySet()) {
            System.out.println(e+" ");
        }
        //如果map中有相同的键那么就会覆盖之前的键对应的值
        map.put("apple","大苹果");
        System.out.println("map中键值对的个数:"+map.size());
        System.out.println(map);
        //通过键获取值
        System.out.println(map.get("banana"));
        //返回对应键的值,key不存在就返回默认值
        System.out.println(map.getOrDefault("caomei","草莓"));
        //如果插入的键值对键为null就报错,这里捕获了异常
        try {
            map.put(null,"null");
        }catch (Exception e){
            System.out.println("不能插空的键");
        }
        //打印所有key
        for (String key:map.keySet()) {
            System.out.println(key);
        }
        //打印所有value
        for (String value:map.values()) {
            System.out.println(value);
        }
    }
}
map中键值对的个数:0
map中键值对的个数:3
//跟插入的顺序不一致,因为TreeMap对于key是有序的
apple=苹果 
banana=香蕉 
orange=橘子 
map中键值对的个数:3
{apple=大苹果, banana=香蕉, orange=橘子}
香蕉
草莓
不能插空的键
apple
banana
orange
大苹果
香蕉
橘子

HashMap实现

package map_set;

import java.util.HashMap;
import java.util.Map;

public class HashMapDemo {
    public static void main(String[] args) {
        //HashMap:无序
        Map<String,String> m1=new HashMap<>();
        m1.put("peach","桃子");
        m1.put("orange","橘子");
        m1.put("apple","苹果");
        System.out.println(m1.size());
        //如果插入的键值对的key存在,value不同那么就会value覆盖
        m1.put("orange","橙子");
        System.out.println(m1);
        System.out.println(m1.put("caomei","草莓"));
        //key值不能为空,否则造成空指针异常
//        m1.put(null,"香蕉");
        //value值可以为空
        m1.put("banana","香蕉");
        System.out.println(m1.get("apple"));
        System.out.println(m1.getOrDefault("apple","苹果手机"));
        System.out.println(m1.getOrDefault("watermelon","西瓜"));
        System.out.println(m1);
        System.out.println(m1.remove("bananan"));
        if (m1.containsKey("banana")){
            System.out.println("存在");
        }else {
            System.out.println("不存在");
        }
        System.out.println(m1.remove("banana"));
        //找key时间复杂度:O(logN),挨个遍历
        if (m1.containsKey("banana")){
            System.out.println("存在");
        }else {
            System.out.println("不存在");
        }
        //打印所有key
        //keySet()将所有key放在set中返回
        for (String s:m1.keySet()){
            System.out.println(s+" ");
        }
        //打印所有value
        for (String s:m1.values()) {
            System.out.println(s+" ");
        }
        //打印所有键值对
        for (Map.Entry<String,String> e:m1.entrySet()) {
            System.out.println(e+" ");
        }
    }
}
3
{orange=橙子, apple=苹果, peach=桃子}
null
苹果
苹果
西瓜
{orange=橙子, banana=香蕉, apple=苹果, peach=桃子, caomei=草莓}
null
存在
香蕉
不存在
orange 
apple 
peach 
caomei 
橙子 
苹果 
桃子 
草莓 
orange=橙子 
apple=苹果 
peach=桃子 
caomei=草莓

TreeMap和HashMap区别
在这里插入图片描述
Set
Set和Map主要的不同有两点:
1.set继承自Collection接口类
2.set中只存储了key
在这里插入图片描述
注意

  1. Set是继承自Collection的一个接口类
  2. Set中只存储了key,并且要求key一定要唯一
  3. Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
  4. Set最大的功能就是对集合中的元素进行去重
  5. 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础
    上维护了一个双向链表来记录元素的插入次序。
  6. Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
  7. Set中不能插入null的key。
  8. TreeSet和HashSet的区别
    在这里插入图片描述
    TreeSet实现
import java.util.TreeSet;
import java.util.Iterator;
import java.util.Set;
 public static void TestSet(){
 Set<String> s = new TreeSet<>();
 // add(key): 如果key不存在,则插入,返回ture
 // 如果key存在,返回false
 boolean isIn = s.add("apple");
 s.add("orange");
 s.add("peach");
 s.add("banana");
 System.out.println(s.size());
 System.out.println(s);
 isIn = s.add("apple");
 // add(key): key如果是空,抛出空指针异常
 //s.add(null);
 // contains(key): 如果key存在,返回true,否则返回false
 System.out.println(s.contains("apple"));
 System.out.println(s.contains("watermelen"));
 // remove(key): key存在,删除成功返回true
 // key不存在,删除失败返回false
 // key为空,抛出空指针异常
 s.remove("apple");
 System.out.println(s);
 s.remove("watermelen");
 System.out.println(s);
 // 抛出空指针异常
 // s.remove(null);
 Iterator<String> it = s.iterator();
 while(it.hasNext()){
 System.out.print(it.next() + " ");
 }
 System.out.println();
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值