泛型(Generic)小结

泛型(Generic)小结

JDK5以前,对象保存到集合中就会失去其特性,取出时通常要程序员手工进行类型的强制转换,这样不可避免就会引发程序的一些安全性问题。例如:

ArrayList list = new ArrayList();

list.add("abc");

Integer num = (Integer) list.get(0);  //运行时会出错,但编码时发现不了

list.add(new Random());

list.add(new ArrayList());

for(int i=0;i<list.size();i++){

             (?)list.get(i);          //此处取出来的对象应转换成什么类型

}

 JDK5中的泛形允许程序员在编写集合代码时,就限制集合的处理类型,从而把原来程序运行时可能发生问题,转变为编译时的问题,以此提高程序的可读性和稳定性(尤其在大型程序中更为突出)

注意:泛型是提供给javac编译器使用的,它用于限定集合的输入类型,让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛形的java程序后,生成的class文件中将不再带有泛形信息,以此使程序运行效率不受到影响,这个过程称之为擦除

泛形的基本术语,以ArrayList<E>为例:<>念着typeof

         ArrayList<E>中的E称为类型参数变量

         ArrayList<Integer>中的Integer称为实际类型参数

         整个称为ArrayList<E>泛型类型

         整个ArrayList<Integer>称为参数化的类型ParameterizedType

定义泛型 

1、在方法上定义

       public <T> void test1(T l){  //应用的对象}

       public  static <T> void test2(T l){  //应用的对象}

       public <T> int test3(T l){  //应用的对象

              return 0;

       }

       public <T> List<T> test4(){

              return null;

       }

2、在类上定义泛型

public class Demo03<T,E> {

           public void test1(T entity){ }

           public List<T> test2(){

              return null;

           }

           注意:在类上声明的泛型不能够用在static修饰的方法上

          public  static <TT> void test2(TT l){  //应用的对象}

}

List数组

@Test

       public void test1() {

              List<String> list = new ArrayList<String>();

              list.add("adc");

              list.add("def");

              list.add("cde");

              Iterator<String> it = list.iterator();

              while (it.hasNext()) {

                     String value = it.next();

                     System.out.println(value);

              }

              for(String value:list){

                     System.out.println(value);

              }

       }

Map

@Test

       public void test2() {

              Map<Integer, String> map = new HashMap<Integer, String>();

              map.put(1, "redarmy");

              map.put(2, "mj");

              map.put(3, "xiaoshenyang");

              Set<Map.Entry<Integer, String>> entries = map.entrySet();

              for (Map.Entry<Integer, String> entry : entries) {

                     System.out.println(entry.getKey());

                     System.out.println(entry.getValue());

              }

       }

@Test

       public void test3() {

              Map<Integer, String> map = new HashMap<Integer, String>();

              map.put(1, "redarmy");

              map.put(2, "mj");

              map.put(3, "xiaoshenyang");

              Set<Integer> keys = map.keySet();

              Iterator<Integer> it = keys.iterator();

              while (it.hasNext()) {

                     int key = it.next();

                     System.out.println(key + "  " + map.get(key));

              }

              for(Integer key : keys){

                     System.out.println(key + "  " + map.get(key));

              }

       }

@Test

       public void test4(){

//       List<String> list = new ArrayList<Object>();

//List<Object> list1 = new ArrayList<String>();

         //上边两个表达式不正确jdk1.4之前没有泛型  jdk1.5之后才有泛型的

              List<String> list = new ArrayList();

              List list1 = new ArrayList<String>();

             

       }

/** 实现一个简单的数组位置的交换 */
          public static <T> void test(T arr[],int i,int j){
                 T temp = arr[i];
                 arr[i]=arr[j];
                 arr[j]=temp;
          }
 /* 实现数组的倒序 */
        public static <T> void test1(T arr[]) {
               int startindex = 0;
               int endindex = arr.length - 1;
               for (;;) {
                      if (startindex >= endindex) {
                             break;
                      }
                    T temp = arr[startindex];
                    arr[startindex] = arr[endindex];
                    arr[endindex] = temp;
                    startindex++;
                    endindex--;
               }
      }
      public static void main(String[] args) {
              Integer arr[]={1,2,3,4};
             /*test(arr,0,2);
             for(int ar:arr){
                   System.out.print("["+ar+","+"]");
           }*/
         test1(arr);
              for (int ar : arr) {
                    System.out.print("[" + ar + "," + "]");
              }

             testChange();
         }
         public static void testChange(){
                 int i=10;
                 int j=111;
                 i=i^j;
                 j=i^j;
                 i=i^j;
                System.out.println("i="+i+"   "+"j="+j);
          }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值