• 《Java大学教程》—第17章 Java聚焦类框架


    由所有聚焦类构成,在java.util包中,包含三个重要接口:
    *    List列表:元素为单个对象,元素在列表中是有序、可重复
    *    Set集合:元素为单个对象,元素在集合中无序、不可重复
    *    Map映射:元素为成对对象(第一个对象是关键字,第二个对象是值),元素在映射中无序,关键字不可重复
    注:JCF不能存储基本数据类型。

    17.2 List接口和ArrayList类
    *    ArrayList类
    *    LinkedList类

    17.2.1    泛型(generics):允许设定存在在特定聚焦类对象中的对象类型。可以将一个或多个类型作为参数发送到一个类(或接口)中,亦被称为参数化类型。
    优点:允许编译检查类型;不必进行对象类型转换;避免产生ClassCastException异常。

    17.2.2    使用接口类型代替实现类型作为函数的形参
    允许将来修改实现的方式而不必修改形参中对象的类型。

    17.2.3    List接口的方法
    操作:增加(add)❶将元素插在列表的末尾;❷将元素插入到列表中指定的位置。
    注:使用索引插入参数到列表中时,必须保证索引是当前列表中的有效位置
    修改(set)、删除(delete)
    列表:显示(toString)、总数(size)、是否空(isEmpty)
    元素:位置(indexOf)返回指定对象在列表中第一次出现时的索引。
    获取(get)、存在(contains)

    17.3    增强的for循环:数组、List接口、Set接口
    不能用于修改或删除原始集合中的元素,因为编译可以通过,但是有可能导致程序结果不可预测。

    17.4    Set接口和HashSet类
    *    HashSet类
    *    TreeSet类

    17.4.1    Set接口的方法
    操作:增加和修改(add)、删除(remove)
    列表:显示(toString)、总数(size)、是否空(isEmpty)
    元素:获取(get)、存在(contains)

    17.4.3    Iterator接口:用于修改和删除Set中的元素
    使用Set对象中提供的Iterator对象。

    17.5    Map接口和HashMap类
    *    HashMap类
    *    TreeMap类

    Map接口的方法:
    操作:增加和修改(put)、删除(remove)
    元素:关键字存在(containsKey)、值存在(containsValue)、值获取(get)

    17.6    JCF中使用自定义类
    方法重写:toString();    equals();    hashCode()

    自测题:
    1. 三种接口的区别:
    *    List列表:元素为单个对象,元素在列表中是有序、可重复
    *    Set集合:元素为单个对象,元素在集合中无序、不可重复
    *    Map映射:元素为成对对象(第一个对象是关键字,第二个对象是值),元素在映射中无序,关键字不可重复

    2.    Map<String, Student> javaStudents = new HashMap<String, Student>();
    a)    允许将来修改实现的方式而不必修改形参中对象的类型。

    b)    可以将一个或多个类型作为参数发送到一个类(或接口)中,亦被称为参数化类型。
    优点:允许编译检查类型;不必进行对象类型转换;避免产生ClassCastException异常。

    c)    javaStudents.put("U0012345","Fadi");
    javaStudents定义的是Student类型,不能接收String类型的数据。

    3.    StockItem类
    a)   

    public String toString(){
        return "("+stockNumber+","+name+","+price+","+totalStock+")
    ";
    }

    b)

    public boolean equals(Object objIn){
        StockItem st = (StockItem) objIn;
        return stockNumber.equals(st.stockNumber);
    }

    c)

    public int hashCode(){
        return stockNumber.hashCode();
    }

    4.
    a)

    String tmpString;
        boolean first=true;
        if (regNums.size()==0){
            tmpString="{}";
        } else {
            StringBuilder sb = new StringBuilder();
            for (String item: regNums){
                if (first)    {
                    sb.append("{"+item);
                    first = false;
                } else {
                    sb.append(","+item);
                }
            }
            sb.append("}");
            System.out.println(sb);

    b)
    Iterator<String> elements = regNums.iterator();
        while(elements.hasNext()){
            String item = elements.next();
            if (item.charAt(item.length()-1)=='S'
                elements.remove();
        }

    编程练习:代码附件
    1.    NameStack.java    NameStackException.java    NameStackTest.java
    a)    因为需要可变大小的存储空间,而存储的对象必须是有序的,但是是可以重复的。

    2.    CarRegister.java    CarRegisterException.java        CarRegisterTest.java
    a)    因为需要可变大小的存储空间,而存储的对象可以是无序的,但是必须惟一。

    3.    Book.java        Library.java    LibraryTest.java

    4.    Bank.java        BankAccount.java        BankTest.java
    a)    HashMap类适合代替数组实现Bank类。因为其可以满足成对对象集合的需要,还可以确定关键字。

  • 相关阅读:
    Markdown基本语法学习
    gauge自动化测试框架(二)
    初识gauge自动化测试框架
    火狐浏览器历代版本下载地址
    selenium + python实现截图并且保存图片
    Python搭建简易HTTP服务(3.x版本和2.x版本的)
    ((0.1+0.7)*10) = ?
    从apache mod_php到php-fpm[转]
    Web API文档生成工具apidoc
    微信支付获取 prepay id 偶尔失败问题【转】
  • 原文地址:https://www.cnblogs.com/zhuyx/p/10401913.html
Copyright © 2020-2023  润新知