Java泛型(拓展ArrayList、HashMap)
泛型介紹
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
注:HashMap建立時要同時定義key與value。例如:HashMap<Interger,Student> 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();
}
}
感謝您的觀看!歡迎評論!