Java入门14---Map

d11

==和equals区别
1.==
	判断对象是否是同一个,地址是否相同
2.euqals
	判断对象的内容是否相同,默认调用object的equals()方法,而该方法仍然判断的是地址是否相同
3.如果没有重写equals的方法,和==效果一样

Set 集合

  • 不能重复
  • 无序
  • add
  • HashSet的内部实现是通过HashMap实现的

========================

Map 映射

在这里插入图片描述

  • 1.映射
  • Key - value 对,称为Entry
  • map的size就是entry的数量
  • Map接口是单独的接口,没有继承任何接口(与1.5之前的jdk版本不同)
  • put(Key)放入元素
将key 和 value 进行关联,
  • get(Key)提取元素
  • 迭代 entry keyset
  • remove(key)
  • HashMap.hash()方法意义:将新的hash值与更多的特征值相关
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。
它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。
public class MapDemo {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<Integer, String>();
        map.put(100,"tom100");
        map.put(100,"tom200");
        map.put(300,"tom300");
        map.put(400,"tom400");

        System.out.println(map.size());
        System.out.println(map.values());
    }

在这里插入图片描述

        //迭代
        Set<Map.Entry<Integer,String>> entries = map.entrySet();
        //增强for循环
        for(Map.Entry<Integer,String> entry : entries){
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key + "+" + value);
        }
        System.out.println("====================================");

        //通过key迭代
        Set<Integer> keys = map.keySet();
        for(Integer key : keys){
            System.out.println(key + "===" + map.get(key));
        }
    }
}

在这里插入图片描述

        map.remove(100);

Hash

java hash算法实现原理

Class HashMap

    static final int hash(Object var0) {
        int var1;
        return var0 == null ? 0 : (var1 = var0.hashCode()) ^ var1 >>> 16;
    }

在这里插入图片描述

Hash:目的 把对象打撒,让其在空间内均匀分部
对旧的Hash打乱产生新的Hash

java hash算法实现原理

HashSet

线程不安全
存取速度快

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

public class SetDemo {
    public static void main(String[] args) {
        //hash:散列 去重
        Set<String> set = new HashSet<String>();
        set.add("tom");
        set.add("jerry");
        set.add("kingkong");
        set.add("haha");
        set.add("hehe");
        set.add("heihei");

        System.out.println(set.size());

        for(Iterator<String> it = set.iterator(); it.hasNext();){
            System.out.println(it.next());
        }
    }
}

在这里插入图片描述

元素重复的判断标准

p.hash == hash && ((k = p.key) == key || (key != null && key.equals(k)))
a.new hash不同,对象不同
b.new hash 相同,对象是同一对象
c.new hash 相同 对象不是同一个对象,则判断equals方法,则对象相同性判断和equals一致

接口中常用的类

Vector
线程安全,但速度慢,已经被ArrayList替代
ArrayList
线程不安全,查询素速度快
LinkedList
链表结构,增删速度快
取出List集合中的元素的方式:

get(int index):通过脚标获取元素
iterator():通过迭代方法获取迭代器对象

==========================
HashSet:通过HashCode()方法 == 和equals方法保证元素是否相同
TreeSet:通过compareTo或者compare方法中的 元素唯一,元素是二叉树的形放的
==========================

Map

  • map与collection在集合框架中属于并存
  • map存储是键值对
  • map存储元素使用put方法,Collection使用add方法
  • Map集合没有直接取出元素的方法.而是先转成set结合,再通过迭代获取
  • map集合中键要保证唯一性
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oifengo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值