集合总结-03-----黑马程序员

Java泛型与Map集合详解
本文深入探讨Java泛型的引入原因、定义与使用,包括泛型类、泛型方法、通配符等概念,并详细讲解Map集合的特点及其多种遍历方法。此外,还介绍了HashMap与TreeMap的具体应用。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值