Java TreeMap自定义类定义一个排序规则和遍历方法

文章介绍了如何在Java中使用TreeMap进行自定义排序,通过实现Comparator接口创建降序排列的TreeMap实例。接着,文章详细列举了多种遍历Map的方法,包括使用entrySet、keySet、Iterator以及JDK8的forEach方法,并提供了Lambda表达式的示例代码。
摘要由CSDN通过智能技术生成

一、自定义类排序规则

我们都知道TreeMap中使用自定义类型,必须实现Comparable接口或实现一个自定义比较器Comparator
下文将讲述通过外部比较器的方式,使用类按照我们定义的规则排序,如下所示:

// 定义外部比较器comparator:

class descendComparator implements Comparator
{
    public int compare(Object o1,Object o2)
    {
        Integer i1=(Integer)o1;
        Integer i2=(Integer)o2;
        return -i1.compareTo(i2);
    }
}  



//TreeMap降序示例

TreeMap<Integer,Integer> map = new TreeMap<Integer,Integer>(new descendComparator());
map.put(8, 7);
map.put(10, 8);
map.put(5, 9);
         
Set<Integer> keys = map.keySet();
Iterator<Integer> iter = keys.iterator();
while(iter.hasNext())
{
        Integer k = iter.next();
        System.out.println(" "+k+":"+map.get(a));
}
------运行以上代码,将输出以下信息
10:8
8:7
5:9

二、map遍历方法

方式一:使用entrySet遍历(推荐使用)

遍历方式如下:这里可以选择使用for循环、增强for循环、do-while循环、lamdba表达式等方式对EntrySet实现遍历,这些本质上都是遍历entrySet的不同方式而已,都属于同一种方式遍历,这里只展示使用lamdba的遍历方式。

Set<Map.Entry<String,String>> set = map.entrySet();
set.stream().forEach(entry ->{
    System.out.println(entry.getKey()+":"+entry.getValue());
});

方式二:使用keySet遍历

这里也可以选择使用for循环、增强for循环、do-while循环、lamdba表达式等方式对KeySet实现遍历,这些本质上都是遍历keySet的同一种方式遍历,这里只展示使用lamdba的遍历方式。

Set<String> set2 = map.keySet();
set2.stream().forEach(key ->{
    System.out.println(key+":"+map.get(key));
});

方式三:使用entrySet+Iterator遍历

这种方式需要使用entrySet方法加上迭代器,代码如下:

Iterator<Map.Entry<String,String>> iterable =  map.entrySet().iterator();
while(iterable.hasNext()){
     Map.Entry<String,String> entry = iterable.next();
     System.out.println(entry.getKey()+":"+entry.getValue());
 }


方式四:使用keySet+Iterator遍历

这种方式需要使用keySet方法加上迭代器,代码如下:

Iterator<String> set3 = map.keySet().iterator();
while(set3.hasNext()){
    String key = set3.next();
    System.out.println(key+":"+map.get(key));
}


方式五:使用keySet、values方法遍历

这种方式是key和value分别遍历的形式,应用场景不多,但也是一种方式,且效率不高,不推荐使用

Set<String> set4 = map.keySet();
set4.stream().forEach(key ->{
    System.out.println(key);
});
Collection<String> values = map.values();
values.stream().forEach(value ->{
    System.out.println(value);
});


方式六:使用JDK8提供的forEach方法遍历(推荐使用)

forEach方法是JDK8提供的方法,是为了我们方便使用lamdba。这个方法使用lamdba来实现,是非常简洁的。需要传入一个BiConsumer<K,U>,k和u其实就是键和值,我们只需要传入然后操作即可,代码如下:

map.forEach((key,value) ->{
    System.out.println(key+":"+value);
});

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值