黑马程序员_java集合框架下

来源:互联网 发布:我知女人心插曲 编辑:程序博客网 时间:2024/05/23 19:11

------- android培训java培训java博客、java学习型技术博客、期待与您交流! ---------- 

一、Map集合:该集合存储键值对。一对一往里存,而且要保证键的唯一性。

Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMapHashtableLinkedHashMapTreeMap.

Map主要用于存储键值对,根据键得到值,因此不允许键重复,但允许值重复。

HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为NullHashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用CollectionssynchronizedMap方法使HashMap具有同步的能力。

HashtableHashMap类似,不同的是,它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtable在写入时会比较慢。

LinkedHashMap保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。在遍历时会比HashMap慢。

TreeMap能够吧保存的数据根据键排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。

添加。

   put(K key,V value)//添加键值对

   putAll(Map<? Extends K,?extends V> m); //从指定映射中将所有映射关系复制到此映射中

   

1.删除

   clear()//从集合中移除所有键值对

   remove(Object key)  //移除存在的键的映射关系 

2.判断

   containsValue(Object value);//存在对应的值,返回true

   containsKey(Object key);//存在对应的键值,返回true

   isEmpty();  //如果集合为空,返回true 

3.获取

       get(Object key)  //根据键,得到对应的值

       size()//集合映射数量,或大小

       values()//返回此集合中所有的值的Collection<V>

       entrySet()//返回此包含映射关系的Set<Map.Entry<K,V>>视图

       keySet()//返回此映射包含键的Set<K>

Map实现类

   |--Hashtable:底层是哈希表数据结构,不可以存入nullnull值,该集合是线程同步的。

                  Jdk1.0效率低

   |--HashMap:底层是哈希表数据结构,允许使用null值和null键,该集合是不同步的。Jdk1.2效率高。

   |--TreeMap :底层是二叉树数据结构,线程不同步。可以用于给map集合中的键进行排序。

set很像,set底层就是使用了map集合。

Map集合有两种取出方式:

1、Set<k> keySet:将map中所有元素的键存入到Set集合。因为Set具备迭代器。

   所以可以利用迭代方式取出所有的键,在根据get方法。获取每个键对应的值。

   原理:将map集合转成set集合。再通过迭代器取出。

2、Set<Map.Entry<k,v>> entrySet:map集合中的映射关系存入到了set集合中,而这个关系的

   数据类型就是:Map.Entry 

   Map.Entry  :其实Entry也是一个接口,它是Map接口中的一个内部接口。

Map<String,String> map=new HashMap<String,String>();

//添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应的值。

//put方法返回被覆盖的值。

System.out.print(map.put("22""zhangsan"));//null

System.out.print(map.put("22""lishi"));//zhangsan

       向集合存入值

      map.put("03""haha");

       map.put("04"null);

       map.put(nullnull);

       map.containsKey("04");//返回true

       map.containsValue("haha")//返回true

   //获取map集合中的所有元素

Collection<String> co=map.values();

System.out.print(co);

练习; import java.util.HashMap;import java.util.Iterator;import java.util.Map;import java.util.Set; /*每一个学生都有对应的归属地,学生Student,地址String。 * 学生属性:姓名,年龄。 * 注意,姓名和年龄相同的视为同一个学生。 * 保证学生的唯一性。 * *///1、描述学生//2、定义map容器,将学生作为键,地址作为值,存入集合//3、获取map集合中的元素。class Student1 implements Comparable<Student1>{    private String name;    privateintage;    Student1(String name,int age){         this.name=name;         this.age=age;    }    //有可能存储到二叉树,必须让学生具备自认顺序    @Override    publicint compareTo(Student1 s){         int num=new Integer(this.age).compareTo(new Integer(s.age));         if(num==0)             returnthis.name.compareTo(s.name);         return num;    }    //存的对象多,有可能存到hashSet中    publicint hashCode(){         returnname.hashCode()+age*23;    }    publicboolean equals(Object obj){         if(!(obj instanceof Student1))             thrownew RuntimeException("类型不匹配");         Student1 s=(Student1)obj;         returnthis.name.equals(s.name)&&this.age==s.age;    }    public String getName(){         returnname;    }    publicint getAge(){         returnage;    }    public String toString(){         returnname+":"+age;    }}publicclass HashMapDemo {    publicstaticvoid main(String[] args) {         HashMap<Student1,String> hm=new HashMap<Student1,String>();         hm.put(new Student1("lishi1",21), "北京");         hm.put(new Student1("lishi2",22), "大连");         hm.put(new Student1("lishi3",23), "上海");         hm.put(new Student1("lishi4",24), "天津");         //第一种取出方式:         Set<Student1> keySet=hm.keySet();         Iterator<Student1> it=keySet.iterator();         while(it.hasNext()){             Student1 s=it.next();             String addr=hm.get(s);             System.out.println(s+".."+addr);         }        //第二种取出方式:         Set<Map.Entry<Student1, String>> entrySet=hm.entrySet();         Iterator<Map.Entry<Student1, String>> iter=entrySet.iterator();         while(iter.hasNext()){             Map.Entry<Student1, String> me= iter.next();             System.out.println(me.getKey()+"---"+me.getValue());         }    } }

------- android培训java培训java博客、java学习型技术博客、期待与您交流! ---------- 

如有疑问:http://edu.csdn.net/