1 <e>里面只能填类,不能用基本数据类型,不过integer 这样的的也行
2在模板类(泛型类中)class demo<e>由于不知道e是那个,所有通常都是重写大家都有的toString()方法来调用
泛型的作用主要是为了建立具有类型安全的数据结构
如果没有泛型
LinkedList 使用add方法的时候,由于所有类都是object的子类,所以都可以添加
String s=(String) linkedList1.get(i)需要类型转换
然而有了泛型就没有上面的问题,LinkedList<String>已经说明了都是String
测试代码
package cgfg; public class Test{ public static void main(String args[]){ bb test1=new bb(1); bb test2=new bb(2); demo<bb> demo1=new demo<bb>(); demo<bb> demo2=new demo<bb>(); demo1.setE(test1); demo2.setE(test2); demo1.show(); demo2.show(); } } class demo<E>{ E e; void setE(E a){ e=a; } void show(){ String s=e.toString(); double a=Double.parseDouble(s)*2; System.out.println(a); } } class bb{ double a; bb(double a){ this.a=a; } public String toString(){ return ""+a; } }
迭代器
迭代器比手动遍历快,一般的迭代器用法
Iterator<String> iterator1=list1.iterator(); for(;iterator1.hasNext();){ String s=iterator1.next(); }
完整测试
package cgfg; import java.util.Iterator; import java.util.LinkedList; public class Test{ public static void main(String args[]){ LinkedList<String> list1=new LinkedList<String>(); for(int i=0;i<60000;i++){ list1.add(i+""); } Iterator<String> iterator1=list1.iterator(); long start=System.currentTimeMillis(); for(;iterator1.hasNext();){ String s=iterator1.next(); } long end=System.currentTimeMillis(); System.out.println(end-start); start=System.currentTimeMillis(); for(int i=0;i<list1.size();i++){ String s=list1.get(i); } end=System.currentTimeMillis(); System.out.println(end-start); } }
LinkedList<e>常用方法
public boolean add(E e) public void add(index ,E e)//在一个位置添加 public void clear()//全部清除 public E remove(int index)//按位置删除 public boolean remove(E e)//按值删除 public E get(index)//得到该位置的值 public int indexOf(E e)//得到该值的位置 public E set(int a,E e)//把 a 位置的值改为 e public int size()//返回大小 public E getFirst() public E getLast() public E removeFirst() public E removeLast() public Object clone()//返回一个克隆的链表