首页 > 其他分享 >泛型

泛型

时间:2022-10-14 11:00:29浏览次数:48  
标签:map System println 泛型 public out

泛型

  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.  

标签:map,System,println,泛型,public,out
From: https://www.cnblogs.com/lyhidea/p/16790918.html

相关文章

  • C#中的泛型详解
    泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(typeparameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其......
  • Unity泛型单例模式
    usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassSingleton<T>:MonoBehaviourwhereT:Singleton<T......
  • 泛型
    类型参数的好处程序更已读,可以明显知道代表的什么类型数据更安全,在存储可以根据类型检查,读取的时候不用强制类型转换泛型类publicclassPair<T>{privateTfirs......
  • java中的泛型总结
    要我直接说出泛型是个what我还真讲不出来,这里先由一道问题引入:定义一个坐标点类,要求能保存各种类型的数据,如:整形,浮点型,和字符串类型既然变量类型起先不确定,那么很容易想到......
  • Golang 泛型使用
    Golang泛型泛型函数定义funcFunc1[Tint|int32|int64|float32|float64](a,bT)T{ returna+b}使用Func1[int32](1,2)但是这样好像看起来很丑,所......
  • 浅谈Go1.18版本新特性——泛型
    泛型Generics:引入了对使用参数化类型的泛型代码的新支持,达到了算法可复用的目的。两数求和,泛型函数的使用假设我们要计算两个数的和,函数可以这样子写funcAdd(a......
  • KTV和泛型(3)
    泛型除了KTV,还有一个让人比较疑惑的玩意,而且它就是用来表达疑惑的:?虽然通过泛型已经达到我们想要的效果了,例如:List<String>list=newArrayList<String>();这样就可以放心......
  • KTV和泛型(1)
    说起KTV恐怕没几个人不知道的。虽然这玩意没有过去那么火热了,但喝了酒之后再去飙几个高八度的爆破音还是蛮爽的。但Java里面也有一个基础特性用到了KTV——泛型。泛型,它的作......
  • KTV和泛型(3)
    泛型除了KTV,还有一个让人比较疑惑的玩意,而且它就是用来表达疑惑的:?虽然通过泛型已经达到我们想要的效果了,例如:List<String>list=newArrayList<String>();这样就可以......
  • KTV和泛型(2)
    很多使用泛型的小伙伴,都会有一个疑惑:为什么有的方法返回值前带<T>、<K,V>之类的标记,而有的方法返回值前又什么都不带呢?就像这样://实体基类classEntity{publicS......