HashMap

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HashMap相关的知识,希望对你有一定的参考价值。

Map集合
-------------
1、Map与Collection不同
2、Map集合存储于取出元素的方式
3、Map集合的特点
4、Map集合中常用类

Map与Collection
1、Map与Collection在集合框架中属并列存在
2、Map存储的是键值对
3、Map存储元素使用put方法,Colletion使用add方法
4、Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
5、Map集合中键要保证唯一性

hashMap的每个元素叫条目
所有的kev位于set当中

1、Hashtable:线程安全,速度慢,不允许存放null键,null值,已被HashMap替代
2、HashMap:线程不安全,速度快,允许存放null键,null值
3、TreeMap: 对键进行排序,排序原理与TreeSet相同
----------------------

拿出一个Map得到所有的kev:
Set set=map.keySet();是Map集合的方法
map.get(kev) //通过kev获得value

//Map代码案例参考:

public static void main(String[] args) {
  Map<String,Dog> map = new HashMap<String, Dog>();
  Dog dog = new Dog ("" , 12, "");
  map.put(null, null);
  map.put("dog-1000-1981", dog);
  map.put("dog-1000-1982", dog);
  map.put("dog-1000-1983", new Dog("",12,""));
  map.put("dog-1000-1984",new Dog("",12,""));
  map.put("dog-1000-1985",new Dog("",12,""));
  System.out.println(map.size());
  
  Set<Entry<String,Dog>> entries = map.entrySet();
  //循环map的所有的entry
  for(Entry<String,Dog> entry : entries){
    String key = entry.getKey();
    Dog d = entry.getValue();
    System.out.println(key + ":" + d.toString());
  }
  //map删除
  Dog d2 = map.remove("dog-1000-1984");
  System.out.println("删除了" + d2);
  
  d2 = map.remove("dog -1000-1984");
  System.out.println("删除了" + d2);
  
  //通过key遍历map
  Set<String> keySet = map.keySet();
  for(String str : keySet){
   Dog value =map.get(str);  
  }
  
 }

}


------------------------

TreeSet
-----------------------------
1、使用比较方法判断对象是否重复
2、比较方法实现有两种
 a、自定义Comparator比较器,和TreeeSet关联
 b、让javaBean实现Comparable接口,实现CompareTo()方法
3、TreeSet可以容纳null元素
4、TreeSet可以使用降序排序,通过descendingIterator()方法得到降序迭代器实现
5、TreeSet默认升序排列
6、TreeSet是依靠TreeMap来实现的。
TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。
我们可以在构造TreeSet对象时,传递实现Comparator接口的比较器对象。
 
 

-------------------

public class TeerSet {
 private static final Comparator<? super Person> comp = null;
 public static void main(String[] args) {
  /*
   * 自定义比较器,实现的是对象大小比较
   * 按照年龄判断大小情况
   */
  Comparable<Person> comp =new Comparable<Person>() {
   public int compareTo(Person o1,Person o2) {
    //o1==null
    if(o1==null){
     if(o2==null){      
      return 0;
     }
     else{
      return -1;
     }
    }
    //o1!=null
    else{
     if(o2==null){
      return 1;
     }
     else{
      return o1.getAge()-o2.getAge();
     }
    }
   }

   @Override
   public int compareTo(Person o) {
    // TODO Auto-generated method stub
    return 0;
   };
  };
  
 }
  //通过比较器构造TreeSet集合
 TreeSet<Person> tr=new TreeSet<Person> (comp);
 tr.add(null);
 tr.add(new Person("p1",10));
 tr.add(new Person("p2",20));
 tr.add(new Person("p3",30));
 tr.add(new Person("p4",40));
 
 System.out.println(tr.size());
 for(Iterator<Person> it=tr.descendingIterator();it.hadsNext();){
  Person p=it.next();
  System.out.println(p!=null ?p.getName():"Nobody");
 }
 /*
  * 使用comprable接口实现对象大小的比较
  *
  */
 TreeSet<Dog> trr=new TreeSet<Dog>();
 trr.add(new Dog("black",20,"金巴"));
 trr.add(new Dog("black",12,"金巴"));
 trr.add(new Dog("white",20,"金巴"));
 trr.add(new Dog("black",20,"藏獒"));
 trr.add(new Dog("yellow",20,"藏獒"));
 
 System.out.println(trr.szie());
 //进行拍排序(升序输出),用遍历迭代器的方法(降序的话把trr.iterator改成trr.descendingIterator就ok)
 for(Iterator<Dog> it = trr.iterator();it.hasNext(){
  System.out.println(it.next());//调用了toString方法,it.next返回的是对象
 }

 }
}

以上是关于HashMap的主要内容,如果未能解决你的问题,请参考以下文章

HashMap学习

MAP

HashMap

HashMap问答

Map的实现

HashMapConcurrentHashMapHashTable