【javaSE】Java泛型机制

************************************************************************   ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************

Java泛型机制

泛型是JavaSE5 引入的特性,泛型的本质是参数化类型。应用场景:在类,接口和方法的定义过程中,所操作的数据类型被传入的参数指定。

例如在ArrayList类的定义中,<E>中的E为泛型参数,在创建对象是可以将类型作为参数传递,此时定义中的所有E将被替换为传入的参数;

ArrayList<String> list=new ArrayList<String>();创建对象,其中add的参数类型,get方法的返回值都替换为String

若使用list.add(100)Java编译错误,因为add参数为String类型。

所有的集合类型都带有泛型参数,这样创建集合对象的时候可以指定放入结婚中的对象类型。而且,java编译器会根据此类型进行类型检查。

通过泛型,可以创建专门存储某个对象的List集合,例如

List<Point> pointList=new LinkedList<Point>();

创建迭代器:

Iterator<Point> it=pointList.iterator();

5.1 增强型For循环语句

         javaSE5推出增强型For循环,可以应用数组和集合的遍历。

         for(Point P: pointList){

         p.toString

}

理解为每次从pointList取出一个Point对象,然后赋值给循环遍历p;实际上编译的时候,增强型For循环被转换为迭代器模式,但是不能再循环中进行删除操作。

5.2 List高级

5.2.1 subList方法

ListsubList方法获取子List,子List和原List占用相同的存储空间,对子List的操作会影原List,例如:

subList=list.subList(3,8);

subList.set(I,subList.get(I)*10);

5.2.2 Queue接口及LinkedList实现

         队列Queue是特殊的线性表,限制访问方式为:FIFO,即只能从一端offer添加元素,从另外一端poll取出元素

         javaSE提供了Queue接口,同事使用LinkedList实现了改接口,Queue经常进行插入删除操作,例如:

         Queue<String> queue=new LinkedList<String>();

         Boolean offer(E e);将一个对象添加到队尾,如果添加成功则返回true,例如

         queue.offer(“A”);queue.offer(“B”);

         E peek();返回队首元素,但是不删除

         E poll(); 弹出队首元素,即从队首删除并且返回

5.2.3 Deque接口及LinkedList实现

DequeQueue的子接口,定义了所谓的双端队列,即从队列的两端粉笔入队和出队

如果将Deque限制为只能从一端入队和出队,则可以实现栈Stack的数据结构。

5.3 List常用算法

5.3.1Comparable接口

针对对象数组或者集合中的元素进行排序时候,需要确认对象的元素的比较逻辑

public interface Comparable<T>{

         public int compareTo(T t)

}

Comparable接口定义的compareTo方法,逻辑为:

l  f返回正数,表示this大于参数对象;

l  返回负数表示this小于参数对象

l  返回0表示this等于参数对象

两种应用场景;

(1)     JDK的某些API调用Compareable接口中的方法了解对象的大小关系。

(2)     Java类实现COmparable接口编写该类对象比较逻辑;

实例的例子:

         Point实现Comparable接口,则泛型参数为Point类型,使得compareTo方法的参数也为Point类型,

         public class Point implements Comparable<Point>{

                   private int x,int y;

public int compareTo(Point p){

         int r1=x*x+y*y;

         int r2=p.x*p.x+p.y*p.y;

         return r1-r2;

}

}

注意:在编写compareTo方法的时候应该注意和equals方法的一致性;

************************************************************************   ****原文:blog.csdn.net/clark_xu 徐长亮的专栏 ************************************************************************

你可能感兴趣的:(泛型,subList,增强型For循环,Comparable接口,Queue接口)