首页 > 代码库 > Map--HashMap TreeMap

Map--HashMap TreeMap

Map:

a)     是一个单独的接口,不属于Collection,属于集合,存放的是键值对

b)     键不能重复,如果重复,后面添加的会覆盖前面添加的

c)     Map.put(k, v)返回的是上一次添加的相同键的值(即被覆盖的值)

 

 1 Map遍历:

a)     Set<K> keyset()

                得到所有键的集合存储到一个Set中,并返回一个Set集合,因为Set有迭代器,所以使用迭代器迭代,每次迭代出一个键,再根据键获取值

Set<String> keys = map.keySet();  
Iterator<String> ite = keys.iterator();  
while(ite.hasNext())  
{  
     String key = ite.next();  
     String value = map.get(key);  
     System.out.println(key + "=" + value);  
}  

b)     Set<Map.Entry<K, V>> entrySet()

                i. Map.Entry<K, V>映射关系类型

               ii. Entry是定义在Map中的一个静态接口,有了集合中的键值对,才会存在映射关系,所以映射关系是对集合内部事物的描述,所以定义在Map内部

              iii. 得到每个键值对对应的映射关系类型的值,存到Set集合汇总,并返回该集合,因为Set有迭代器,每次迭代出来的是一个映射类型的值,从这个映射关系类型的值中,即可以得到键,也可以得到值

Set<Map.Entry<String, String>> entry = map.entrySet();  

Iterator<Map.Entry<String, String>> ite = keys.iterator();  

while(ite.hasNext())  

{  

     Map.Entry<String, String> en = ite.next();  
     String key = en.getKey();  
     String value = en.getValue();  
     System.out.println(key + "=" + value);  
}  

 

 

 2 HashMap:

a)     底层使用的数据结构是hash结构

b)     线程不安全

c)     如何保证键不能重复(和HashSet相同)

                i.  int hashCode()

               ii.  Boolean equals(Object obj)

public int hashCode()  
{  
      return name.hashCode()+age*33;  
}  
 
public boolean equals(Object obj)  
{  
     if(!obj instanceof Student)  
         throw new ClassCastException("类型转换异常");  

     Student stu = (Student)obj; 
 
     return this.name.equals(stu.name) && this.age==stu.age;  
}      

 

 

 3 TreeMap:

a)     底层使用的数据结构是二叉树,可以排序

b)     线程不安全

c)     根据什么排序?(和TreeSetSet相同)

                i.   根据键排序

               ii.   实现Comparable的compareTo()方法

public int compareTo(Student stu)  
{  
       int num = this.name.compareTo(stu.name);  
      return num==0 ? this.age-stu.age : num;  
}  

                       i.    自定义一个排序方式

class ComByAge implements Compartor<Student>  
{  
      int num = s1.getAge() - s2.getAge();  

      return num==0 ? s1.getName().compareTo(s2.getName()) : num;  

}  

 

 

Map--HashMap TreeMap