ASP.Net+Android+IOS开发------期待与您交流
<集合框架>
<泛型 Map集合的概念及使用方法>
1. 泛型的出现
* 程序的安全性
* 安全问题由运行时期,提前到了编译时期
* JDK1.5 以后出现的
* (JDK1.5版本,是一个里程碑式的升级)程序的升级
* 安全性
* 效率
* 代码的减少
* 避免了强制类型转换
2. 泛型的定义和使用 <数据类型>
* 强制集合只能存储一种数据类型
* 什么时候使用泛型
* 当你使用一个类的时候,发展这个类名带<>,用泛型
* ArrayList<E> 泛型, E是一个变量,可变化的类型,使用ArrayList集合,指定什么数据类型
这个E就表示什么数据类型
ArrayList<Integer> boolean add(Integer e)
3. 泛型类泛型方法
* 面试
* 考试你对泛型限制数据类型是否理解
4. 泛型通配符 ?
* 不确定泛型类型的时候,可以使用?来进行通配,了解即可
5. 泛型的限定 了解即可
* 在泛型限制的数据类型是,只能传递某一个派系的成员
* ? extends E 只能是E或者是E的子类型 泛型的上限限定
* ? super E 只能是E或者是E的父类型 泛型的下限限定
6. Map集合
* 双列集合
* 存储的键是唯一的,每个键只能对应一个值
* Map接口中的方法
* V put(K,V)
* put方法的返回值,是null,但是如果覆盖了原有的键,返回值,就是原有键对应的值
*boolean containsKey(Object key) 判断Map集合中,有没有这个键
*containsValue(Object value) 判断Map集合中,有没有这个值
* V get(Object key) 获取Map集合中,指定键对应的值 如果没有这个键,返回null
代码体现:
package cn.itcast.map;
/*
* Map.Entry取出方式
*/
import java.util.*;
public class MapDemo2 {
public static void main(String[] args) {
Map<String,String> map = new HashMap<String,String>();
map.put("a", "z");
map.put("b", "y");
map.put("c", "x");
//返回值,Set集合 Set<Map.Entry<K,V>> entrySet()
Set<Map.Entry<String, String>> set = map.entrySet();
//创建迭代器
Iterator<Map.Entry<String, String>> it = set.iterator();
while(it.hasNext()){
//it.next()返回 Map.Entey
Map.Entry<String, String> ma = it.next();
String key = ma.getKey();
String value = ma.getValue();
System.out.println(key+"...."+value);
}
}
}
7. Map集合中存储元素的取出方式 第一种 *****
* 利用Set集合 Set<K> keySet()
* keySet()方法,作用是,将Map集合中的键,存储到Set集合
* 迭代Set集合,next()方法返回的就是键
* 使用Map集合中的get方法,来获取值
8. Map集合中存储元素的取出方式 第二种 *****
* 利用Map集合中,存储键值对的关系来获取
* Map集合本身提供一个方法,entrySet()方法,返回键值存储关系,关系是Map.Entry
Set<Map.Entry<K,V>> entrySet()
将集合中键值对的关系,又保存到了Set集合
9. HashMap
* 底层数据结构是一个实现哈希表的双列集合
* 线程不安全,执行效率高
* 存储到HashMap中的键,如果是自定义对象,需要对象重写hashCode和equals
HashMap集合存储自定义对象:
package cn.itcast.map;
import java.util.*;
import cn.itcast.generic.Person;
public class HashMapDemo {
public static void main(String[] args) {
HashMap<Person,String> hm = new HashMap<Person,String>();
hm.put(new Person("zhang",22),"呼呼");
hm.put(new Person("li",23),"嘻嘻");
hm.put(new Person("li",23),"嘿嘿");
hm.put(new Person("zhao",26),"呵呵");
hm.put(new Person("wang",28),"哈哈");
//取出Map集合中的元素,第一种
/*Set<Person> set = hm.keySet();
Iterator<Person> it = set.iterator();
while(it.hasNext()){
Person p =it.next();//键
String values = hm.get(p);
System.out.println(p+"-----"+values);
}*/
//取出Map集合中的元素,第二种
Set<Map.Entry<Person, String>> set = hm.entrySet();
Iterator<Map.Entry<Person, String>> it = set.iterator();
while(it.hasNext()){
Map.Entry<Person, String> ma = it.next();
Person p = ma.getKey();
String values = ma.getValue();
System.out.println(p+"-----"+values);
}
}
}
使用keySet方法,取出map集合中的对象
package cn.itcast.map;
/*
* keySet方法,取出Map集合中存储的对象
*/
import java.util.*;
public class MapDemo1 {
public static void main(String[] args) {
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "a");
map.put(2, "b");
map.put(3, "c");
map.put(4, "d");
//利用keySet方法,将键存储到Set集合
Set<Integer> set = map.keySet();
//迭代器创建
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
//System.out.println(it.next());
Integer key = it.next();
String value = map.get(key);
System.out.println(key+"对应::"+value);
}
}
}
10. TreeMap
* 底层数据结构 是红黑树(优化了算法的二叉树)
* 存储在TreeMap集合中的对象,会进行自然排序,排序依据是键
* TreeMap线程不安全,执行效率高
* 存储到TreeMap集合中的键,必须具备比较性,也可以让TreeMap本身具备比较性
需要我们自定义比较器,实现Comparator接口
11. 实现一个统计功能
* hgfdsewrhgfdkljhsajdtporissvbhadv每个字母出现了多少次
* 结果 a字母出现2次,b字母出现5次 d字母出现10次
* 有序排列的,集合中的对象,TreeSet
12. 集合中的子类中的特点和什么时候使用
*ArrayList
* 数组结构,查询快,增删慢
*LinkedList
* 链表结构,查询慢,增删块
*HashSet
* 哈希表结构,不重复元素
*TreeSet
* 二叉树,存储的元素自然排序
*HashMap
* 哈希表结构,双列集合,不重复元素
*TreeMap
* 红黑树结构,双列集合,存储的元素自然排序
什么时候用集合:
数据太多,用数组存储
对象太多,用集合存储
如果是这些对象经常频繁进行查找工作 ArrayList
如果是这些对象经常频繁进行修改工作 LinkedList
存储集合中的对象需要唯一吗,如果需要 HashSet
存储集合中的对象需要唯一吗,需要排序吗 如果需要 TreeSet
如果需要同时存储两个对象,一个键,一个值,必须Map集合
实在不知道该用哪一个集合 ArrayList(使用频率最高)
能用Map不要用Set ,Set底层调用的就是Map中的功能
ASP.Net+Android+IOS开发------期待与您交流
详细请查看:http://edu.youkuaiyun.com