Map 不是集合,是一个单独的接口,但是HashMap 底层是散列表,也就是Map
HashSet底层是散列表。
散列表可以看成是一个数组数组中每个值都是链表 数组会先计算哈希扣得算法。
set 和Map没有修改
set 只要新增和删除
散列表:存的是Kv 结构
哈希MAP底层实现:
- 先调用hashCode方法计算hash值
- 放在散列表数组对应的位置
- 当再次存放值时,先调用hashCode计算hash值,如果和之前的hash值相同,
- 再去用equals()方法比较这两个元素是否真的相等,
- 相同不添加,不同则在该位置生成个链表,并存储在链表上。
- 当该链表存放个数超过8,则该链表自动转化成红黑树。
Map
映射关系 key value
Map a =new hashmap(); 创建Map
Map 的常用方法
Map. put() 添加元素。
注意: 如果放入相同的Key值时候,Key不变value值覆盖。
containskey 是否包含K值
System.out.println(map.containsKey("包含的对象")); 是否包含 K值
Values 所有的v值
Collection<Integer>values map.values(); 所有的Value值
for (Integer eve:values){
System.out.println(eve);
}
setKey 获取所有的Key
Set<string>strings map.keySet();
for (String eve:strings){
System.out.println("key:"+eve+"=====value:"+map.get(eve));
map.entrySet() 获取所有的entry 对象, 包含每个key和对应的valve值
Set<Map.Entry<string,Integer>>entries map.entrySet();
for (Map.Entry<String,Integer>eve:entries){
System.out.println(eve.getKey()+"=="+eve.getValue())
Entry 相当一个实体类,
Map 转成list
Map转List
Set<Map.Entry<Integer,String>>entries map.entrySet();
List<Map.Entry<Integer,string>>list=new ArrayList<>(entries);
排序
public class Map_02 {
// 2. 给出一个字符串,只包含小写字母“saefgwsadfwebatgfnlswepkjibdnj”
// 计算字符串中每个字符出现的个数,并以value进行降序排序,加入value相等则以字符升序排序
// 最终输出格式为z(5)a(3)b(3)c(2)d(1)
// 1既然是字符和次数肯定是键值对存储,key表示字符,value表示个数
// 2遍历字符串,把每个字符取出
// 3判断map中是否包含这个key,如果包含value+1 ,不包含,添加进去value默认为1
// 4通过entrySet转换为set
// 5通过new ArrayList(set)转换为list
// 6通过collections.sort()编写匿名内部类进行排序
public static void main(String[] args) {
Map <Character,Integer> map= new HashMap<>();
String string="saefgwsadfwebatgfnlswepkjibdnj";
char[] chars = string.toCharArray();
for (char eve:chars) {
if (map.containsKey(eve)){
map.put(eve,map.get(eve) + 1);
}else
{
map.put(eve,1);
}
} Set<Map.Entry<Character, Integer>> entries = map.entrySet();
List< Map.Entry<Character, Integer>>list=new ArrayList<>(entries);
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1, Map.Entry<Character, Integer> o2) {
return o2.getValue()- o1.getValue();
}
});
for (Map.Entry<Character, Integer> entry : entries) {
System.out.println("字母"+entry.getKey()+"出现的次数"+entry.getValue()+"次");
}
System.out.println(list);
}
}
TreeMap
排序都是排的Key值。
Properties
Set 放kv对
Get 获取kv值 , 和一个默认设置
获取默认值
System.out.println(properties.getProperty(key:"ewtew",defaultValue:"12345678"))
存数据就用 Hash map 想排序就用Treemap