黑马程序员_java集合框架下
来源:互联网 发布:我知女人心插曲 编辑:程序博客网 时间:2024/05/23 19:11
------- android培训、java培训、java博客、java学习型技术博客、期待与您交流! ----------
一、Map集合:该集合存储键值对。一对一往里存,而且要保证键的唯一性。
Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap.
Map主要用于存储键值对,根据键得到值,因此不允许键重复,但允许值重复。
HashMap是一个最常用的Map,它根据键的HashCode值存储数据,根据键可以直接获取它的值,具有很快的访问速度。HashMap最多只允许一条记录的键为Null;允许多条记录的值为Null;HashMap不支持线程同步,即任一时刻可以有多个线程同时写HashMap;可能会导致数据的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力。
Hashtable与HashMap类似,不同的是,它不允许记录的键或者值为空;它支持线程的同步,即任一时刻只有一个线程能写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:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。
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(null, null);
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/
- 黑马程序员_java集合框架下
- 黑马程序员_java集合框架
- 黑马程序员_java集合框架
- 黑马程序员_java集合框架
- 黑马程序员_JAVA集合框架
- 黑马程序员_Java集合框架
- 黑马程序员_JAVA集合(下)
- 黑马程序员_java集合下
- 黑马程序员_Java的集合框架
- 黑马程序员_java集合框架上
- 黑马程序员_java基础集合框架
- 黑马程序员_Java基础Day14_集合框架
- 黑马程序员_java集合框架1
- 黑马程序员_java集合框架2
- 黑马程序员_Java基础_集合框架
- 黑马程序员_Java集合框架(上)
- 黑马程序员_Java基础_集合框架
- 黑马程序员_java 集合框架学习总结
- [转]Android开发中调用Google Map或Baidu Map
- Filter与Servlet的区别和联系
- 如何使用IO流
- 05编程实现单链表的节点插入
- 深入浅出分区表与分区索引之二:分区的发展历史
- 黑马程序员_java集合框架下
- Titanium 备忘1
- seajs学习(3)----模块标识
- 一个整形数的二进制形式中“1”的个数
- Oracle Sequence & Synonym
- 编程从业五年的十四条经验,句句朴实
- WebLogic运行嵌入式EJB容器应用
- 打印流,Properties,序列化流
- 07单链表的一些基本操作(创建、测量、插入、打印、删除)