Map

Map中keySet()的使用:

Map<String,Integer> map = new HashMap<String,Intrger>();
map.put("a","1");
map.put("b","2");
map.put("c","3");
set<String> ks = map.keySet();
for(String s:ks){
    System.out.println(s);

HashMap中keySet()方法:

public Set<K> keySet() {
    Set<K> ks = keySet;
	return (ks != null ? ks : (keySet = new keySet()));
	而且keySet成员初始为null,且没有在构造函数中初始化过
	所以初次调用keySet()方法时会new keySet(),而keySet()是一个内部类

【Map接口】
继承关系

底层数据结构:哈希表

哈希表:通过关键码来映射到值的一个数据结构

哈希函数:键与值映射的一个映射关系

哈希函数:
1、直接寻址方 f(x) = kx+b(k、b都是常数) 查询添加都应对应相同的哈希函数,插入的顺序和存放的顺序不一致,键无序
2、除留余数法 f(x) = x % k (k <= m)[m为存储位置长度]

哈希冲突:不同元素通过同一个哈希函数放在了相同的位置
m!=n ==> f(m) = f(n)

哈希冲突的解决:
1、链地址法 每一个索引位置存储的数据以链表的形式链接起来,当访问查找数据时,对相应索引位置的链表进行遍历。
2、探测发 (线性探测 随机探测) 通过哈希函数,找到关键字KEY在线性序列中的位置
对map集合的遍历:3种遍历方法

//通过键值对遍历 void clean()
        //先将HashMap实例转化为set实例(类型map.entry())
        
		Iterator<Map.Entry<String, String>> iterator = hashMap.entrySet().iterator();
            while(iterator.hasNext()) {
                Map.Entry<String, String> next = iterator.next();
                String key = next.getKey();
                String value = next.getValue();
                System.out.print(key + ":" + value + " ");
            }
            System.out.println("============");

            //通过键来对Map进行遍历
            //仅仅对键进行访问
           
		   Iterator<String> iterator1 = hashMap.keySet().iterator();
            while(iterator1.hasNext()) {
                String next = iterator1.next();
                System.out.println(next+" ");
            }
            System.out.println("==============");

            //通过值来对Map集合进行遍历
            
			Iterator<String> iterator2 = hashMap.values().iterator();
            while(iterator2.hasNext()) {
                String next = iterator2.next();
                System.out.println(next+" ");
            }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值