• java基础十二[集合与泛型](阅读Head First Java记录)


    集合
    List
    知道索引顺序的集合,ArrayList、LinkedList、Vector三个子类实现了List接口
     
    ArrayList
    ArrayList没有排序方法,可以用Collections.sort(ArrayList对象)进行排序,但是Collections.sort()里面的ArrayList必须是String类型的,否则无法通过编译,除非该类型也继承或实现了Comparable
     
    LinkedList
    针对经常插入或删除中间元素所涉及的高效率集合
     
    Set
    去重,独一无二的,不允许出现重复的集合,TreeSet、LinkedHashSet、HashSet三个类实现了Set接口
     
    TreeSet
    有序状态保持并可防止重复
    TreeSet的值必须是实现了Comparable的类型,例如String
    TreeSet<String> tree=new TreeSet<String>();
    tree.add("hello");
    tree.add("world");
    System.out.println(tree);
     
    HashSet
    防止重复的集合,可快速寻找相符的元素
    通过hashCode()来获取对象加入位置,判断对象是否重复,hashCode()相同两个对象不一定是相等的
    用a.equals(b)来判断a和b是否相等,等价于a==b。对象相等则a.hashCode()和b.hashCode()一定相等
     
    Map
    数据由key和value组成,通过key来搜索值,两个key可以引用同一对象,但是不能有相同的key
    TreeMap、HashMap、LinkedHashMap、Hashtable实现了Map接口
     
    HashMap
    可用成对name/value来保存与取出(类似字典)
    HashMap<String,Integer> scores=new HashMap<String,Integer>();
    scores.put(“Kathy”,42);
    scores.put(“Bert”,343);
    System.out.println(scores.get(“Bert”));
    使用put(key,value)添加元素,使用get(key)返回值
     
    LinkedHashMap
    类似HashMap,蛋壳记住元素插入的顺序,也可设定成按照元素上次存取的先后来排序
     
     
    泛型
    泛型
    使用<>这组符号标识泛型的使用,泛型意味着更好的类型安全性,指定只能加入指定类型的数据,且数据出来时也是该类型的。如果没有指定泛型则可以加任何对象,类似ArrayList<Object>
     
    ArrayList指定一个泛型的例子:ArrayList<String> thisList=new ArrayList<String>
    此时ArrayList只能添加String类型的对象,且出来时仍然是String类型
    *集合都可以使用泛型
     
    泛型类型检查
    数组arry可以加入规定泛型的子类;集合ArrayList只能加入规定的泛型,规定泛型的子类不可以添加
    例如:声明ArrayList<animal>类型的方法参数,只能使用ArrayList<animal>参数,ArrayList<dog>和ArrayList<cat>都不行
     
    因为例如dog和cat都继承自animal,dog有可能有cat不存在的方法,如果调用dog自己的方法就会抛错。数组arry运行时也会有同样的问题,只不过集合(ArrayList)是在编译时进行类型检查,而数组(arry)是在运行时进行检查
     
    三种泛型
    1.只用<类型>
    例如【ArrayList<Animal> animals】
     表示只能使用类型就是Animal的对象,Animal的子类什么的都不可以,否则编译不通过
    此时可以向ArrayList中添加元素
     
    2.使用<T extends 类型>
    ArrayList<T extends Animal>
    public <T extends Animal> void takeThing(ArrayList<T> one,ArrayList<T> two)
     
    这里定义泛型的entends表示继承或者实现,所以只有只要类型继承自Animal或者实现了Animal接口的都是被允许的
    所以可以使用Animal或者它的子类cat、dog等。
    此时可以向ArrayList中添加元素
     
    3.使用万用字符?来创建泛型<? extends 类型>
    ArrayList<? extends Animal>
    public void takeThing(ArrayList<? extends Animal> one,ArrayList<? extends Animal> two)
     
    这里的extends与第2条意义一致,表示继承或接口实现
    使用<?>声明时,编译器不允许加入任何东西到集合中,我们可以调用集合中的任何方法,但是不能向集合添加东西
     
    其他说明:
    泛型还可以用<? super T>,表示使用的类型必须是T或T的父型
     
  • 相关阅读:
    试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
    git 撤销刚提交的 commint
    At least one cache should be provided per cache operation.
    @Primary注解
    怎么把sql server数据导入mysql本地数据库?
    应用程序已预编译,因此不允许使用目录“/App_Code/”
    SpringBoot学习笔记15——Dozer的使用用来两个对象之间属性转换的工具
    Invalid packaging for parent POM (pom.xml), must be "pom" but is "jar" @ pom.xml
    浏览器调试console的多种用法
    bug本天成,妙手偶得之。
  • 原文地址:https://www.cnblogs.com/meitian/p/5880338.html
Copyright © 2020-2023  润新知