字典哈希表中键值循环的数据(python字典列表 java哈希表集合)

Python找给定字典中键值循环的数据

代码

mapping={2: 4, 3: 9, 4: 4, 5: 8, 6: 2, 7: 5, 8: 11, 9: 1, 10: 10, 11: 5}
cycles = []

for key in mapping.keys():    #遍历每个key
    if(key==mapping.get(key)):
        single=[]
        single.append(key)
        cycles.append(single)   #键值相等,记录
    else:
        m=[key]  #记录闭环头键
        v=mapping.get(key)  #获取对应键的值
        while v in  mapping :      #如果值也是键,则继续遍历     
            k=mapping.get(v)      
            if k < key or  k==v or v in m:     #已遍历或键值相同
                break             
          
            m.append(v)                        
            if(k==key):    #形成闭环             
                m1=sorted(m)
                if m1 not in cycles:
                   cycles.append(m)          
                break               
            v=k  #遍历下一个
         

print('\nthe cycles given by the mapping are: ',cycles)

 运行结果

 

java找给定哈希表中键值循环的数据

代码

import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;

public class tess {
	public static void main(String[] args) {


//20 11		2: 4, 3: 9, 4: 4, 5: 8, 6: 2, 7: 5, 8: 11, 9: 1, 10: 10, 11: 5
		Map<Integer, Integer> map = new HashMap<Integer, Integer>();
		map.put(2, 4);
		map.put(3, 9);
		map.put(4, 4);
		map.put(5, 8);
		map.put(6, 2);
		map.put(7, 5);
		map.put(8, 11);
		map.put(9, 1);
		map.put(10, 10);
		map.put(11, 5);
		

		Set<Object> cycles = new HashSet<>();

		for (Integer key : map.keySet()) {
			if (key == map.get(key)) {
				Set<Integer> key1 = new HashSet<>();
				key1.add(key);
				cycles.add(key1);
			} else {
				SortedSet<Integer> m=new TreeSet<>();
				m.add(key);
				int v = map.get(key);

				while (map.get(v) != null) {
					int k = map.get(v);
					if (k < key || k == v || m.contains(v))
						break;
					m.add(v);

					if (k == key) {						
						if (!cycles.contains(m)) {
							cycles.add(m);
						}
						break;
					}
					v = k;
				}
			}
		}
		System.out.println(cycles);
	}
}

运行结果

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值