Android Map数据结构全面总结分析
Map是Android开发中常用的集合类之一,它可以存储键值对,也被称为关联数组或字典。在这篇文章中,我们将深入了解Android Map数据结构,包括Map的基本用法、Map中常用的API以及一些示例说明。
基本用法
Map是一个接口,它的实现包括HashMap、TreeMap、LinkedHashMap等。以下是Map接口中最常用的方法:
put(Key key, Value value)
这个方法可以将key-value的键值对存储在Map中。
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("orange", 3);
get(Key key)
这个方法可以根据给定的key获取对应的value。
int value = map.get("apple"); // 返回1
remove(Key key)
这个方法可以从Map中删除指定的key。
map.remove("banana");
containsKey(Key key)
这个方法可以检测Map中是否包含特定的key。
boolean contains = map.containsKey("orange"); // 返回true
keySet()
这个方法返回一个Set对象,其中包含Map中的所有键。
Set<String> keys = map.keySet();
Map中常用的API
HashMap
HashMap是基于哈希表的实现,它允许存储null键和null值,支持O(1)的常数时间复杂度查询、插入和删除操作,但它不是有序的。
Map<String, Integer> map = new HashMap<>();
TreeMap
TreeMap是基于红黑树的实现,它默认按键排序,支持O(log n)的时间复杂度查询、插入和删除操作。
Map<String, Integer> map = new TreeMap<>();
LinkedHashMap
LinkedHashMap是HashMap的一种扩展,它还维护了一个按插入顺序排列的双向链表,因此遍历LinkedHashMap时可以按照插入顺序访问元素。
Map<String, Integer> map = new LinkedHashMap<>();
示例说明
示例1:统计单词出现次数
假设我们有一个字符串,现在需要统计每个单词出现的次数,我们可以使用HashMap来解决这个问题。
String str = "Hello world hello world java android Java android";
String[] words = str.split("\\s+");
Map<String, Integer> map = new HashMap<>();
for (String word : words) {
map.put(word, map.getOrDefault(word, 0) + 1);
}
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
}
输出:
world: 2
Hello: 1
android: 2
java: 2
hello: 1
示例2:按分数排名
假设我们有一组学生,每个学生有一个姓名和分数,现在需要按照分数从高到低的顺序输出学生的姓名和分数。
class Student {
private String name;
private int score;
public Student(String name, int score) {
this.name = name;
this.score = score;
}
public String getName() {
return name;
}
public int getScore() {
return score;
}
}
List<Student> students = new ArrayList<>();
students.add(new Student("Tom", 89));
students.add(new Student("Jerry", 91));
students.add(new Student("Alice", 87));
students.add(new Student("Bob", 93));
Map<Student, Integer> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
return Integer.compare(o2.getScore(), o1.getScore()); // 从高到低排序
}
});
for (Student student : students) {
map.put(student, student.getScore());
}
for (Map.Entry<Student, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey().getName() + ": " + entry.getValue());
}
输出:
Bob: 93
Jerry: 91
Tom: 89
Alice: 87
以上是Android Map数据结构的全面总结分析,希望本文能够对大家有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Map数据结构全面总结分析 - Python技术站