泛型

泛型

  1. 常见形式有泛型类,泛型接口,泛型方法

  2. 语法

  3. <T....>T称为类型占位符,表示一种引用类型

  4. 好处:

    1. 提高代码的重用性

    2. 防止类型转换异常,提高代码的安全性

  5. 泛型类

    /**
     * 泛型类
     * 语法:类名<T>
     *     T是类型占位符,表示一种引用类型,如果编写多个使用逗号隔开
     * @param <T>
     */
    public class MyGeneric<T> {
        //使用泛型
        //1.创建变量
        T t;
        //2.泛型作为方法的参数
        public void show(T t){
            System.out.println(t);
        }
        //3.泛型作为方法的返回值
        public T getT(){
            return t;
        }
    ​
    }
  6. 泛型接口及实现类

    public interface MyInterface<T> {
        String name="李永辉";
        T server(T t);
    }
    ---------------------------------------------------------------------
    public class MyInterfaceImpl implements MyInterface<String>{
    ​
    ​
        @Override
        public String server(String s) {
            System.out.println(s);
            return s;
        }
    }
  7. 泛型方法

    /**
     * 泛型方法
     * 语法:<T>返回值类型
     */
    public class MyGenericMethod {
        public <T> T show(T t){
            System.out.println("泛型方法"+t);
            return t;
        }
    }
  8. 泛型集合

    1. 概念:参数化类型,类型安全的集合,强制集合元素的类型必须一致

    2. 特点:

      1. 遍历时即可查询,而非运行时抛出异常

      2. 访问,不必类型转换

      3. 不同类型之间引用不能相互赋值,泛型不存在多态

        public static void main(String[] args) {
            ArrayList<Student> studentArrayList=new ArrayList<>();
            Student s1=new Student("李永辉",2);
            Student s2=new Student("李永辉",2);
            Student s3=new Student("李永辉",2);
            studentArrayList.add(s1);
            studentArrayList.add(s2);
            studentArrayList.add(s3);
            Iterator<Student> iterator = studentArrayList.iterator();
            while (iterator.hasNext()){
                Student next = iterator.next();
                System.out.println(next.toString());
            }
        }
  9. Set子集合

    1. HashSet(重点):

      1. 基于HashCode实现元素不重复

      2. 当存入元素的哈希码相同时,会调用equlas进行确定,如果为true,这后者无法进入

      3. 特点:唯一,无序

      4. Set接口:可以直接使用Collection接口声明的方法,但是木get(index)方法来活得对象,遍历时建议使用增强for循环,或者迭代器

    2. HashMap(重点):

      1. 特点:

        1. 线程不安全,运行效率快,允许用null作为key或者value

      2. key对应的value

      3. 代码实现

         public static void main(String[] args) {
                HashMap<String,String> map=new HashMap<>();
                map.put("1","我是谁");
                map.put("2","李永辉");
                map.put("3","那你说");
                map.put("4","沙雕");
                map.put("5","葛博建是傻逼");
                System.out.println("元素个数"+map.size());
                System.out.println(map.toString());
                //删除
                map.remove("1");
                System.out.println("元素个数"+map.size());
        //        Set<String> keySet = map.keySet();
                for (String key:map.keySet()) {
                    System.out.println(key+"------"+map.get(key));
                }
                System.out.println("---------------");
                Set<Map.Entry<String, String>> entries = map.entrySet();
                for (Map.Entry<String,String> entry:entries) {
                    System.out.println(entry.getKey()+"---"+entry.getValue());
                }
                //判断
                System.out.println(map.containsKey("1"));
                System.out.println(map.containsValue("李永辉"));
            }
      1. 练习(创建Student类,姓名String,学号int)

        public static void main(String[] args) {
                //创建集合
                HashMap<Student1, String> student1StringHashMap = new HashMap<>();
                //添加元素
                Student1 s1=new Student1("孙悟空",100);
                Student1 s2=new Student1("猪八戒",101);
                Student1 s3=new Student1("沙和尚",102);
                student1StringHashMap.put(s1,"杭州");
                student1StringHashMap.put(s2,"北京");
                student1StringHashMap.put(s3,"山东");
                System.out.println("元素个数:"+student1StringHashMap.size());
                System.out.println(student1StringHashMap.toString());
                //遍历使用keySet()遍历
                for (Student1 student1:student1StringHashMap.keySet()) {
                    System.out.println(student1.toString());
                }
                System.out.println("==============");
                //迭代器遍历entrySet()
                for (Map.Entry<Student1,String> entry:student1StringHashMap.entrySet()) {
                    System.out.println(entry.toString());
                }
        ​
            }
      2.  
posted @ 2022-10-14 10:54  菜鸡前来  阅读(19)  评论(0编辑  收藏  举报