Java中泛型的运用实例
package example6;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.Test;
/*1.为什么要使用泛型?
* 一般使用在集合上,比如现在将一个字符串类型放在集合里面,这时候,放入集合的字符会失去其本身的类型,只能是object类型,比如想要对这这个值进行转换,
* 很容易出现类型转换错误。可以使用泛型解决这个问题。
* 常用集合:list set map
* list的三种实现(ArrayList LinkedList vector)
* 此三者的区别:
* 1.这三个类都实现了List接口,LinkList即存储在这两个集合中的元素的位置是不连续的,底层数据结构是列表结构。
* 2.ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,查询速度快,
* 但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢。
* 3.LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入,修改,删除 速度较快.
* 4.Vector是同步处理,性能较低;ArrayList是使用异步处理,性能高。
* 5.Vector是线程安全的,ArrayList是非线程安全。LinkedList是非线程安全。
* 6.一般情况都用ArrayList,ArrayList占据内存小,如果只是查找特定位置的元素或只在集合的末端增加、移除元素,那么使用Vector或ArrayList都可以。
* 如果是对其它指定位置的插入、删除操作,最好选择LinkedList。
* 7.泛型擦除
* 首先泛型只是出现在源代码阶段,当编译之后泛型不存在了。
* 注:在泛型里必须写一个对象,比如String,不能写基本数据类型,比如int。
* 要写基本数据类型对应的包装类
* byte---Byte
* int---Integer
* short---Short
* loong---Long
* float---Float
* double---Double
* boolean---Boolean
* char---character
* */
public class fanxing {
//将一个任意数组进行首尾颠倒
public static void main(String[] args) {
String[] array= {"sss","ddd","xxx","bbb","mmm","ccc"};
System.out.println(Arrays.toString(array));
reverses(array);
System.out.println(Arrays.toString(array));
Integer[] array1= {11,22,33,44,55,66};
System.out.println(Arrays.toString(array1));
reverses(array1);
System.out.println(Arrays.toString(array1));
}
private static<T> void reverses(T[] array) {
for(int i=0;i<array.length/2;i++) {
T temp=array[i];
array[i]=array[array.length-i-1];
array[array.length-i-1]=temp;
}
/*private static void reverses(String[] array) {
for(int i=0;i<array.length/2;i++) {
String temp=array[i];
array[i]=array[array.length-i-1];
array[array.length-i-1]=temp;
}*/
}
// 泛型使用在set集合上
@Test
public void setList() {
Set<String> set = new HashSet<String>();
set.add("baojuan");
set.add("xinxin");
set.add("xuanxuan");
// 遍历set集合只有两种方式(迭代器,增强for)
for (String s1 : set) {
System.out.println(s1);
}
// 迭代器
Iterator<String> it = set.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("********************************");
}
// 泛型在map集合上的使用(结构:key--value形式)
@Test
public void testMap() {
Map<String, String> map = new HashMap<String, String>();
map.put("www", "111");
map.put("qqq", "222");
map.put("ttt", "333");
// 遍历map集合(有两种方式)
// 1.获取所有的key,通过key得到value,用get方法
// 2.获取key和value的关系
// 使用第一种方式遍历
Set<String> sets = map.keySet();
// 遍历所有key返回的set
for (String key : sets) {
// 得到所有key对应的value值
String value = map.get(key);
// 打印输出
System.out.println(key + "=>" + value);
}
// 第二种方式遍历
//set集合存放通过map.entrySet()方法获得的key与value的关系
Set<Entry<String, String>> set1 = map.entrySet();
//遍历关系集合
for (Entry<String, String> entry : set1) {
//获取关系中的key值
String s1 = entry.getKey();
//获取关系中的value值
String s2 = entry.getValue();
System.out.println(s1+"=>"+s2);
}
}
// 泛型在list集合上的使用
@Test
public void testList() {
List<String> list = new ArrayList<String>();
list.add("aaaa");
list.add("bbbb");
list.add("cccc");
// 遍历list集合
// 普通for循环,迭代器,增强for循环(三种方式)
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
System.out.println("===========================");
// 增强for循环
for (String s1 : list) {
System.out.println(s1);
}
System.out.println("===========================");
// 使用迭代器遍历集合
Iterator<String> it = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("********************************");
}
}
运行结果:
qqq=>222
ttt=>333
www=>111
qqq=>222
ttt=>333
www=>111
aaaa
bbbb
cccc
===========================
aaaa
bbbb
cccc
===========================
aaaa
bbbb
cccc
********************************
xinxin
xuanxuan
baojuan
xinxin
xuanxuan
baojuan
********************************
Java中泛型的运用实例的更多相关文章
- Java中泛型 类型擦除
转自:Java中泛型是类型擦除的 Java 泛型(Generic)的引入加强了参数类型的安全性,减少了类型的转换,但有一点需要注意:Java 的泛型在编译器有效,在运行期被删除,也就是说所有泛型参数类 ...
- Java中泛型使用
Java中泛型使用 泛型作用: 泛型:集合类添加对象不用强转 反射机制:将泛型固定的类的所有方法和成员全部显示出来 核心代码: ArrayList<Ls> ff=new ArrayList ...
- Java 中静态变量和实例变量区别
Java 中静态变量和实例变量区别 静态变量属于类,该类不生产对象,通过类名就可以调用静态变量. 实例变量属于该类的对象,必须产生该类对象,才能调用实例变量. 在程序运行时的区别: 实例变量属于某个对 ...
- Java中泛型在集合框架中的应用
泛型是Java中的一个重要概念,上一篇文章我们说过,当元素存入集合时,集合会将元素转换为Object类型存储,当取出时也是按照Object取出的,所以用get方法取出时,我们会进行强制类型转换,并且通 ...
- Java 中泛型的全面解析(转)
Java泛型(generics) 是JDK 5中引入的一个新特性,允许在定义类和接口的时候使用类型参数(type parameter).声明的类型参数在使用时用具体的类型来替换.泛型最主要的应用是在J ...
- Java中泛型的理解
Java中的泛型,本质上来说,就是是参数化类型,就是说所操作的数据类型被指定为一个参数,而不是确定的某种类型.这种数据类型可以用在类.接口和方法创建中.即泛型类.泛型接口.泛型方法.这样说可能不够生动 ...
- Java中泛型Class<T>、T与Class<?>、 Object类和Class类、 object.getClass()和Object.class
一.区别 单独的T 代表一个类型(表现形式是一个类名而已) ,而 Class<T>代表这个类型所对应的类(又可以称做类实例.类类型.字节码文件), Class<?>表示类型不确 ...
- java中反射讲解及实例
Java反射机制详解 java 反射 定义 功能 示例 概要: Java反射机制详解 | |目录 1反射机制是什么 2反射机制能做什么 3反射机制的相关API ·通过一个对象获得完整的包名和类名 ·实 ...
- Java中泛型的详细解析,深入分析泛型的使用方式
泛型的基本概念 泛型: 参数化类型 参数: 定义方法时有形参 调用方法时传递实参 参数化类型: 将类型由原来的具体的类型参数化,类似方法中的变量参数 类型定义成参数形式, 可以称为类型形参 在使用或者 ...
随机推荐
- SQLServer中取当前年,月,日,时,分,秒
Select GETDATE() as '当前日期',DateName(year,GetDate()) as '年',DateName(month,GetDate()) as '月',DateName ...
- 如何编译 opencv3 和 opencv_contrib(Linux)
本文以编译并安装OpenCV 3.3.0 为例,安装系统为 Linux x64 (Fedora 21),具体步骤如下: 1. 下载 Source code zip 压缩包 从下面网址,选择 openc ...
- 学会利用Ionic官网文档
和任何新技术一样,ionic也提供了详细的官方文档说明.网址如下: http://ionicframework.com/docs/ 学会使用ionic控件 ionic提供了大量优秀的高性能的仿原生控件 ...
- linux:相关命令以及笔记
首先,在linux 或者 unix里没有任何的反馈就叫成功,例如: (1)命令执行成功的样子:返回了登录用户信息 (2)命令执行失败的样子:没有返回任何东西 1.按键出现状况 解决:可以使用ctrl+ ...
- June 25th 2017 Week 26th Sunday
There is always that one song that brings back old memories. 总有那么一首歌,让你想起那些旧的回忆. There are seveal so ...
- ZT 绿茶和枸杞绝不可以同饮
绿茶和枸杞绝不可以同饮 正文 我来说两句(人参与) 速腾试驾招募 预约得iPad Air! 2012年06月28日10:38 来源:中国网 打印 字号 大|中|小 绿茶含有儿茶素与β-胡萝卜素.维生素 ...
- 永中Office的ibus输入法问题
我在永中Office下无法调用ibus输入法,但是在其他窗口中都没有问题,如:gVIM,LeafPad,OpenOffice等等.我按照网上的方法在.bashrc文件中也添加了以下内容,可是还是不行. ...
- codeforces 814E An unavoidable detour for home
题目链接 正解:$dp$. 感觉这道题就是中国象棋的加强版..我们要发现一些性质. 首先就是这个图肯定是一个按照$bfs$序分层的图,且每个点只往自己上面那一层连了一条边,每个点不可能向自己的上面超过 ...
- BZOJ1996:[HNOI2010]CHORUS 合唱队(区间DP)
Description Input Output Sample Input 4 1701 1702 1703 1704 Sample Output 8 HINT Solution 辣鸡guide真难用 ...
- 【[USACO08FEB]酒店Hotel】
比较基础的线段树了 我们要维护最大连续子串,这个可以说是一个比较套路的操作了 我们在[SHOI2009]会场预约这道题中已经比较深刻的认识到了这个套路了 对于这道题,我们显然要知道一个区间内最大的全为 ...