【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方法

List的subList方法获取子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实现

Deque是Queue的子接口,定义了所谓的“双端队列”,即从队列的两端粉笔入队和出队

如果将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;

}

}

当你感到悲哀痛苦时,最好是去学些什么东西。

【javaSE】Java泛型机制

相关文章:

你感兴趣的文章:

标签云: