java集合中的泛型的使用

-----------------------java集合中的泛型的使用------------------------

我们在项目中使用集合基本99%都是在集合中存储同一种数据类型。既然我们在集合中存储同一种数据类型,我们事先一定知道这个集合中要存储什么数据类型。我们就可以预先去指定要存储的数据类型。

泛型:就是提前指定要操作的数据类型。

语法:

 在定义集合的时候

 List<数据类型>变量名= new ArrayList<数据类型>();


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

例子:

public classGeneric {

  

  public static void main(String[]args) {

     //集合中可以存储任何数据类型

     //实际情况都是在集合中存一种数据类型

     //我们可以通过泛型来指定这种数据类型

      Collection<String>sc=new ArrayList<String>();

     sc.add("曹盖");

     //通过泛型指定添加类型后不能再添加其他类型

     //sc.addAll(1);

     

     //指定集合中能添加学生类的对象

      Collection<Student>sc1=new ArrayList<Student>();

     sc1.add(new Student(1,"宋江",1,newDate()));

      System.out.println(sc1);

     

     //在创建一个集合

      Collection<Student>sc2=new ArrayList<Student>();

     sc2.add(new Student(1,"宋江",1,newDate()));

      System.out.println(sc2);

     

     //sc2加入到sc1

     sc1.addAll(sc2);

      System.out.println(sc1);

     

     //创建一个小学生集合

      Collection<ChildStudent> csc=new ArrayList<ChildStudent>();

      ChildStudentcstu=new ChildStudent();

     cstu.setLhq(13f);

     cstu.setId(3);

     cstu.setName("小明");

     cstu.setGender(1);

     cstu.setBirthday(newDate());

     csc.add(cstu);

     

     sc1.addAll(csc);

      System.out.println(sc1);

   }

}

结果:

[Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 22:46:31 CST 2018]]

[Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 22:46:31 CST 2018]]

[Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 22:46:31 CST 2018],Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 22:46:31 CST2018]]

[Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 22:46:31 CST 2018],Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 22:46:31 CST2018], ChildStudent [lhq=13.0, toString()=Student [id=3, name=小明, gender=1, birthday=Sat Mar 24 22:46:31 CST 2018]]]

 

 

迭代器也带泛型:

例子:

 

public class GenericDemo1 {

  

   public static void main(String[] args) {

      //集合中可以存储任何数据类型

      //实际情况都是在集合中存一种数据类型

      //我们可以通过泛型来指定这种数据类型

      Collection<String>sc = new ArrayList<String>();

        sc.add("罩盖");

        sc.add("鲁智深");

        sc.add("林冲");

        sc.add("王伦");

       

        //迭代器也带泛型

        Iterator<String> iter =sc.iterator();

        while(iter.hasNext()) {

        Stringstr = iter.next();

        System.out.println(str);

        }

       

       System.out.println("-------------------------");

       

        //创建一个List集合

        List<String> list = newArrayList<String>();

        list.add("罩盖");

        list.add("鲁智深");

        list.add("林冲");

        list.add("王伦");

       

        //使用size()方法遍历

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

        Stringstr2 = list.get(i);

        System.out.println(str2);

      }

       

       

   }

}

 

结果:

罩盖

鲁智深

林冲

王伦

-------------------------

罩盖

鲁智深

林冲

王伦

------------------------------自定义泛型---------------------------

在自定义泛型时

语法:class/interface类名/接口名<T>{

}

T只是泛型的一个标准,使用什么字符都可以,但是都要大写,不要使用特殊字符,建议用T


创建一个自定义泛型类:

public class GenericTest<T>  {

  

  privateT[]arr;

 

  publicT[] getArr() {

     returnarr;

   }

 

  public void setArr(T[]arr) {

     this.arr=arr;

   }

  

  publicT getByIndex(intindex) {

     return arr[index];

   }

}

-------------------------------------

测试自定义泛型:

public class GenericTestMain  {

  

  public static voidmain(String[]args) {

     

      GenericTest<String>gt=newGenericTest<String>();

     

      String[]arr=new String[3];

     arr[0] ="蔡京";

     arr[1] ="高俅";

     arr[2] ="高衙内";

     

     gt.setArr(arr);

     

      Stringstr=gt.getByIndex(2);

      System.out.println(str);

      System.out.println("------------------");

     

      GenericTest<Student>gt1=newGenericTest<Student>();

      Student[]stuArr=new Student[3];

     stuArr[0] =new Student(1,"蔡京", 1,newDate());

     stuArr[1] =new Student(2,"蔡九", 1,newDate());

     stuArr[2] =new Student(3,"潼关", 1,newDate());

     

     gt1.setArr(stuArr);

     

      Students=gt1.getByIndex(2);

      System.out.println(s);

   }

}

结果:

高衙内

------------------

Student [id=3, name=潼关, gender=1, birthday=Sat Mar 24 23:07:21 CST 2018]

 

 

---------------------------增强for循环---------------------------------

jdk1.5以后出现了增强for循环

对数组、集合来做遍历

语法:

  For(数据类型变量名集合变量名){

             //

}

遍历时存在并发问题


例子:

/**

 * 增强for循环

 * @作者 李昆鹏

 *

 */

public class ForDemo {

     

      public static void main(String[] args) {

     

           Collection<String> sc = new ArrayList<String>();

        sc.add("罩盖");

        sc.add("鲁智深");

        sc.add("林冲");

        sc.add("王伦");

       

        //增强for循环

       /**

        *  语句:

        *   for(数据类型变量集合){

        *

        *   }

        */

       

       //缺点:增强的for循环有并发问题存在

        for(String s:sc) {

              System.out.println(s);

        }

       

        Collection<Student> sc1 = newArrayList<Student>();

        sc1.add(new Student(1, "宋江", 1, new Date()));

        sc1.add(new Student(2, "蔡京", 1, new Date()));

        sc1.add(new Student(3, "戴宗", 1, new Date()));

        sc1.add(new Student(4, "张顺", 1, new Date()));

       

        for(Student s:sc1) {

              System.out.println(s);

        }

      }

}

 

结果:

罩盖

鲁智深

林冲

王伦

Student [id=1, name=宋江, gender=1, birthday=Sat Mar 24 23:19:48 CST 2018]

Student [id=2, name=蔡京, gender=1, birthday=Sat Mar 24 23:19:48 CST 2018]

Student [id=3, name=戴宗, gender=1, birthday=Sat Mar 24 23:19:48 CST 2018]

Student [id=4, name=张顺, gender=1, birthday=Sat Mar 24 23:19:48 CST 2018]

 

 


版权声明:本文为weixin_41547486原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。