day 15:Collection中的Set和Map

集合类中的Set和Map

Set和Map

HashSet和HashMap

  • HashSet依赖于HashMap的实现
  • HashMap中可以存放key为null的key-value键值对
  • hashMap如何判定key值重复?
if (p.hash == hash &&((k = p.key) == key || (key != null && key.equals(k))))
  • jdk1.7和jdk1.8中的HashMap实现不同在于hash值相同的元素存放的数据结构1.7用的是普通的单链表,而1.8用的是红黑树(长度为8就用红黑树,小于8还是单链表)

TreeSet

  • TreeSet自带排序接口int compareTo(T o);返回值为负数、正数和0;
  • 如果是自定义的类,又要将其放入treeSet中,就需要向TreeSet指明排序规则;
  • 通过Comparable指明自定义对象的比较规则有两种方式
  • 1、直接将该规则告诉TreeSet(重写compareTo接口)
  • 2、让放入TreeSet中的元素自己指明自己的比较规则(见如下代码)
TreeSet<Student> tree = new TreeSet<>(new Comparator<Student>() {
   @Override
   public int compare(Student o1, Student o2) {
      int ret = o1.getName().compareTo(o2.getName());
      if(ret == 0) {
        return o1.getAge() - o2.getAge();
      } else {
        return ret;
      }
   }
});
  • 总而言之,要使用TreeSet,必须能够比较严肃。这些元素必须实现Comparable接口或者构造Set时提供一个Comparator
  • 在将元素添加进TreeSet中之后再去修改元素的值不会重新对元素进行排序!
        Student fir=tree.first();//E first();返回当前TreeSet中的最小元素
        fir.setName("haha");
        System.out.println();
        for (Student haha:tree
             ) {
            System.out.println(haha + " ");
        }

Map中的API含义和实例

 //V put(K key,V value)
        map.put(1,"zhangsan");
        map.put(2,"lisi");
        map.put(3,"wangwu");
        //System.out.println(map);{1=zhangsan, 2=lisi, 3=wangwu}

//V remove(Object key)
        map.remove(1);
        System.out.println(map);{2=lisi, 3=wangwu}

//boolean containsKey(Object key)
        System.out.println(map.containsKey(4));false

//V get(Object key)
        System.out.println("value ="+map.get(4));null

//Set<K>keySet()返回此映射中包含的键的 set 视图,因为map中key值不能重复,
//所以返回的是Set而不是List
        System.out.println(map.keySet());[2, 3]

两种遍历Map的方法

第一种:利用KeySet遍历整个map输出所有的键值对

        Set<Integer> haha = map.keySet();//把map中的key值复制到hahaSet当中
        for (Integer haha2:haha) {
            System.out.println("key ="+haha2);
            String value=map.get(haha2);//再根据haha2中的key值取出对应的value
            System.out.println("key = " + haha2 + " && " + " value = " + value);
        }

第二种:使用entrySet();返回此映射中包含的映射关系的 Set 视图;entrySet中存放的是键值对

Set<Map.Entry<Integer,String>>ent=map.entrySet();
        for (Map.Entry<Integer,String> haha3:ent) {
            System.out.println("entry.key = "+haha3.getKey()+"  && "+" entry.value = "+haha3.getValue());
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值