黑马程序员_JavaSE基础18 之 Map集合 泛型

----------------------      android培训、java培训、期待与您交流!   ---------------------
 
JavaSE_18  笔记 
                                 Java语言基础之  Map集合  泛型
 
1、集合框架之 Map集合
 Map<K,V> : 一次添加一对元素。Collection一次添加一个元素。其实Map集合中存储的就是键值对,map集合中必须保证键的唯一性。
 
① 添加:
    Value put (key,value) :返回前一个和同key关联的值,若没有返回null。即存相同的键,值会被覆盖。因为要保证key唯一。
② 删除:
Void clear(); //清空map集合
Value remove(key) ;
③ 判断
   Boolean containsKey(key);
   Boolean containsValue(value);
   Boolean isEmpty();
④ 获取
  Value get(key) : 通过key获取值。
   Int size(); 获取键值对的个数。     
2、事例: 取出map集合中所有元素。
方法一:通过keyset()获取map中所有键的Set集合,再通过Iterator迭代器获取到每一个键,进而获取每一个值。
map.put(0, "liang");
map.put(02, "ming");
Set set=map.keySet(); //返回Set集合,而非List,保证元素的唯一性。
Iterator it=set.iterator(); 
while(it.hasNext()){
System.out.println(map.get(it.next()));
}
  方法二:使用map的entrySet(),该方法将键和值的映射关系作为对象存储到了set集合中,而这个映射关系的类型就是Map.Entry类型。
map.put(8, "xiao");
map.put(0, "liang");
map.put(02, "ming");
Set<Map.Entry<Integer, String>> entrySet=map.entrySet();  //得到键值的集合
Iterator<Map.Entry<Integer, String>> it=entrySet.iterator(); // 得到迭代器
while(it.hasNext()){
Map.Entry<Integer, String> me=it.next();
System.out.println(me.getKey()+":"+me.getValue());
}
3、Map常用的子类
① HashTable:内部结构是哈希表,是同步的。不允许null作为键,Null作为值。
②  HashMap:内部结构是哈希表,是不同步的。允许null作为键,null作为值。
③ TreeMap:内部结构是二叉树,不是同步的。可以对Map集合中的键进行排序。
本质:Map是Set集合的扩充,其实Set集合底层就是由Map集合实现的。
 
4、 Hashtable的子类:Propertise
 用来存储键值对象的配置文件信息。
 
5、集合框架之 泛型
 ① 是jdk1.5之后出现的安全机制,它将运行时期的问题ClassCastException转到了编译时期。
 ② 避免了强制转换的麻烦。
 ③ 使用时期是当操作的引用数据类型不确定的时候,就使用<>。将要操作的引用数据类型传入即可。其实<>就是一个用于接收具体引用数据类型的参数范围。
 ④ 在程序中,只要用到了带有<>的类或者接口,就要明确传入的具体引用数据类型。
 ⑤ 泛型的擦除:运行时,会将泛型去掉,生产的class文件中是不带泛型的。为何擦除:因为为了兼容运行的类加载器。
 ⑥ 泛型的补偿:在运行时,通过获取元素的类型进行转换动作,不用使用者再强制转换了。
 
6、泛型类
 ① public class Tool<QQ> ; 当类中操作的引用数据类型不确定的时候,就使用泛型来表示。
 ② 这种方式比Object安全些,但是稍微麻烦些。 Tool<QQ> tool=new Tool<QQ>() ;
 
7、泛型方法:
 Public <W> void show(W str) {  //sop( )  }
 
8、泛型方法静态:
 Public static <Y> void method(Y obj ) {  //  }
当方法静态时,不能访问类上定义的泛型,如果静态方法使用泛型,那么只能将泛型定义在方法上。
 
9、泛型接口
  Interface Inter<T> {    public void show(T t);    }
  Class InterImpl2<Q> implements Inter<Q> {  public void show(Q q) { //... }  }
  Class InterImpl implements Inter<String> {  //   }
 
10、泛型限定 之 泛型通配符的使用
  ① 定义通配符,可以操作所有类
  Public static vid printCollection(Collection<?> a1) { Iterator<?> it=al.iterator() ;  }
  ② 定义类的通配符,只可以操作父类的所有子类。即限制了一部分类型。
  Public static void printCollection(Collection<? Extends Person> a1)
   { Iterator<? Extends Person> it = a1.iterator() ;  }
 
11、泛型限定 的 上下限 :
①上限: ? Extends E : 接受E类型或者E的子类型。
一般在存储元素的时候使用上限,因为这样取出的都是按照上限类型来运算的,不会出现类型安全隐患。
②下限: ? Super E : 接受E类型或者E的父类型。下限!
 
12、集合框架的选择
 需要唯一吗?
      需要: Set
          ----需要制定顺序:
                  需要:TreeSet 
                  不需要:HashSet 
                  但是想要一个和存储一直的顺序(有序):LinkedHashSet 
      不需要:List
          ----需要频繁增删:
                  需要:LinkedList 
                  不需要:ArrayList  
 
13、关于集合框架:
① 看到array :就要想到数组,就要想到查询快,有角标。
② 看到link : 就要想到链表,就要想到增删块,就要想到 add 、get 、remove+first last的方法。
 ③ 看到 hash :就要想到哈希表,想到唯一性,就要想到元素需要覆盖hashCode方法和equals方法。
 ④ 看到tree:就要想到二叉树,就要想要排序,想到两个接口 comparable,comparator。
 而且通常这些常用的集合容器都是不同步的。
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值