java泛型学习笔记

时间:2022-09-20 08:43:23
泛型的本质是类型参数化;可以用在类、接口、和方法的创建中,分别称为泛型类、泛型接口、泛型方法。
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());
}
}
}


}