集合框架整理
TreeMap和TreeSet的底层由于使用的是二叉树,所以不能保证是存取有序的,但是他们却有着自然顺序,而且这种自然顺序是可以进行自定义的,通过实现比较器接口即可达到目的,如根据我们指定的一个属性值进行排序
案例如下
实体类
class User { String name; int age; public User(String name, int age) { this.name = name; this.age = age; } }
测试方法
@org.junit.Test public void test1() { User user1 = new User("小o",45); User user2 = new User("小a",456); User user3 = new User("小b",5); User user4 = new User("小c",48); User user5 = new User("小d",8695); User user6 = new User("小e",475); User user7 = new User("小f",546); User user8 = new User("小g",405); TreeMap<User,String> treeMap = new TreeMap(new Comparator<User>() { @Override public int compare(User user1, User user2) { if (user1.age > user2.age) { return 1; } else if (user1.age == user2.age) { return 0; } else { return -1; } } }); treeMap.put(user1,"1"); treeMap.put(user2,"2"); treeMap.put(user3,"3"); treeMap.put(user4,"4"); treeMap.put(user5,"5"); treeMap.put(user6,"6"); treeMap.put(user7,"7"); Set<User> users = treeMap.keySet(); for (User user : users) { System.out.println(user.age); } }
输出结果
5 45 48 456 475 546 8695
在比较器中的compare中,第二个参数是当前要插入的结点点,第一个参数是当前树要插入结点的上一个结点,返回负数则表示当前结点放在树的左子树中,返回0或负数则表示相等放在右子树中(黑体部分是回忆的,以后如果有空再考证,如果有大佬知道留言,感谢)
根据上方案例,也可对TreeSet进行排序