//键 值
//s001--------张三
//s002--------李四
//s003--------王五
Java针对这种键值映射关系的数据,给我们提供了另外一种容器Map,用来存储这种键值映射关系的数据
Map接口概述:
用HashMap作为实现类说明
增加功能
void put(K key,V value)
删除功能
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
判断功能
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
获取功能
1.Set
2.V get(Object key):根据键获取值
3.Set< k > keySet():获取集合中所有键的集合 键唯一,所以用Set集合
4.Collection values():获取集合中所有值的集合 值不一定唯一,有可能有重复,所以用Collection集合
长度功能
int size():返回集合中的键值对的对数
方法一::键找值
Set<Integer> integers = hashMap.keySet(); //获取所有键的集合
for (Integer integer : integers) {
System.out.println(integer);
String s = hashMap.get(integer);
System.out.println(s);
}
Collection<String> values = hashMap.values(); //获取所有值的集合
for (String value : values) {
System.out.println(value);
}
System.out.println("*************************");
方法二:键值对
Set<Map.Entry<Integer, String>> entries = hashMap.entrySet();
for (Map.Entry<Integer, String> entry : entries) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
数据结构是哈希表,键唯一且无序
注:键唯一,靠键重写equals方法来保证;合理的重写hashCode方法,可以元素减少碰撞
Hashtable和HashMap 的区别:
底层的数据结构是链表和哈希表,元素唯一且有序
元素的有序性由链表数据结构保证,唯一性由 哈希表数据结构保证
键的数据结构是红黑树,可保证键的唯一且有序 ,线程不安全,效率高,TreeMap 键不允许插入null
特点:排序分为自然排序和比较器排序
空参构造:自然排序
TreeMap<Integer, String> treeMap = new TreeMap<>();
treeMap.put(14,"abc");
treeMap.put(16, "abc");
treeMap.put(155, "abc");
treeMap.put(11, "abc");
treeMap.put(12, "abc");
System.out.println(treeMap);
System.out.println("***********************");
有参构造,比较器排序
//有参构造
TreeMap<Student, Integer> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student s1, Student s2) {
int num1=s1.getAge()-s2.getAge();
int num2=num1==0? s1.getName().compareTo(s2.getName()) :num1;
return num2;
}
});
map.put(new Student("tom",28),19);
map.put(new Student("lucy",18),15);
map.put(new Student("Mark",30),18);
map.put(new Student("mike",28),15);
map.put(new Student("tom",28),89);
Set<Map.Entry<Student, Integer>> entries = map.entrySet();
for (Map.Entry<Student, Integer> entry : entries) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
String s="aababcabcdabcde";
TreeMap<Character, Integer> treeMap = new TreeMap<>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if(!treeMap.containsKey(c)){
treeMap.put(c,1);
}else{
Integer integer = treeMap.get(c);
integer++;
treeMap.put(c,integer);
}
}
StringBuffer sb = new StringBuffer();
Set<Map.Entry<Character, Integer>> entries = treeMap.entrySet();
for (Map.Entry<Character, Integer> entry : entries) {
sb.append(entry.getKey()).append("(").append(entry.getValue()).append(") ");
}
System.out.println(sb);