恶补java(十)---泛型与集合的再学习

其余的就不多说了,一切都在代码中

package com.gc.generic;
/**
 * JDK5 之前集合对象使用问题:
 * 1、向集合添加任何类型对象
 * 2、从集合取出对象时,数据类型丢失,使用与类型相关方法,强制类型转换
 * 存在安全隐患
 *
 * *****************************
 *
 * JDK5中的泛型:允许程序员使用泛型技术限制集合的处理类型
 * List<String> list=new ArrayList<String>();
 * 从而在取出集合中元素时,获得的是具体数据类型元素(不需要进行类型强制)
 *
 * 注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器
 * 在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛型的java
 * 程序后,生成的class文件中将不再带有泛型信息,以此使程序运行效率不受到影响
 * ,这个过程称之为“擦除”
 *
 * 泛型技术 只是编译器阶段技术,为javac命令起到安全检查作用,生成.class文件后,泛型信息将会被擦除
 *
 * List<String> ----参数化类型
 *
 * 泛型技术 对象List、set。Map 进行类型安全约束
 *
 * 使用泛型的对象进行类型转换时,等号两端对象使用泛型类型必须一致
 */
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.Map.Entry;

import org.junit.Test;
/**
 *
 * @author Android将军
 *
 */
public class GenericTest {

	@Test
	public void demo5()
	{
		//使用类型安全的Map---因为map是一个键值对结构,指定两个类型泛型
		Map<String,String> map=new HashMap<String, String>();
		map.put("aaa", "111");
		map.put("bbb", "222");
		//因为使用了泛型,所以key和value类型都必须为String

		//取出map元素-----两种
		//(1)遍历Map 通过keySet(2)遍历Map通过EntrySet取出每一个键值对  Map.Entry定义键值对  通过Entry的getKey和getValue来进行遍历

		//第一种通过Map的keySet进行遍历
		Set<String> keys=map.keySet();
		for (String key : keys) {
			System.out.println(key+":"+map.get(key));
		}
		System.out.println("------------");
		//第二种 通过map的entrySet---获得每一个键值对
		Set<Map.Entry<String, String>> entrySet=map.entrySet();//每一个元素就是一个键值对
		for (Entry<String, String> entry : entrySet) {
			//通过entry的getKey和getValue来获得每一个键和值
			System.out.println(entry.getKey()+":"+entry.getValue());
		}

	}

	@Test
	public void demo4()
	{
		//使用类型安全的Set
		Set<String> set=new TreeSet<String>();
		set.add("asd");
		set.add("fdf");
		set.add("bxc");
		//因为使用泛型只能添加String类型元素

		//取出Set元素---两种  因为Set是无序的,所以比List少一种遍历方法
		//第一种继承Collection  所以使用Iterator遍历
		Iterator<String> iterator=set.iterator();
		while(iterator.hasNext())
		{
			String s=iterator.next();
			System.out.println(s);
		}
		System.out.println("-----------------");
		//第二种 JDK引入foreach循环结构,通过foreach结构遍历set
		for (String s : set) {
			System.out.println(s);
		}
	}
	@Test
	public void demo3()
	{
		//使用类型安全List
		List<String> list=new LinkedList<String>();
		list.add("aaaa");
		list.add("bbbb");
		list.add("cccc");
		//因为使用泛型,只能将list添加String类型元素

		//遍历List---三种
		//第一种 因为list是有序的(存入顺序和取出顺序一样)通过size和get方法进行遍历
		for(int i=0;i<list.size();i++)
		{
			String s=list.get(i);
			System.out.println(s);
		}
		System.out.println("------------------------");
		//第二种 因为List继承了Collection接口,通过Collection的iterator进行遍历
		Iterator<String> iterator=list.iterator();
		// 遍历iterator  通过迭代器hasNext和next方法进行遍历
		while(iterator.hasNext())
		{
			String s=iterator.next();
			System.out.println(s);
		}
		System.out.println("------------------------");
		//第三种 JDK引入foreach循环结构,通过foreach结构遍历list
		for (String s: list) {
			System.out.println(s);
		}
		System.out.println("------------------------");
	}
	@Test
	public void demo2()
	{
		//应用泛型集合
		//这个list中只能存放String类型的数据
		List<String> list=new ArrayList<String>();
		list.add("abc");
		list.add("def");
		//操作集合中对象,遍历集合 将数据取出来 通过size()方法和get(index)方法遍历集合
		for(int i=0;i<list.size();i++)
		{

			String s=list.get(i);

			System.out.println(s.toUpperCase());
		}
	}
	@Test
	public void demo1()
	{
		//JDK5之前集合对象
		List list=new ArrayList();
		//因为没有泛型类型检查,添加对象可以是任意类型
		list.add("abc");
		list.add(123);
		//操作集合中对象,遍历集合 将数据取出来 通过size()方法和get(index)方法遍历集合
		for(int i=0;i<list.size();i++)
		{
			//取出对象时,数据类型丢失了
			Object o=list.get(i);
			//操作String方法----强制将数据转换相应类型
			String s=(String)o;
			System.out.println(s.toUpperCase());
		}
	}
}

转载请注明出处:http://blog.csdn.net/android_jiangjun/article/details/26622775

恶补java(十)---泛型与集合的再学习,布布扣,bubuko.com

时间: 2024-10-05 12:39:10

恶补java(十)---泛型与集合的再学习的相关文章

Java基础---泛型、集合框架工具类:collections和Arrays

第一讲     泛型(Generic) 一.概述 1.JDK1.5版本以后出现的新特性.用于解决安全问题,是一个类型安全机制. 2.JDK1.5的集合类希望在定义集合时,明确表明你要向集合中装入那种类型的数据,无法加入指定类型以外的数据. 3.泛型是提供给javac编译器使用的可以限定集合中的输入类型说明的集合时,会去掉“类型”信息,使程序运行效率不受影响,对参数化的泛型类型,getClass()方法的返回值和原始类型完全一样. 4.由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就

恶补Java(十三)之Java IO-----File类的用法

恶补Java---JavaI/O部分之File类的用法(笔记) 在java中,I/O(输入/输出)是比较乏味的事情,因为看不到明显的运行效果,但输入/输出是所有程序都必需的部分--使用输入机制,允许程序读取外部数据(包括来自磁盘.光盘等存储设备的数据).用户输入数据:使用输出机制,允许程序记录运行状态,将程序数据输出到磁盘.光盘等存储设备中. Java的I/O通过java.io包下的类和接口来支持,在java.io包下主要包括输入.输出两种IO流,每种输入.输出流又可分为字节流和字符流两大类.其

Java中泛型在集合框架中的应用

泛型是Java中的一个重要概念,上一篇文章我们说过,当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通过代码也可以看出来,我们放入其他类型时,如字符串,编译器不会报错,但是运行程序时会抛出类型错误异常,这样给开发带来很多不方便,用泛型就解决了这个麻烦 泛型规定了某个集合只能存放特定类型的属性,当添加类型与规定不一致时,编译器会直接报错,可以清楚的看到错误 当我们从List中取出元素时直接取出即可,不

恶补java(十一)-------Stack类的使用

package com.gc.Stack; /** * java中stack的使用方法,堆栈是一种"后进先出"(LIFO)的数据结构,只能在一端进行插入(称为"压栈")或删除(称为"出栈")数据的操作. * Java中,使用java.util.Stack类的构造方法创建对象 * public class Stack extends vector * 构造方法:public Stack()创建一个空Stack * 1.public push(ite

Java笔记(8)-泛型与集合框架

泛型与集合框架 泛型 泛型类 泛型类声明对象 示例 泛型接口 示例 泛型的目的 链表 LinkedList E 泛型类 常用方法 遍历链表 示例 排序和查找 示例 洗牌和旋转 堆栈 示例 散列映射 HashMap KV 泛型类 常用方法 遍历散列映射 基于散列映射的查询 示例 树集 TreeSetE泛型类 节点的大小关系 TreeSet类常用方法 示例 树映射 泛型与集合框架 组织数据之结构及相关操作. 泛型 泛型(Generics)是在JDK1.5中推出的,其主要目的是可以建立具有类型安全的集

十:Java之泛型

[定义] 一.泛型的定义主要有以下两种: 在程序编码中一些包含类型参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象.(这是当今较常见的定义) 在程序编码中一些包含参数的类.其参数可以代表类或对象等等.(现在人们大多把这称作模板) 不论使用那个定义,泛型的参数在真正使用泛型时都必须作出指明. 泛型类,是在实例化类的时候指明泛型的具体类型: 泛型方法,是在调用方法的时候指明泛型的具体类型. 二.使用泛型的目的: 一些强类型程序语言支持泛型,其主要目的是加强类型安全及减少类转换的次数,但一

java基础(十四)集合(一)

这里有我之前上课总结的一些知识点以及代码大部分是老师讲的笔记 个人认为是非常好的,,也是比较经典的内容,真诚的希望这些对于那些想学习的人有所帮助! 由于代码是分模块的上传非常的不便.也比较多,讲的也是比较清晰的!如果你有需要可以在评论中留下您的邮箱我看到一定会免费发给你的!感谢这个平台让我们大家共同进步吧!! 记住 程序员是无私的!!! 也非常欢迎到我的博客内观看 博客地址:http://www.cnblogs.com/duscl/ /* 1:对象数组(掌握) (1)数组既可以存储基本数据类型,

Java泛型与集合笔记

第一章 Java的泛型为了兼容性和防止代码爆炸,在编译成字节碼时会进行类型擦除,编译器自动添加代码做类型转换(用到List<Integer>的地方用Integer来做转换),自动做装箱拆箱,做foreach替换,在多个参数的情况下自动打包进一个数组里 第二章 子类型替换原则:任意可以使用父类型值的地方,用可以用子类的对象地址值替换

【恶补】之python一天速成

python一天速成都是骗纸~怎么可能一天~只是快速了解一些基本的 首先我是个python新手,只在网上搜例子然后用python写过一些分析文件的脚本,现在工作需要,要短时间进一步了解python.这篇文章也不是给完全新手看的,还是给对python有一点接触且需要大致掌握或者对其他语言有一定研究的人看的. 一.执行过程 首先python是先编译后解释的语言,与php和java类似,php是先编译成opcode再解释执行,java是编译成.class文件然后由虚拟机执行,只是编译时机不同,php和