黑马程序员_集合(3)

来源:互联网 发布:ubuntu互相共享 编辑:程序博客网 时间:2024/06/16 20:08

------- android培训、java培训、期待与您交流! ----------

/*|-java.util|-Map<K,V>|-Hashtable|-HashMap<K,V>|- TreeMap<K,V>|- put(K,V) |- get(Object key)  |- keySet()  |- entrySet()   |-Map.Entry<K,V>|- getKey() |- getValue() */

=============

1).Map :

Hashtable:底层是哈希表数据结构,不可以存入null键null值。线程同步的。jdk1.0.效率低。

HashMap:底层是哈希表数据结构,可以存入 null 值和 null 键,线程不同步。将hashtable替代,jdk1.2.效率高。

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


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

1.添加:put(K,V),putAll(map) 

2.删除:clear(),remove(key) 

3.判断:containsValue(value),containsKey(key),isEmpty() 

4.获取:get(key),size(),values() ,keySet(),entrySet()


=============

2).Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

取出方式一:将键存入Set集合,迭代遍历,获取键,集合get(key)获取值。

取出方式二:将键值的关系存入Set,迭代遍历,通过Map内部static接口获取迭代元素。用其getKey,getValue获取键值


public class HashMapTest{public static void main(String[] args){HashMap<String,Integer> hm = new HashMap<String,Integer>();hm.put("java01", 111);hm.put("java00", 111);//键唯一,值可重复hm.put("java02", 222);hm.put("java", 333);hm.put(null, null);//HashMap可以null键null值,//Hashtable则会出现NullPointerException//取出方式一:keySet通过键获取值。Set<String> keySet = hm.keySet();//键存入Set集合Iterator<String> it = keySet.iterator();//使用Set集合的迭代器while(it.hasNext()){String key = it.next();//迭代取出键Integer value = hm.get(key);//通过键得到值get(key)System.out.println(key+" : "+value);}//取出方式二:entrySet映射关系Set<Map.Entry<String, Integer>> entrySet = hm.entrySet();//键值映射关系存入Set集合Iterator<Map.Entry<String, Integer>> ite = entrySet.iterator();//获取Set集合迭代器while(ite.hasNext()){Map.Entry<String, Integer> me = ite.next();//取出映射关系。String key = me.getKey();//通过映射关系getKey()Integer value = me.getValue();//通过映射关系getValue()System.out.println(key+" : "+value);}}}


============

3).例:定义一个学生类,将其姓名,年龄,地址存到集合中

//可能存到Set中也可能存到二叉树中。//所以要覆写hashCode(),equals(),声明实现Comparable并实现compareTo()。class Student implements Comparable<Student>{//指定接收类型为Studentprivate String name;private int age;Student(String name,int age){this.name = name;this.age = age;}public String getName(){return name;}public int getAge(){return age;}//实现compareTo()public int compareTo(Student stu){//指定了接收的类型。所以不写Objectint num = new Integer(this.age).compareTo(new Integer(stu.age));if(num==0)return this.name.compareTo(stu.name);return num;}//覆写Object中hashCode()public int hashCode(){return name.hashCode()+age*22;}//覆写Object中equals()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;}public String toString(){return name+","+age;}}public class HashtableTest {public static void main(String[] args){HashMap<Student,String> hm = new HashMap<Student,String>();hm.put(new Student("lisi1",21),"beijing");hm.put(new Student("lisi1",21),"tianjin");hm.put(new Student("lisi2",22),"shanghai");hm.put(new Student("lisi3",23),"nanjing");hm.put(new Student("lisi4",24),"wuhan");//第一种取出方式 keySetSet<Student> keySet = hm.keySet();Iterator<Student> it = keySet.iterator();while(it.hasNext()){Student stu = it.next();String addr = hm.get(stu);System.out.println(stu+" ,"+addr);}//第二种取出方式 entrySetSet<Map.Entry<Student,String>> entrySet = hm.entrySet();Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();while(iter.hasNext()){Map.Entry<Student,String> me = iter.next();Student stu = me.getKey();String addr = me.getValue();System.out.println(stu+",   "+addr);}}}





0 0