标签:泛型
为什么使用泛型:参数化类型 最大的优点是能在编译时检测出错误 。从jdk1.5开始
public class generic_2<E> {
private java.util.ArrayList<E> list=new java.util.ArrayList<E>();
public int getSize(){
return list.size();
}
public E peek(){
return list.get(getSize()-1);
}
public void push(E o){
list.add(o);
}
public E poop(){
E o=list.get(getSize()-1);
list.remove(getSize()-1);
return o;
}
public boolean isEmpty(){
return list.isEmpty();
}
}如果有多个参数的话这样<E1,E2,E3>
泛型方法
public static void main(String[] args) {
Integer[] integers={1,2,5,6,6,8};
String[] strings={"2fs","23fds","fdsf","dfd"};
generic_1.<Integer>print(integers); //这样就是受限的
generic_1.<String>print(strings);
}
public static <E> void print(E[] list){
for(int i=0;i<list.length;i++){
System.out.println(list[i]+"");
}
}原始类型和向后兼容
什么是原始类型: 说白了就是Object 向后兼容是它的子类型
List list=new ArrayList();
list.add("dadsfdddddddddddda");
System.out.println(list.get(0));
public static <T> void add( generic_2<T> stack1 , generic_2<? super T> stack2 ){
while(!stack1.isEmpty()){
stack2.push(stack1.poop());
}
}
6.(二维数组最大元素)
public static <E extends Comparable<E>> E max(E[][] list);
package generic_21;
import java.util.Arrays;
public class ZHomework {
public static void main(String[] args) {
/*二分查找
Integer[] list=new Integer[]{1,4,5,6,7,8,12};
Double[] list2=new Double[]{2.4,3.4,5.6,6.7};
Integer key=6;
Double key2=3.4;
Integer answer=ZHomework.<Integer>binarySearch(list, key);
Integer answer2=ZHomework.<Double>binarySearch(list2, key2);
if(answer!=-1){
System.out.println("the key of "+ key + " in array location is "+answer);
}
if(answer2!=-1){
System.out.println("the key of "+ key2 + " in array location is "+answer2);
}
*/
/*选择排序
Integer[] list=new Integer[]{11,4,55,6,7,18,2};
ZHomework.<Integer>selectionSort(list);
System.out.println(Arrays.asList(list));
*/
/**插入排序
Integer[] list2=new Integer[]{11,4,55,6,7,18,2};
ZHomework.<Integer>insertionSort(list2);
System.out.println(Arrays.asList(list2));
*/
/*一位数组最大值
Integer[] list=new Integer[]{11,4,55,6,7,18,2};
Integer max=ZHomework.<Integer>max(list);
System.out.println(max);
*/
Double[][] list=new Double[][]{{11.3,45.4,56.2,45.2},{13.3,45.4,6.2,45.2},{1.3,45.4,6.2,45.2},{11.3,5.4,6.2,4.2}};
System.out.println(ZHomework.<Double>max(list));
}
/**
* 泛型二分法查找 针对排序好的
* @param <E>
* @param list
* @param key
* @return
*/
public static <E extends Comparable<E>> int binarySearch(E[] list,E key){
int start=0;
int end =list.length-1;
while(start<=end){
int middle=(start+end)/2;
if(key.compareTo(list[middle])>0){
start=middle+1;
}else if(key.compareTo(list[middle])<0){
end=middle-1;
}else{
return middle;
}
}
return -1;
}
/**
* 泛型选择排序法
* @param <E>
* @param list
*/
public static <E extends Comparable<E>> void selectionSort(E[] list){
if(list.length<=0||list==null){
return ;
}
for(int i=0;i<list.length;i++){
int min=i;
for(int j=i+1;j<list.length;j++){
if(list[min].compareTo(list[j])>0){
min=j;
}
}
if(min!=i){
E tem=list[i];
list[i]=list[min];
list[min]=tem;
}
}
}
/**
* 泛型插入排序法
* @param <E>
* @param list
*/
public static <E extends Comparable<E>> void insertionSort(E[] list){
if(list==null||list.length<=0){
return;
}
for(int i=1;i<list.length;i++){
E tem=list[i];
int position=i; //记录点
for(int j=i-1;j>=0;j--){ //将当前位置之前的数组做处理
if(tem.compareTo(list[j])<0){
list[j+1]=list[j];
position--;
}else{
break;
}
}
list[position]=tem;
}
}
/**
* 一位数组最大值
* @param <E>
* @param list
* @return
*/
public static <E extends Comparable<E>> E max(E[] list){
E max=list[0];
for(int i=1;i<list.length;i++){
if(max.compareTo(list[i])<0){
max=list[i];
}
}
return max;
}
/**
* 二维数组最大值
* @param <E>
* @param list
* @return
*/
public static <E extends Comparable<E>> E max(E[][] list){
E max=list[0][0];
for(int i=0;i<list.length;i++){
for(int j=0;j<list[i].length;j++){
if(max.compareTo(list[i][j])<0){
max=list[i][j];
}
}
}
return max;
}
}
还有一些不是很懂,说不出来的感觉。 不过还好 。 参照书籍《Java语言程序设计·进阶篇》
我是菜鸟,我在路上。
标签:泛型
原文地址:http://blog.csdn.net/cjvs9k/article/details/45643089