使用TreeMap简单地HashMap的key进行排序,使用ArrayList对HashMap的value排序。
分别使用Comparator接口和Comparable接口实现key的排序。
package com.inspiration.examples.collection.sort;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.Map.Entry;
public class SortExample {
public static void listSort() {
List<Student> stuList = new ArrayList<Student>();
Student s1 = new Student(1, "wang");
Student s2 = new Student(2, "li");
stuList.add(s1);
stuList.add(s2);
Collections.sort(stuList);
for (Student stu : stuList) {
System.out.println(stu);
}
// map sort which implements the Comparable Interface
public static void mapKeySetSort() {
Map<Student, Integer> hashMap = new HashMap<Student, Integer>();
for (int i = 0; i < 100; i++) {
Student stu = new Student(i, "wang" + i);
hashMap.put(stu, i);
}
/*
* System.out.println("the hashMap out put----"); Set<Student>
* set=hashMap.keySet(); for(Student stu:set){ System.out.println(stu);
* }
*/
System.out.println("the treeMap out put----");
TreeMap<Student, Integer> treeMap = new TreeMap<Student, Integer>(
hashMap);
Set<Student> set2 = treeMap.keySet();
for (Student stu : set2) {
System.out.println(stu);
}
// map sort which implements the Comparator Interface
public static void mapKeySetSort2() {
Map<Teacher, Integer> hashMap = new HashMap<Teacher, Integer>();
for (int i = 0; i < 100; i++) {
Teacher tea = new Teacher(i, "wang" + i);
hashMap.put(tea, i);
}
/*
* System.out.println("the hashMap out put----"); Set<Teacher>
* set=hashMap.keySet(); for(Teacher tea:set){ System.out.println(tea);
* }
*/
System.out.println("the treeMap out put----");
TreeMap<Teacher, Integer> treeMap = new TreeMap<Teacher, Integer>(
new TeacherComparator());
treeMap.putAll(hashMap);
Set<Teacher> set2 = treeMap.keySet();
for (Teacher tea : set2) {
System.out.println(tea);
}
public static void sortValues() {
Map<String, Integer> keyfreqs = new HashMap<String, Integer>();
keyfreqs.put("w", 1);
keyfreqs.put("b", 2);
ArrayList<Entry<String, Integer>> l = new ArrayList<Entry<String, Integer>>(
keyfreqs.entrySet());
Collections.sort(l, new Comparator<Map.Entry<String, Integer>>() {
public int compare(Map.Entry<String, Integer> o1,
Map.Entry<String, Integer> o2) {
return (o1.getValue() - o2.getValue());
}
});
for (Entry<String, Integer> e : l) {
System.out.println(e.getKey() + "::::" + e.getValue());
}
public static void main(String[] args) {
// listSort();
// System.exit(1);
// mapSort();
// mapKeySetSort2();
}
package com.inspiration.examples.collection.sort;
public class Student implements Comparable<Student>{
private int id;
private String name;
public Student(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int compareTo(Student o) {
// return o.id-this.id;
return this.id-o.id;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Student other = (Student) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
package com.inspiration.examples.collection.sort;
public class Teacher {
private int id;
private String name;
public Teacher(int id, String name) {
super();
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + id;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Teacher other = (Teacher) obj;
if (id != other.id)
return false;
return true;
}
@Override
public String toString() {
return "Teacher [id=" + id + ", name=" + name + "]";
}
package com.inspiration.examples.collection.sort;
import java.util.Comparator;
public class TeacherComparator implements Comparator<Teacher>{
@Override
public int compare(Teacher o1, Teacher o2) {
return o1.getId()-o2.getId();
}
TreeMap本身使用红黑树算法实现。
相关推荐
TreeMap是Java集合框架中的一种Map实现,它实现了SortedMap接口,能够根据键的自然顺序或自定义的比较器对键进行排序。在本例中,我们使用TreeMap来统计单词出现的次数,并按照字母表顺序输出。 知识点2:Java比较...
在Java编程语言中,`TreeMap` 和 `TreeSet` 是两种基于红黑树数据结构实现的集合类,它们都提供了自动排序的功能。本文将详细探讨 `TreeMap` 和 `TreeSet` 的排序机制以及如何自定义排序规则。 首先,`TreeMap` 是...
1. **插入元素**:使用`put()`方法将键值对插入到`TreeMap`中。例如,`map.put(key, value)`会将`key`与`value`关联。 2. **获取元素**:使用`get()`方法通过键来获取对应的值,如`map.get(key)`。 3. **删除元素*...
本篇文章将深入讲解Map的使用实例,包括插入、读取和遍历操作,以及HashMap、LinkedHashMap和TreeMap这三种常见的Map实现类之间的区别。 首先,让我们看看如何创建和插入键值对。在Java中,我们通常通过调用`put()`...
本文将详细介绍Java中Map集合的用法。 **1. Map接口概述** Map接口位于`java.util`包下,它定义了一些基本的操作方法,如put、get、remove等。Map集合中常用的实现类有HashMap、TreeMap、LinkedHashMap等,它们各自...
本文将深入探讨如何在Java中使用`keySet`方法来遍历`Map`集合,以及相关的知识点。 ### 一、Java Map接口简介 `Map`接口是Java集合框架的一部分,它提供了存储和检索唯一键对象及其对应的值对象的方法。一个`Map`...
使用`put()`方法将键值对放入Map中,如: ```java map.put("sa", "dd"); ``` 3. **获取值**: 通过键来获取对应的值,可以使用`get()`方法: ```java String str = map.get("sa").toString(); ``` 4. **...
本篇文章将详细介绍几种常用的遍历`Map`的方法,包括使用传统迭代器(Iterator)、增强型for循环(For-Each循环)以及通过键集(Key Set)进行遍历。 #### 一、使用Iterator遍历Map 1. **通过`entrySet()`获取迭代...
Java提供了多种Map实现,如HashMap、TreeMap、LinkedHashMap等,每种实现有不同的性能特性和排序规则。HashMap是无序的,基于哈希表实现;TreeMap是有序的,基于红黑树实现;LinkedHashMap保持插入顺序或者访问顺序...
在Java中,"javamap"和"地图_java"可能是指使用Map类来模拟现实世界中的地理地图,例如通过键表示地理位置,值表示该地点的信息。这涉及到自定义类作为键值对中的元素类型,以及如何设计键值对以适应特定需求的问题...
1. 是否需要线程安全性:如果在多线程环境中使用,可以选择HashTable或ConcurrentHashMap。 2. 数据排序:TreeMap提供了自然排序或自定义排序,而HashMap和LinkedHashMap则是无序的。 3. 访问效率:HashMap通常具有...
### Java中的Map接口详解 #### 一、Map接口概述 Map接口是Java集合框架中的一个核心接口,它并不属于`Collection`接口体系。Map的主要功能是存储键值对(key-value pairs),其中键(key)不允许重复,而值(value...
总的来说,Java中对Map的Key进行排序通常有两种方式:一是使用支持排序的Map实现类如TreeMap,二是将HashMap的Key集合转换为List或TreeSet,然后进行排序。通过这种方式,我们可以灵活地根据需求调整Map中元素的顺序...
在选择Map的具体实现时,Java提供了一些内置的类,如HashMap、TreeMap、LinkedHashMap等,它们各自有不同的特性和使用场景。HashMap提供快速的随机访问,TreeMap则按照键的自然顺序或自定义比较器进行排序,而...
Map接口是Java Collections Framework的重要组成部分,提供了多种实现类,如HashMap、TreeMap、LinkedHashMap等,每种实现类都有其特定的特性和使用场景。 HashMap是最常用的Map实现,它不保证元素的顺序,允许null...
Map 集合是 key-value 的形式存放的,可以使用 `put()` 方法将键值对添加到 Map 中。例如:`map.put("sa", "dd");` 3. 从 Map 中取值 可以使用 `get()` 方法从 Map 中获取指定键对应的值。例如:`String str = map...
本文将详细介绍Java中Map集合的三种遍历方法及其应用场景、优缺点等,帮助读者更好地理解和掌握Map的使用技巧。 ### 一、Map简介 `Map`接口是Java集合框架的一部分,它提供了基于键值对的数据存储方式。常见的实现...
以上就是关于Java中Map的使用,特别是HashMap和TreeMap的基本操作。理解这些概念和方法对于处理键值对的数据结构至关重要。通过实践这些示例,你可以更熟练地在Java项目中运用Map接口及其实现类。