HashMap: 最常用的Map,它根据键的HashCode 值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null(多条会覆盖);允许多条记录的值为 Null。非同步的。HashMap是按照HashCode 排序的。
TreeMap: 能够把它保存的记录根据键(key)排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
TreeMap默认按key进行升序排序,如果想改变默认的顺序,可以使用比较器:- Map<String,String> map = new TreeMap<String,String>(new Comparator<String>(){
- public int compare(String obj1,String obj2){
- //降序排序
- return obj2.compareTo(obj1);
- }
- });
- map.put("month", "The month");
- map.put("bread", "The bread");
- map.put("attack", "The attack");
-
- Set<String> keySet = map.keySet();
- Iterator<String> iter = keySet.iterator();
- while(iter.hasNext()){
- String key = iter.next();
- System.out.println(key+":"+map.get(key));
- }
复制代码 如果类实现了comparable,表示强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。- public class User implements Comparable {
-
- private String id;
- private int age;
-
- public User(String id, int age) {
- this.id = id;
- this.age = age;
- }
-
- public int getAge() {
- return age;
- }
-
- public void setAge(int age) {
- this.age = age;
- }
-
- public String getId() {
- return id;
- }
-
- public void setId(String id) {
- this.id = id;
- }
-
- public int compareTo(Object o) {
- return this.age - ((User) o).getAge();
- }
-
- /**
- * 测试方法
- */
- public static void main(String[] args) {
- User[] users = new User[] { new User("a", 30), new User("b", 20) };
- Arrays.sort(users);
- for (int i = 0; i < users.length; i++) {
- User user = users[i];
- System.out.println(user.getId() + " " + user.getAge());
- }
- }
-
- }
复制代码 一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。 |