Java中的数组与集合类的使用,系列文章:
《Java中String、Array、List的相互转换工具类》
《Java8使用Stream流实现List列表的查询、统计、排序、分组》
《Java实现List集合的排序:Comparable接口、Comparator接口、stream().sorted()方法的使用》
Java 提供的 Map 接口常用的实现类有 HashMap 和 TreeMap。HashMap 类实现的 Map 集合对于添加和删除映射关系效率更高。HashMap 通过哈希码对其内部的映射关系进行快速查找;而 TreeMap 中的映射关系存在一定的顺序,如果希望 Map 集合中的对象也存在一定的顺序,应该使用 TreeMap 类实现 Map 集合。
下面将通过实例来实现 Map 接口中的 TreeMap 集合按照 Key 键的升序与降序,按照 Value 值的排序。
博文系列:
《Java实现List集合的排序:Comparable接口、Comparator接口、stream().sorted()方法的使用》
(1)创建用户信息实体类
/**
* 用户信息实体类
* @author pan_junbiao
**/
public class UserInfo
{
private int userId; //用户编号
private String userName; //用户名称
private int age; //年龄
private String blogInfo; //博客信息
//构造函数
public UserInfo(int userId, String userName, int age, String blogInfo)
{
this.userId = userId;
this.userName = userName;
this.age = age;
this.blogInfo = blogInfo;
}
public int getUserId()
{
return userId;
}
public void setUserId(int userId)
{
this.userId = userId;
}
public String getUserName()
{
return userName;
}
public void setUserName(String userName)
{
this.userName = userName;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
public String getBlogInfo()
{
return blogInfo;
}
public void setBlogInfo(String blogInfo)
{
this.blogInfo = blogInfo;
}
@Override
public String toString()
{
return "用户编号:" + this.userId + " 用户名称:" + this.userName
+ " 年龄:" + this.age + " 博客信息:" + this.blogInfo;
}
}
(2)编写获取用户信息列表方法
/**
* 获取用户信息列表
* @author pan_junbiao
*/
private Map<Integer,UserInfo> getUserMap()
{
Map<Integer,UserInfo> userMap = new HashMap<>();
//创建用户信息
UserInfo user1 = new UserInfo(1,"pan_junbiao的博客", 25, "您好,欢迎访问 pan_junbiao的博客");
UserInfo user2 = new UserInfo(2,"pan_junbiao的博客", 18, "https://blog.csdn.net/pan_junbiao");
UserInfo user3 = new UserInfo(3,"pan_junbiao的博客", 35, "您好,欢迎访问 pan_junbiao的博客");
UserInfo user4 = new UserInfo(4,"pan_junbiao的博客", 32, "https://blog.csdn.net/pan_junbiao");
//将用户信息加入Map(故意打乱顺序)
userMap.put(user4.getUserId(),user4);
userMap.put(user2.getUserId(),user2);
userMap.put(user3.getUserId(),user3);
userMap.put(user1.getUserId(),user1);
return userMap;
}
1、TreeMap集合实现Key键的升序
/**
* TreeMap集合,实现Key升序
* @author pan_junbiao
*/
@Test
public void testTreeMapAsc()
{
//创建 TreeMap 集合
TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<>();
//获取用户信息列表
userTreeMap.putAll(getUserMap());
//遍历用户信息列表
System.out.println("TreeMap集合,实现Key升序:");
for(Iterator<Integer> it = userTreeMap.keySet().iterator(); it.hasNext();)
{
int key = it.next();
UserInfo value = userTreeMap.get(key);
System.out.println("Key键:" + key);
System.out.println("Value值:" + value);
}
}
执行结果:
2、 TreeMap集合实现Key键的降序
/**
* TreeMap集合,实现Key降序
* @author pan_junbiao
*/
@Test
public void testTreeMapDesc()
{
//创建 TreeMap 集合,设置Key降序方法一:
//TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<>(Collections.reverseOrder());
//创建 TreeMap 集合,设置Key降序方法二:
TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<Integer,UserInfo>(new Comparator<Integer>()
{
public int compare(Integer key1,Integer key2)
{
//降序排序
return key2.compareTo(key1);
}
});
//获取用户信息列表
userTreeMap.putAll(getUserMap());
//遍历用户信息列表
System.out.println("TreeMap集合,实现Key降序:");
for(Iterator<Integer> it = userTreeMap.keySet().iterator(); it.hasNext();)
{
int key = it.next();
UserInfo value = userTreeMap.get(key);
System.out.println("Key键:" + key);
System.out.println("Value值:" + value);
}
}
执行结果:
3、TreeMap集合实现Value值的排序
【示例】按照用户年龄降序排序。
/**
* TreeMap集合,实现Value排序
* 按照用户年龄降序
* @author pan_junbiao
*/
@Test
public void testTreeMapValue()
{
//创建 TreeMap 集合
TreeMap<Integer,UserInfo> userTreeMap = new TreeMap<>();
//获取用户信息列表
userTreeMap.putAll(getUserMap());
//将Map转换成List
List<Map.Entry<Integer,UserInfo>> list = new ArrayList<Map.Entry<Integer,UserInfo>>(userTreeMap.entrySet());
// 通过比较器来实现排序
Collections.sort(list, new Comparator<Map.Entry<Integer,UserInfo>>()
{
@Override
public int compare(Map.Entry<Integer,UserInfo> user1, Map.Entry<Integer,UserInfo> user2)
{
Integer age1 = user1.getValue().getAge();
Integer age2 = user2.getValue().getAge();
//按照用户年龄降序
return age2.compareTo(age1);
}
});
//遍历用户信息列表
System.out.println("TreeMap集合,实现Value排序,按照用户年龄降序:");
for (Map.Entry<Integer,UserInfo> mapping : list)
{
System.out.println("Key键:" + mapping.getKey());
System.out.println("Value值:" + mapping.getValue());
}
}
执行结果: