zoukankan      html  css  js  c++  java
  • 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的父型
     
  • 相关阅读:
    HTB-靶机-Charon
    第一篇Active Directory疑难解答概述(1)
    Outlook Web App 客户端超时设置
    【Troubleshooting Case】Exchange Server 组件状态应用排错?
    【Troubleshooting Case】Unable to delete Exchange database?
    Exchange Server 2007的即将生命周期,您的计划是?
    "the hypervisor is not running" 故障
    Exchange 2016 体系结构
    USB PE
    10 months then free? 10个月,然后自由
  • 原文地址:https://www.cnblogs.com/meitian/p/5880338.html
Copyright © 2011-2022 走看看