泛型介绍
Java中有泛型这个概念,最开始可能一脸懵逼,因为泛型听起来很高大上的样子,其实Java中的泛型就是C++中的模板类(Template),这样在Java泛型中就可以很轻松的建立各种自定义类型的List了,有没有觉得很舒服。另外Java中还提供ArrayList(继承于List,比List更优化)、HashMap(继承于抽象类Map,一种映射类)。泛型类中就是引入一个模板类T(其实就是一个Object类),下面我们来自己定义一个泛型类:
//GenericList.java
public class GenericList<T> //模板T
{
private static class GenericNode<T> //相当于数据结构中得List struct
{
T value;
GenericNode<T> next;
public GenericNode()
{
}
}
public GenericList()
{
head.next=null; //初始化
}
//链表头
private GenericNode<T> head=new GenericNode<T>();
//向链表中添加ELement
public void add(T value)
{
GenericNode<T> tair=head;
while(tair.next!=null)
tair=tair.next;
GenericNode<T> node=new GenericNode<T>();
tair.next=node;
node.value=value;
node.next=null;
}
//取得链表长度
public int length()
{
int count=0;
GenericNode<T> m=head;
while(m.next!=null)
{
m=m.next;
count++;
}
return count;
}
// 获取迭代器,方便迭代遍历
public Iterator<T> getIterator()
{
Iterator<T> iter = new Iterator<T>();
iter.node = this.head;
return iter;
}
//定义Iterator迭代类
public static class Iterator<T>
{
private GenericNode<T> node;
// 是否还有下一节点
public boolean hasNext()
{
return node.next != null;
}
// 获取下一节点的值
public T next()
{
T value = node.next.value;
node = node.next;
return value;
}
}
}
以上代码中引入了,迭代器(自定义的,java中还有自带Iterator类)。迭代器叫相当于给GenericList提供了一种迭代遍历得方法,相信学过数据结构中List结构的小可爱们一定不陌生,这种迭代遍历方法是利用next指针来依次遍历整个List中的value。
ArrayList与HashMap
Java中提供自带的两个常用类似list的类:Array List、HashMap(数据结构中的哈希表)。
ArrayList常用方法有:add(index,value)向ArrayList对象中添加Element,还可以指定位置添加
remove(index)删除指定位置的Element
clear() 清空ArrayList
get(index)取得index位置出的value
iterator()载入迭代器中
HashMap常用方法有:put(key,value) 将value加入hashMap中
remove(key) 移除key对应的value
get(key)取得key对应的value
key要满足唯一性、可比较性。
当put的key重复时,以最后一个key为主。(put了几个key一模一样的value,HashMap以最后一个key对应的 value为主)
三种方法测试代码如下
//GenericList
前面已经列出,这里主要是介绍使用GenericList(见Hello.java)
//Student.java
public class Student
{
int id;
String name;
String cellphone;
public Student(int id,String name,String cellphone)
{
this.id=id;
this.name=name;
this.cellphone=cellphone;
}
public void print()
{
System.out.println("( id:"+id+",name:"+name+",cellphone:"+cellphone+" )");
}
}
//Teacher.java
public class Teacher
{
String name;
String perject;
public Teacher(String name,String perject)
{
this.name=name;
this.perject=perject;
}
public void print()
{
System.out.println("( name:"+name+",perject:"+perject+" )");
}
}
//Hello.java
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
public class Hello
{
private static GenericList<Student> list2;
public static void main(String[] args)
{
// //GenericList泛型List
//测试Student
// GenericList<Student> list1=new GenericList<Student>();
// list1.add(new Student(1,"shen","13797368760"));
// list1.add(new Student(2,"chong","13277351070"));
// list1.add(new Student(3,"wang","13872261912"));
// list1.add(new Student(4,"xue","13797368760"));
// list1.add(new Student(5,"fei","13797368760"));
// //输出
// GenericList.Iterator<Student> iter=list1.getIterator();
// while(iter.hasNext())
// iter.next().print();
// //测试Teacher
// GenericList<Teacher> list2 = new GenericList<Teacher>();
// list2.add(new Teacher("shen","语文"));
// list2.add(new Teacher("chong","数学"));
// list2.add(new Teacher("wang","英语"));
// list2.add(new Teacher("xue","物理"));
// list2.add(new Teacher("fei","化学"));
// //输出
// GenericList.Iterator<Teacher> iter=list2.getIterator();
// while(iter.hasNext())
// iter.next().print();
// //ArrayList
// ArrayList<Student> list=new ArrayList<Student>();
// list.add(new Student(1,"shen","13797368760"));
// list.add(new Student(2,"chong","13277351070"));
// list.add(new Student(3,"wang","13872261912"));
// list.add(new Student(4,"xue","13797368760"));
// list.add(new Student(5,"fei","13797368760"));
// //定义一个容器
// Comparator<Student> compare=new Comparator<Student>()
// {
//
// @Override
// public int compare(Student a, Student b)
// {
// if(a.id>b.id) return -1;
// if(a.id<b.id) return 1;
// return 0;
// }
// };
// //排序(提供一个比较器比较)
// Collections.sort(list, compare);
//
//第一种遍历方法(编程效率高)
for(int i=0;i<list.size();i++)
{
Student s=list.get(i);
s.print();
}
// //第二种遍历方法(运行效率高)
// Iterator<Student> iter=list.iterator();
// while(iter.hasNext())
// iter.next().print();
//HashMap
HashMap<Integer,Student> list3=new HashMap<Integer,Student>();
list3.put(1,new Student(1,"shen","13797368760"));
list3.put(2,new Student(2,"chong","13277351070"));
list3.put(3,new Student(3,"wang","13872261912"));
list3.put(4,new Student(4,"xue","13797368760"));
list3.put(5,new Student(5,"fei","13797368760"));
//输出(利用key查找)
for(int i=list3.size();i>0;i--)
list3.get(i).print();
}
}