泛型的本质是类型参数化;可以用在类、接口、和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
1、泛型类的声明
语法:
public class cName<T>
{
T cName;
public void set(T cName)
{
this.cName = cName;
}
public T get()
{
return cName;
}
public static void main(String[] args)
{
cName<Boolean> value = new cName<Boolean>();
value.set(false);
Boolean b = value.get();
Systen.out.println(b);
}
}
【程序运行结果】
false
【程序解析】
定义泛型类cName,类名后边的<T>泛指一种类型,即java可识别的任意指定类型
2、链表
LinkedList<E>泛型类,使用该泛型类创建链表是必须指定<E>的具体类型。
语法:
public class programT{
public static void main(String[] args)
{
//创建列表
LinkedList<String> mylist =new LinkedList<String>();
//添加节点数据
mylist.add("I");
mylist.add("like");
mylist.add("java");
//添加指定节点数据
mylist.add(2, "the");
for(int i=0;i<mylist.size();i++)
{
System.out.print(mylist.get(i)+" ");
}
}
}
【程序结果】
I like the java
【程序分析】
创建列表、添加节点数据、获取节点数据显示。
实际上,LinkedList<E>是实现了接口List<E>的一个泛型类,常用方法如下:
① public boolean add(E element)
向链表末尾添加一个新节点。
② public void add(int index,E element)
向链表的指定位置添加一个节点,其中index是位置。
③ public void clear()
删除链表所有节点,使链表变成空链表。
④ public E remove(int index)
删除指定位置上的节点,并返回该节点的值
⑤ public boolean remove(E element)
删除首次出现含有element的节点
⑥ public E get(int index)
返回链表指定位置的节点中的数据
⑦ public E set(int index,E element)
将当前链表的index位置节点中的数据,替换为参数element指定的数据,并返回被替换的数据。
⑧ public int size()
返回链表的长度,即借点的个数。
⑨ public Boolean contains(Object element)
如果此链表包含指定元素element,则返回true,否则返回false
① public void addFrist(E element)
向链表的头部添加一个新节点,以参数element指定新节点中的数据。
② public void addLast(E element)
向链表的末尾添加一个新节点,以参数element指定新节点中的数据。
③ public E removeFrist()
删除第一个节点返回这个节点中的数据。
④ public E removeLast()
删除最后一个节点返回这个节点中的数据。
⑤ public Object clone()
克隆当前链表,获得一个副本。对副本的操作对原链表没有影响。
3、遍历方式--迭代器存取方式
java的集合框架为各种数据结构,如链表、散列表等不同存储结构的数据,提供了一种称为迭代器存取方式。
LinkedList中的get(int index)方法将返回当前节点的数据,存储结构为非顺序结构的时候使用该方法获取速度较慢。最好使用提供的迭代器,因为迭代器遍历集合的方法在找到集合中的第一个对象的同时,也得到了待遍历的后续对象的引用,采用迭代器可以快速的遍历集合。
【程序比对】
import java.util.Iterator;
import java.util.LinkedList;
public class compareTime {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList<Integer> list = new LinkedList<Integer>();
for(int i =0;i<5000;i++)
list.add(i);
Iterator<Integer> iter = list.iterator(); //获得链表的迭代器
long startTime = System.currentTimeMillis();//获取系统当前时间
while(iter.hasNext())
{
Integer intNumber = iter.next();
}
long endTime = System.currentTimeMillis();
long timeConsuming = endTime - startTime;
System.out.println("采用迭代器遍历链表时间:"+timeConsuming +"ms");
startTime = System.currentTimeMillis();
for(int i =0 ;i<list.size();i++)
{
Integer intNum = list.get(i);
}
endTime = System.currentTimeMillis();
timeConsuming = endTime - startTime;
System.out.println("采用get方法遍历链表时间:"+timeConsuming +"ms");
}
}
【程序解析】
请将代码执行后查看结果差异
3、栈
栈是一种先进后出的数据结构,只能在一段进行输入输出。
栈常用的操作如下:
①public Stack()
创建一个空Stack
②public E push(E item)
将item项入栈
③public E pop()
移出栈顶对象并作为此函数的值返回该对象
④public E peek()
获取栈顶端的数据,但是不移除该数据
⑤public boolean empty()
测试栈中是否还有数据,有数据返回false,否则返回true
⑥public int search(Object o)
获取数据在栈中位置,最顶端的位置是1,向下一次增加,如果栈不含有此数据,则返回-1
栈是很灵活的数据结构,使用栈可以减少内存的开销
【程序范例--递归】
import java.util.Stack;
public class compareTime {
public static void main(String[] args) {
// TODO Auto-generated method stub
Stack<Integer> s = new Stack<Integer>();
s.push(0); //入栈
s.push(1);
for(int i =0;i<5;i++)
{
int f2 = s.pop();
int f1 = s.pop();
int tmp = f1+f2;
s.push(f1);
s.push(f2);
s.push(tmp);
}
while(!s.empty()) //栈是否为空
{
System.out.println(s); //显示栈顶数据
s.pop(); //将栈顶数据出站
}
}
}
4、散列映射
散列映射HashMap<K,V>泛型类实现了泛型接口Map<K,V>。HashMap对象采用散列表存储数据,我们称HashMap对象为散列映射。
散列映射存储“键/值”对,允许任意数量的“键/值”对存储在一起,键不能出现冲突,即不能有两个数据项使用相同的键。如果出现两个数据项使用相同的键,那么前一个“键/值”对将被替换。
常用方法如下:
①public void clear()
清空散列表
②public boolean containsKey(Object value)
如果散列映射有“键/值”对使用了参数指定的键,返回true,否则返回false
③public boolean containsValue(Object value)
如果散列映射有“键/值”对使用了参数指定的值,返回true,否则返回false
④public V get(Object key)
返回采用key键的“键/值”对的值。如果不包含该映射关系返回null
⑤public boolean isEmpoty()
如果散列映射中不含任何“键/值”对,即为空,则该方法返回true,否则返回false
⑥public V put(V key,V value)
在此映射中设置指定键与指定值,并返回键对应的值
⑦public V remove(Object key)
删除散列映射中键位参数指定的“键/值”对,并返回键对应的值
⑧public int size()
返回散列映射的大小,即散列映射中“键/值”对的数目
【程序范例--简易词典】
import java.util.*;
import java.io.*;
public class compareTime {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
HashMap<String, String> hst = new HashMap<String, String>();
hst.put("name", "姓名");
hst.put("gander", "性别");
hst.put("age", "年龄");
hst.put("score", "分数");
hst.put("see", "看见,明白");
String searchWord = null;
System.out.print("输入一个单词我帮你翻译:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//键盘输入
searchWord = br.readLine();
if(hst.containsKey(searchWord))
{
System.out.println(searchWord+"->"+hst.get(searchWord));
}else
{
System.out.println("目前没有该词:"+searchWord);
System.out.println("单词涵盖:");
Iterator it = hst.entrySet().iterator(); //迭代程序
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
}
相关文章
- 《从零开始学Swift》学习笔记(Day 41)——类的继承
- java J2EE学习入门
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(19)----旋转表示法
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(4)---混合
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(16)----基本光照
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(13)----模板测试
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(9)----变换和坐标系统
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(2)----QUAD_COMMAND
- 一、Android学习第一天——环境搭建(转)
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(17)----发光体