飞道的博客

CS61B - Lec 11 - Libraries

514人阅读  评论(0)


这一章好起来了(可能因为马上Midterm了老师讲少了一点)

Java Libraries

回忆一下目前我们学了什么。

  1. Java基础入门
  2. 引用与迭代
  3. 建立IntList
  4. 建立SLList
  5. 建立AList
  6. 建立DequeList
  7. Testing
  8. Interface Inheritance and Implement Inheritance

实际上,建立这些List只是为了让我们了解原理,java的libraries里就已经包含这些类。如何正确运用库中的内容也是学习一种编程语言很重要的一方面。

Abstract data type和以前提到的interface基本一致,也是提供一个接口。下面举个栗子

首先,建立一个getWords方法

public static List<String> getWords(String inputFilename) {
        List<String> words = new ArrayList<String>();
        In in = new In(inputFilename);
        while (!in.isEmpty()) {
            String nextWord = cleanString(in.readString());
            words.add(nextWord);
        }
        return words;
    }

很简单。其中的cleanString是一个格式规范方法,功能是全变小写,删除除了字母之外的字符:

private static String cleanString(String s) {
        return s.toLowerCase().replaceAll("[^a-z]", "");
    }

然后,统计不同的单词数量,用到了Set类型:

public static int countUniqueWords(List<String> words) {
        Set<String> wordSet = new HashSet<String>();
        for (String ithWord: words) { //Advanced for
            wordSet.add(ithWord);
        }
        //Set<String> wordSet = new HashSet<>(words); 也可

        return wordSet.size();

最后,统计特定单词的数量,用到了Map类型,相当于Python中的字典:

public static Map<String, Integer> collectWordCount(List<String> words, List<String> target) {

        /** Java's dictionary initiated */
        Map<String, Integer> counts = new HashMap<>();
        for (String t: target) {
            counts.put(t, 0);
        }

        for (String s: words) {
            if (counts.containsKey(s)) {
                int oldCount = counts.get(s);
                counts.put(s, oldCount + 1);
            }
        }
        return counts;
    }

和Python字典初始化对比,发现略繁琐。当然java也有它的好处,Map类型多种多样,HashMap TreeMap等等,容纳的数据类型也可选择。

Java中的各种数据类都继承自一个叫Collection的interface,再下层还有更多的分支。有了这些继承关系,我们可以实现Inheritance系列lecture里所讲的这些优势。

据说用java开发项目更efficient,目前还没感觉,因为还没搞过。。。

Interfaces and Abstract Classes


interface中的方法默认都是public的。

可以包括public的static变量,很好理解。说明这个变量在各个继承类中都起作用。

interface不能初始化,可以有abstract methods也可以用default关键字定义implement methods,不能有instance varibles。

abstract class同样也不能初始化,但是implement方法不用关键字,而abstract方法需要abstract关键字。可以有任意类型的变量。

答案是2.DeluxeModel继承自PaperShredder,只override了shredAll方法,并且还有一个abstract方法connectToWifi,所以DCX9000需要override shred和connectToWifi方法。

Packages

打包

导入package


转载:https://blog.csdn.net/fourier_transformer/article/details/105195505
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场