云优采集接口(L16事例学习:JAVA的采集接口如果没有完全理解JAVA)

优采云 发布时间: 2021-11-27 21:08

  云优采集接口(L16事例学习:JAVA的采集接口如果没有完全理解JAVA)

  L16案例学习:JAVA的采集界面如果你不完全理解JAVA材料的决定性部分,你将无法成为一个称职的JAVA程序员。JAVA语言书中对所有最基本的类型和相应部分的介绍都有详细的介绍。文件夹java.util 提供了采集——组、列表和图——您应该了解这些数据结构的优点。文件夹 java.io 也很重要。您可以大致了解和了解文件中的java是什么,它的需求和开发等。在本章中,我们将讨论 java.util 的设计,它通常被称为 java 集合 API。学习它很有价值,不仅是因为采集 类非常有用,还因为API 是一个设计非常好的代码示例。这很容易理解,同时也很容易证明。API 代码是由 Joshua Bloch 编写的,他还出版了我们开始本课程时推荐的 Effective Java 一书。同时,几乎所有复杂的原创程序都有API,所以如果你认真学习API,你会对你没有仔细考虑的程序代码有更广泛的了解。其实可以毫不夸张地说,如果你能指定某个类型的所有操作,你就已经完全掌握了java的概念。并且您将对您没有仔细考虑的程序代码有更广泛的了解。其实可以毫不夸张地说,如果你能指定某个类型的所有操作,你就已经完全掌握了java的概念。并且您将对您没有仔细考虑的程序代码有更广泛的了解。其实可以毫不夸张地说,如果你能指定某个类型的所有操作,你就已经完全掌握了java的概念。

  我们没有时间讨论所有的话题,但我们会触及其中的大部分。其中一些,例如重载和同步,超出了本课程的范围。16.1 类组织的类型 简而言之,API 提供了三种类型的集合:组、列表和图。该组负责采集 元素,但不包括元素的数量和顺序。每个元素只在或不在某个组中。列是元素的序列,因此它包括元素的顺序和数量。图是键和属性值的集合:它有一组键,每个键都有一个唯一的属性值。API 使用接口来组织它的所有类——各种类型的规范——以及各种单独的工具来组织类。该图反映了所选类和接口的一些示例。采集 界面捕获常见且合适的列和组,但没有图形,我们将使用非正式界面。集合而不是图形。SortedMap 和 SortedSet 用于为地图和组提供附加操作以按特定顺序检索元素。可实现的类,比如LinkedList,都是建立在骨架图的上半部分,比如AbstractList,来整体展示它们的继承关系。这种接口和类的并行结构是非常重要的结构,值得学习。许多新程序员在应该使用接口的时候更喜欢使用简单的类,但一般来说,使用接口比使用简单的类要好。将现有的类样式更新和扩展为新的类并不容易,但将类实现为新的接口很容易。

  Bloch 指出,结合两种方法的优点的方式是使用骨架图的实现类,就像他在这里列出的 API 一样。您可以获得基本规范接口的优点和与实现相关的共享代码以及汇总类的优点。JAVA API 文档中有每个 JAVA 接口的非正式规范。这很重要,因为他告诉每个类的用户他们期望使用的各种界面工具。如果使用类,则必须对其进行声明并使其符合规范 List。例如,您必须确保类的工具符合规范,否则它将不会以程序员期望的方式运行。这些规格基本上是不完整的。具体类也有规范,其中包括几个接口规范的详细信息。List 接口没有指定是否可以存储空元素,但是 ArrayList 和 LinkList 明确声明空是非法的。HashMap 允许空关键字和空属性值,而 HashMap 不允许它们。当你编写代码并使用采集 类时,你应该通过一个通用的接口或类来创建一个对象。例如,List p=new LinkedList(); 比下一个形式 LinkedList p=new LinkedList(); 如果你用之前的代码编译,你可以很容易地改变不同的队列实现: List p=new ArrayList(); 因为所有的代码都依赖于 p 队列。HashMap 允许空关键字和空属性值,而 HashMap 不允许它们。当你编写代码并使用采集 类时,你应该通过一个通用的接口或类来创建一个对象。例如,List p=new LinkedList(); 比下一个形式 LinkedList p=new LinkedList(); 如果你用之前的代码编译,你可以很容易地改变不同的队列实现: List p=new ArrayList(); 因为所有的代码都依赖于 p 队列。HashMap 允许空关键字和空属性值,而 HashMap 不允许它们。当你编写代码并使用采集 类时,你应该通过一个通用的接口或类来创建一个对象。例如,List p=new LinkedList(); 比下一个形式 LinkedList p=new LinkedList(); 如果你用之前的代码编译,你可以很容易地改变不同的队列实现: List p=new ArrayList(); 因为所有的代码都依赖于 p 队列。您可以轻松更改不同的队列实现: List p=new ArrayList(); 因为所有的代码都依赖于 p 队列。您可以轻松更改不同的队列实现: List p=new ArrayList(); 因为所有的代码都依赖于 p 队列。

  你会发现后者很难改变,因为程序的某些部分是对X的操作,而这些操作只有LinkedList提供——实际上这些操作是不需要的。这个解释的细节在 Bloch 的书 34 中。下周我们将学习更复杂的例子,当时的代码需要 Hashmap 接受键。设置键=map.keySet(); 当前代码使用密钥而不知道密钥是否在某个组中。16.2 替代方法 采集 的API 允许在采集 接口中使用类声明工具并实现其所有功能。例如,列表中的所有变异器都被指定为可供选择。这意味着你可以实现一个符合List规则的类,但是每当您调用 mutator(例如 add 命令)时,它都会连接到 UnsupportedOperationException。这种弱化规范的尝试很棘手,因为这意味着如果您编写一些支持列的代码,在没有关于列的附加信息的情况下,您不知道该列是否支持命令 add。但是没有这样的选择。对于替代概念,您必须声明一个单独的接口 ImmutableList。该奖项使接口数量增加了一倍。有时,我们需要一些变异器而不是其他变异器。例如,HashMap 中的 keyset 方法返回一个收录图中键的组。在没有关于列的附加信息的情况下,您不知道该列是否支持命令 add。但是没有这样的选择。对于替代概念,您必须声明一个单独的接口 ImmutableList。该奖项使接口数量增加了一倍。有时,我们需要一些变异器而不是其他变异器。例如,HashMap 中的 keyset 方法返回一个收录图中键的组。在没有关于列的附加信息的情况下,您不知道该列是否支持命令 add。但是没有这样的选择。对于替代概念,您必须声明一个单独的接口 ImmutableList。该奖项使接口数量增加了一倍。有时,我们需要一些变异器而不是其他变异器。例如,HashMap 中的 keyset 方法返回一个收录图中键的组。

  该组的作用:从组中删除一个key,从图中删除与其相关的属性值。因此支持 remove 命令,但不支持 add 命令,因此您无法在没有属性值的情况下向图中添加键。所以使用替代操作是一个合理的判断。这意味着更少的编译时间检查并减少了接口的数量。16.3 所有这些容器(数据组织)——组、列和图表——对象元素的一种方式。它们被称为多态,这意味着多种形状,令人欣慰的是它们允许您使用不同的容器(数据结构):整数列、URL 列等等。这种类型的多态性被称为子类型多态性,因为它依赖于类型的推导。另一种不同形式的多态称为参数多态,它允许你在定义容器时使用参数,这样客户端就可以提示容器将收录什么类型的参数:List[URL]bookmarks;notlegal Java JAVA不收录这个多态性,尽管有很多提议要添加这种多态性。参数多态的最大优点是程序员可以告诉编译器元素的类型。编译器可以检查添加的错误类型,或将其转换为另一种类型。考虑代码:List bookmarks=new LinkedList(); URL URLx=bookmarks.get(0);//编译器原本以为add方法是一个对象,其实add是可以的,URL是object的子类。所以客户端可以提示容器将收录什么类型的参数: List[URL]bookmarks;notlegal Java JAVA 不收录这种多态性,即使有很多建议添加这种多态性。参数多态的最大优点是程序员可以告诉编译器元素的类型。编译器可以检查添加的错误类型,或将其转换为另一种类型。考虑代码:List bookmarks=new LinkedList(); URL URLx=bookmarks.get(0);//编译器原本以为add方法是一个对象,其实add是可以的,URL是object的子类。所以客户端可以提示容器将收录什么类型的参数: List[URL]bookmarks;notlegal Java JAVA 不收录这种多态性,即使有很多建议添加这种多态性。参数多态的最大优点是程序员可以告诉编译器元素的类型。编译器可以检查添加的错误类型,或将其转换为另一种类型。考虑代码:List bookmarks=new LinkedList(); URL URLx=bookmarks.get(0);//编译器原本以为add方法是一个对象,其实add是可以的,URL是object的子类。参数多态的最大优点是程序员可以告诉编译器元素的类型。编译器可以检查添加的错误类型,或将其转换为另一种类型。考虑代码:List bookmarks=new LinkedList(); URL URLx=bookmarks.get(0);//编译器原本以为add方法是一个对象,其实add是可以的,URL是object的子类。参数多态的最大优点是程序员可以告诉编译器元素的类型。编译器可以检查添加的错误类型,或将其转换为另一种类型。考虑代码:List bookmarks=new LinkedList(); URL URLx=bookmarks.get(0);//编译器原本以为add方法是一个对象,其实add是可以的,URL是object的子类。

  事实证明,如果你想得到x就算破了,RHS的类型表达式也是一个对象。不能给一个对象分配大量的URL类型,所以不能依赖这种方式来使用URL,所以我们写的代码必须使用而不是下面的公式:Url x=(URL)bookmarks.get ; 该方法的作用是在运行时进行检查。如果成功,此方法的结果将调用 URL 类型并执行正常操作。如果失败,因为结果类型不正确,ClassCastException 被丢弃,任务将不会被执行。确保您理解这一点,不要对如何获取对象的返回值感到困惑。对象在运行时驱动其类型。如果在类 URl 中创建了一个对象,它将收录这种类型,所以没必要强行改给这个类型。这种向下转换很烦人,有时您必须编写一个包装类来摆脱它们。在浏览器中,您通常希望获得一种特殊的汇总数据类型。如果要这样做,必须使代码中不收录摘要类型,客户端将看到该方法如下: URL getURL(int 不需要在代码中使用它而是调用上下文,但仅限制了错误的范围。这种类型的多态提供了很大的灵活性,这是参数多态所没有的。您可以创建一个可以存储各种元素的异构容器(数据结构)。

  你可以把容器放在它们自己里面——试着弄清楚如何表达这种多态类型——即使这不是一个明智的方法。事实上,正如我们在前面的课程中提到的,如果你这样做,JAVA API 类会崩溃。标记元素容器收录的类型通常是最重要的部分。你应该养成在声明容器时写注释的习惯,或者使用错误的参数类型声明。List bookmarks;//List[URl] RI:bookmarks.elems URL16.4 Skeletal implementations 骨架实现的采集主体中的骨架实现的具体实现通常是使用Template Method设计的。抽象类中没有例子来证明它有这些方法,但是它可以通过定义模板方法调用其他钩子方法,并且这些方法都是在抽象中声明的,没有代码段。在继承的子类中,钩子方法被覆盖,模板方法继承不能改变。以 AbstractList 为例,它在迭代器中使用模板方法,它返回迭代器实现作为钩子方法。Equals 方法是实现另一个关于迭代器的模板。

  一个子类,比如ArrayList,提供了一种实现get命令的方法,它可以继承iterator和equals。一些特定的类替换了摘要实现。比如LinkedList代替了iterator的作用,因为它可以直接进入list的执行,比在hook中使用get命令提供了更有效的飞跃,每次调用都会继续搜索。16.5 Capacity, Allocation&GC 实现这一点的一种方法是利用队列的特性——例如ArrayList HashMap——在配置队列时,必须为其选择一个大小。选择合适的尺寸对性能非常重要。如果太小,队列将不得不被新队列替换,这导致新队列的配置和旧垃圾的处理的更多消耗。太大的话,会浪费空间,尤其是种类很多的时候,问题就大了。一些实现方法为builder提供了通过客户端设置初始容量的能力,可以决定配置的大小。例如: Public ArrayList(int initialCapacity) 构造emptylist指定初始容量参数:initialCapacity-初始容量列表。抛出:IllegalArgumentException-如果指定初始容量为负数 还有一个适配配置项的方法:trimTosize,有适配能力容器要有足够的空间来存储元素,并确保容量,从而有能力增加其他空间。一些实现方法为builder提供了通过客户端设置初始容量的能力,可以决定配置的大小。例如: Public ArrayList(int initialCapacity) 构造emptylist指定初始容量参数:initialCapacity-初始容量列表。抛出:IllegalArgumentException-如果指定初始容量为负数 还有一个适配配置项的方法:trimTosize,有适配能力容器要有足够的空间来存储元素,并确保容量,从而有能力增加其他空间。一些实现方法为builder提供了通过客户端设置初始容量的能力,可以决定配置的大小。例如: Public ArrayList(int initialCapacity) 构造emptylist指定初始容量参数:initialCapacity-初始容量列表。抛出:IllegalArgumentException-如果指定初始容量为负数 还有一个适配配置项的方法:trimTosize,有适配能力容器要有足够的空间来存储元素,并确保容量,从而有能力增加其他空间。

  使用此功能有一些技巧。如果您对申请多少空间没有准确的了解,您可以使用此功能来查找空间的大小。将这种能力的概念转化为行动是一个问题。在很多老的程序中,它们总是限制资源,如果资源耗尽,程序就无法运行。使用这种自适应方法,程序只会变慢。这是设计程序以确保程序始终有效运行的好主意,即使在特殊情况下也是如此。如果你学习在ArryList中实现remove,你会看到下面的代码: Public Object remove(int index){ elementData[-size]=null;//letgc do its work next? 不是垃圾文件的自动处理吗?以下是一些新手常犯的错误。如果你的表演有队列,1< @6.6 副本、转换、包装器等。所有特定的 采集 类都提供给构建者通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。转换、包装器等。所有特定的 采集 类都提供给构建器以通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。转换、包装器等。所有特定的 采集 类都提供给构建器以通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。所有特定的 采集 类都提供给构建器以通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。所有特定的 采集 类都提供给构建器以通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。为构建器提供了类以通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。为构建器提供了类以通过 采集 进行争论。这些允许你复制采集,或者属于另一种类型,例如LinkedList Public LinkedList(采集 list contains specified 采集,in 采集'siterator。参数:c-其元素列表的集合。它可以复制为: List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 也不能​​说所有的实现都属于构建者,即使是这样,Java.util.采集s 是一个特殊的类,里面收录了静态字符串方法,有些是泛化算法,有些是包装器。List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 就算是这样,也不能说所有的实现都属于建设者。Java.util.采集s 是一个特殊的类,它收录静态字符串方法,其中一些是通用算法,一些是包装器。List p =new LinkedList() ListpCopy=new LinkedList(p) 创建一个link form other 采集 type set s=new HashSet() Listp=new Linked list(s) builder不能在接口中声明,规范的List 就算是这样,也不能说所有的实现都属于建设者。Java.util.采集s 是一个特殊的类,它收录静态字符串方法,其中一些是通用算法,一些是包装器。

  例如 unmodifiableList 使用一个列表,然后使用相同的元素返回一个列表,但它是不可变的。public static List unmodifiableList(List list) 返回unmodifiableview指定列表。该方法允许模块提供用户内部列表。查询操作返回列表”读取到指定列表,并尝试返回列表,是否直接通过其迭代器,结果返回列表指定列表序列化。参数:列表-列表返回不可修改视图。返回:不可修改视图指定列表。返回的列表不准确,无法更改。它的属性值可以因为下面的列表被修改而改变,但不能直接修改。16.7 Sorted 采集s 一种采集 分类必须有某种方法来比较元素并确定它们的顺序。

  采集API 为此提供了两种方法。您可以使用自然排序,这是通过对元素使用比较方法从接口 java.lang.Comparable 确定的。public int compareTo(Object 它返回一个负整数类型,0或实整数类型作为对象。添加元素时,使用自然顺序。元素必须内置在一个类中,它是通过Comparable接口实现的。添加方法使要添加的元素通过comparable与现有元素进行比较,不匹配则移除,两者任选其一,可以使用一个元素的顺序独立给定,就像对象一样,通过java.util .Comparator接口实现,也是一个方法 public int compare(Object o1,Object o2) 上面的公式和compareTo类似,只是同时比较两个元素。这是 Strategy 风格的一个例子,通过它它是一个计算法则与使用的代码分离的。方法的选择取决于您创建对象的方式。如果您使用构造并且它使用 Comparator 作为参数,它将用于确定顺序。如果不使用构造,将使用自然顺序。比较 同样的问题(详细信息在第 9 章讨论)带来了同样的困难。如果不使用构造,将使用自然顺序。比较 同样的问题(详细信息在第 9 章讨论)带来了同样的困难。如果不使用构造,将使用自然顺序。比较 同样的问题(详细信息在第 9 章讨论)带来了同样的困难。

  一种分类基于不变量。如果可以通过改变公共方法的调用来改变两个元素的顺序,那么 Rep 就会发生。16.8 Views 我们在第9章介绍了concept的概念。Concept是一个复杂的机制。直现在也很有用,但是很危险。它们打破了原创程序中关于设计精心设计的对象的许多基本概念。通过它们的用途,可以识别出三个概念: FunctionalityExtension 有些概念提供了对象函数的扩展,而无需添加新方法。可以替换 采集 类中的 next 和 hasNext 方法。但这使得类自己的 API 更加复杂。支持多个接口也非常困难。我们可以在类中添加一个reset方法,该方法用于调用restart,但同时只允许一次迭代。如果程序元素忘记重置,这种方法会导致错误。解耦的一些概念提到了该子组对底层 采集 的作用。表的键组的方法。例如,返回一个由表的键组成的组。因此,允许部分代码与key相关,该s​​ection没有key值,与其他目标规范解耦。CoordinateTransformation 的概念通过 subList 提供了一个等效的转换。概念的改变导致了底层列表的变化,但是允许通过有偏索引访问列表。这种方法会导致错误。解耦的一些概念提到了该子组对底层 采集 的作用。表的键组的方法。例如,返回一个由表的键组成的组。因此,允许部分代码与key相关,该s​​ection没有key值,与其他目标规范解耦。CoordinateTransformation 的概念通过 subList 提供了一个等效的转换。概念的改变导致了底层列表的变化,但是允许通过有偏索引访问列表。这种方法会导致错误。解耦的一些概念提到了该子组对底层 采集 的作用。表的键组的方法。例如,返回一个由表的键组成的组。因此,允许部分代码与key相关,该s​​ection没有key值,与其他目标规范解耦。CoordinateTransformation 的概念通过 subList 提供了一个等效的转换。概念的改变导致了底层列表的变化,但是允许通过有偏索引访问列表。返回一个由表的键组成的组。因此,允许部分代码与key相关,该s​​ection没有key值,与其他目标规范解耦。CoordinateTransformation 的概念通过 subList 提供了一个等效的转换。概念的改变导致了底层列表的变化,但是允许通过有偏索引访问列表。返回一个由表的键组成的组。因此,允许部分代码与key相关,该s​​ection没有key值,与其他目标规范解耦。CoordinateTransformation 的概念通过 subList 提供了一个等效的转换。概念的改变导致了底层列表的变化,但是允许通过有偏索引访问列表。

  想法是危险的有两个原因。一、底部改变:调用remove改变底部采集;调用 remove 和它的 key group 来更改团队列表。这将形成一个简短的混叠,以便一个对象的变化影响另一个。这两个对象不需要具有相同的字典范围。这意味着我们必须重新定义规范中的更改:如果您更改 C 以收录概念 V,这是否意味着 V 也可以更改?其次,该方法的规范返回了一个通常仅限于更改的想法。为了确保您的代码可以运行,您需要了解此规范。毫不奇怪,这些规范通常很微妙。改变了云学习下采集的一些思路。其他的只允许改变概念——比如迭代器。有些允许概念和底层 采集 改变,但这更复杂。例如采集API,当在列中放置子列表的概念时,底层列不能有任何结构变化:以下将解释这种现象:结构修改列表,否则扰乱进度可能会产生错误的结果. 它的意思不是很准确和清楚。我不想对基础列进行任何更改。同一个底层采集的复杂概念会很复杂。例如,您可以在同一个列表中使用多个迭代器。在这种情况下,您必须考虑与想法的交互。底层列不能有任何结构变化:以下将解释这种现象:结构修改列表,否则扰乱进度可能会产生不正确的结果。它的意思不是很准确和清楚。我不想对基础列进行任何更改。同一个底层采集的复杂概念会很复杂。例如,您可以在同一个列表中使用多个迭代器。在这种情况下,您必须考虑与想法的交互。底层列不能有任何结构变化:以下将解释这种现象:结构修改列表,否则扰乱进度可能会产生不正确的结果。它的意思不是很准确和清楚。我不想对基础列进行任何更改。同一个底层采集的复杂概念会很复杂。例如,您可以在同一个列表中使用多个迭代器。在这种情况下,您必须考虑与想法的交互。您可以在同一个列表中使用多个迭代器。在这种情况下,您必须考虑与想法的交互。您可以在同一个列表中使用多个迭代器。在这种情况下,您必须考虑与想法的交互。

  如果通过交互更改列表,其他界面将无效。这里有一些有用的经验。如果您使用想法,您必须仔细考虑它是否会对您有所帮助: 您可以限制可接受的想法范围。例如,使用for循环代替while循环作为接口,可以限制接口的循环范围。很容易确保接口处没有意外错误。这并不总是可能的。下周将讨论 Tagger 计划关于他的集中呼叫更改。您可以使用 采集s 类来防止顾念更改或包装底层对象。例如,如果你在表中使用keySetview,并且不打算更改它,则可以使用以下方法: Set s=map.keySey(); Set safe_s=采集s.unmodifiableSet(s);

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线