java collections中的fail fast机制

合集下载

Java八股文

Java八股文

Java⼋股⽂Java⼋股⽂——集合 基本信息:数据结构:数据+链表,数组+链表+红⿊树jdk1.8中,当链表⼤⼩超过8时,就会转换为红⿊树,当⼩于6时变回链表,主要是根据泊松分布,在负载因⼦默认为0.75的时候,单个hash槽内元素个数为8的概率⼩于百万分之⼀,所以将7作为⼀个分⽔岭,等于7的时候不转换,⼤于等于8的时候转换,⼩于等于6转为链表默认⼤⼩:16负载因⼦:0.75(原因:0.75的负载因⼦,能让随机hash更加满⾜0.5的泊松分布 默认容量为什么是16?当我们想要往⼀个hashmap中put元素的时候,需要通过hash⽅法计算出放到哪个桶中,hash⽅法是根据key来定位这个K-V在链表数组中的位置的,hash的公式:HashCode(key) & (length-1),其实就是取模.⽤位运算来代替取模,主要就是因为位运算的效率较⾼。

例如:X % 2^n = X & (2^n -1),假设n为3,则2^3 = 8 ,表⽰为⼆进制就是1000,2^3 - 1 = 7,即0111,此时 X & (2^n -1)就相当于取X的⼆进制的最后三位数,从⼆进制⾓度来看,X / 8相当于 X >> 3 ,此时得到了X / 8 的商,⽽被移位的部分(后三位)就是 X % 8,也就是余数因此,如果保证map的长度是 2^n的话,就可以实现取模运算了那么为什么⼀定是16呢?关于这个默认容量的选择,官⽅没有给出相关解释,应该是⼀个经验值,需要在效率和内存使⽤上权衡,不能太⼩也不能太⼤并且,Hashmap在两个可能改变容量的地⽅做了兼容处理,⼀个是扩容,⼀个是初始化。

当我们初始化Map且设置了容量时,HashMap不⼀定会采⽤传⼊的值,⽽是经过计算,得到⼀个新值,以提⾼hash效率,源码中的算法就是根据⽤户传⼊的容量值,得到第⼀个⽐他⼤的⼆次幂返回 扩容:· 扩容的阈值是负载因⼦ * 当前容量。

finalize机制

finalize机制

finalize机制【最新版】目录1.Finalize 机制的概述2.Finalize 机制的作用3.Finalize 机制的实现原理4.Finalize 机制的实例应用5.Finalize 机制的优缺点正文【1.Finalize 机制的概述】Finalize 机制,是 Java 语言中一种用于确保对象在垃圾回收之前执行一定操作的机制。

它允许对象在特定的时刻进行一些必要的清理工作,以确保对象被正确地回收。

【2.Finalize 机制的作用】Finalize 机制的主要作用有两点:(1)对象的自我清理:在垃圾回收之前,对象可以利用 Finalize 机制执行一些清理工作,如关闭文件、断开网络连接等。

这样可以确保对象被正确地回收,避免资源泄露。

(2)延长对象的生存时间:如果对象在 Finalize 方法中执行了一些操作,那么垃圾回收器会考虑这些操作,从而延长对象的生存时间。

这对于某些需要在特定时刻执行操作的对象非常有用。

【3.Finalize 机制的实现原理】Finalize 机制的实现原理主要基于 Java 的垃圾回收机制。

当垃圾回收器决定回收一个对象时,它会首先调用对象的 Finalize 方法。

如果对象实现了 Finalize 方法,那么它会在方法中执行相应的清理操作。

然后,垃圾回收器会再次检查对象,如果对象已经完成了清理工作,那么它就会被回收。

否则,对象会被移至下一次垃圾回收。

【4.Finalize 机制的实例应用】以下是一个 Finalize 机制的实例应用:```javaclass Example {private File file;public Example(String fileName) {file = new File(fileName);}public void write(String content) {try {file.write(content);} catch (IOException e) {e.printStackTrace();}}protected void finalize() {try {file.close();} catch (IOException e) {e.printStackTrace();}}}```在这个例子中,我们创建了一个名为 Example 的类。

JavaCollections的emptyList、EMPTY_LIST详解与使用说明

JavaCollections的emptyList、EMPTY_LIST详解与使用说明

JavaCollections的emptyList、EMPTY_LIST详解与使⽤说明⽬录Collections的emptyList、EMPTY_LIST使⽤Collections.emptyList()使⽤注意Collections的emptyList、EMPTY_LIST使⽤今天在看⼤佬写的代码的时候,结果集为空的情况,他返回的不是null,⽽是:return Collections.EMPTY_LIST;我们都知道返回null,很有可能造成空指针异常,可以使⽤emptyList或EMPTY_LIST就可以避免这个问题,除⾮你想捕获这个为空的信息我们在使⽤emptyList空的⽅法返回空集合的时候要注意,这个空集合是不可变的。

空的集合不可以使⽤add⽅法,会报UnsupportedOperationException异常,看如下源码:public void add(int index, E element) {throw new UnsupportedOperationException();}空集合对象不可以使⽤put⽅法,会报IndexOutOfBoundsException异常,看如下源码:public E get(int index) {throw new IndexOutOfBoundsException("Index: "+index);}但是对于for循环都不会发⽣异常,如下的⽰例:List<String> list1 = Collections.emptyList();for(String s:list1) {}for(int i=0;i<list1.size();i++) {}上⾯的两种for循环都可以正常的执⾏,第⼀种foreach循环,实际编译之后会变成迭代器的模式,这样我们就好理解为什么可以正常执⾏;第⼆种是只调⽤了size⽅法,我们可以看到源码直接返回0;public int size() {return 0;}emptyList和EMPTY_LIST的区别,我们看下源码:/*** The empty list (immutable). This list is serializable.** @see #emptyList()*/@SuppressWarnings("unchecked")public static final List EMPTY_LIST = new EmptyList<>();/*** Returns the empty list (immutable). This list is serializable.** <p>This example illustrates the type-safe way to obtain an empty list:* <pre>* List&lt;String&gt; s = Collections.emptyList();* </pre>* Implementation note: Implementations of this method need not* create a separate <tt>List</tt> object for each call. Using this* method is likely to have comparable cost to using the like-named* field. (Unlike this method, the field does not provide type safety.)** @see #EMPTY_LIST* @since 1.5*/@SuppressWarnings("unchecked")public static final <T> List<T> emptyList() {return (List<T>) EMPTY_LIST;}我们看到EMPTY_LIST 是Collections类的⼀个静态常量,⽽emptyList是⽀持泛型的。

java中 生成不重复六位随机数的方法

java中 生成不重复六位随机数的方法

一、介绍在进行Java编程时,经常需要生成随机数以满足各种需求。

而有时候我们需要生成不重复的随机数,比如生成不重复的六位随机数。

本文将介绍几种在Java中生成不重复六位随机数的方法。

二、使用java.util.Random类java.util.Random类是Java中用于生成伪随机数的实用类,利用它可以生成随机数。

下面介绍如何利用java.util.Random类生成不重复的六位随机数:1. 创建一个长度为xxx的boolean类型数组,用来标记已经生成过的随机数;2. 利用java.util.Random类生成随机数,并将对应的数组位置设为true;3. 当生成的随机数对应的数组位置已经为true时,重新生成随机数。

代码示例如下:```javaimport java.util.Random;public class UniqueRandomNumberGenerator {public static void m本人n(String[] args) {boolean[] used = new boolean[xxx];Random random = new Random();int count = 0;while (count < xxx) {int num = random.nextInt(xxx);if (!used[num]) {used[num] = true;count++;System.out.println(String.format("06d", num));}}}}```上述代码利用了java.util.Random类生成了不重复的六位随机数。

但是这种方法存在一个问题,当生成的随机数接近xxx时,时间复杂度和空间复杂度都会非常高。

三、使用java.util.Collections.shuffle()方法java.util.Collections类提供了shuffle()方法,可以对列表中的元素进行随机重排。

java 集合.removeif复杂写法

java 集合.removeif复杂写法

一、概述在Java编程过程中,集合(Collection)是一个非常重要的概念,它可以存储一组对象并提供各种操作。

在集合中,常常需要删除满足一定条件的元素,而Java 8引入了新的removeIf()方法来实现这一功能。

本文将探讨Java集合中removeIf()方法的复杂写法,并给出详细的例子和解释。

二、removeIf()方法简介在Java 8中,Collection接口新增了removeIf()方法,该方法允许我们根据指定的条件来删除集合中的元素。

方法签名如下:boolean removeIf(Predicate<? super E> filter)其中,Predicate是一个函数式接口,用于定义条件判断的逻辑,E代表集合中的元素类型。

removeIf()方法的作用是,对于集合中的每个元素,都会调用Predicate的test()方法进行判断,如果返回true,则删除该元素;否则保留。

该方法返回一个boolean值,表示是否有元素被移除。

三、removeIf()方法的复杂写法在实际的开发中,我们可能会遇到一些复杂的条件,需要使用复杂的写法来使用removeIf()方法。

下面是一些常见的复杂写法及其解释。

1. 使用Lambda表达式Lambda表达式是Java 8引入的一个重要特性,它可以简化匿名内部类的写法,使得代码更加简洁和易读。

我们可以使用Lambda表达式来定义Predicate,从而实现对集合的条件判断。

示例代码如下:```javaList<Integer> list = new ArrayList<>();// 添加一些元素list.add(1);list.add(2);list.add(3);list.add(4);// 使用removeIf()方法和Lambda表达式list.removeIf(e -> e 2 == 0); // 删除偶数```在这个例子中,我们使用Lambda表达式e -> e 2 == 0来定义了一个条件判断,即判断元素是否为偶数。

Java中的容错机制有哪些如何设计容错系统

Java中的容错机制有哪些如何设计容错系统

Java中的容错机制有哪些如何设计容错系统在当今的软件开发领域,尤其是在 Java 应用程序的开发中,容错机制的重要性日益凸显。

一个稳定可靠的系统不仅需要在正常情况下能够高效运行,更需要在面对各种异常和错误情况时能够保持一定的可用性和数据的完整性。

那么,Java 中到底有哪些容错机制,又如何设计一个有效的容错系统呢?首先,让我们来了解一下 Java 中的一些常见容错机制。

异常处理是 Java 中最基本也是最常用的容错机制之一。

当程序运行过程中出现异常时,Java 会抛出一个异常对象。

通过使用 trycatch 语句块,我们可以捕获并处理这些异常,以避免程序崩溃。

例如,如果在读取文件时可能发生文件不存在的情况,我们可以在相关代码段中使用 trycatch 来处理 FileNotFoundException 异常,并采取适当的措施,如提示用户文件不存在或者尝试创建新文件。

事务处理在数据库操作中起着关键的容错作用。

当一系列数据库操作需要作为一个原子单元执行时(要么全部成功,要么全部失败),可以使用事务来保证数据的一致性。

例如,在一个银行转账的场景中,从一个账户扣款和向另一个账户入账这两个操作必须同时成功或同时失败,否则就会导致数据不一致。

通过使用数据库提供的事务机制,如在 Java 中使用 JDBC 的事务处理,可以确保这种一致性。

备份和恢复机制也是重要的容错手段。

定期对关键数据进行备份,并在系统出现故障时能够快速地进行恢复,可以最大程度地减少数据丢失和业务中断的影响。

在 Java 中,可以通过编写脚本或者使用专门的备份工具来实现数据的备份和恢复。

错误重试机制在处理可能出现暂时错误的操作时非常有用。

例如,与外部服务进行通信时,如果由于网络原因导致第一次请求失败,可以设置一定的重试次数和重试间隔,以增加成功的可能性。

但需要注意的是,重试不能无限制进行,并且需要合理处理重试期间可能产生的重复操作。

接下来,我们探讨一下如何设计一个有效的容错系统。

java 熔断机制

java 熔断机制Java熔断机制随着微服务架构的兴起,服务之间的调用变得越来越频繁,而一旦某个服务出现故障或延迟,就有可能引发级联故障,导致整个系统不可用。

为了应对这种情况,熔断机制应运而生。

本文将介绍Java 中常用的熔断机制及其实现原理。

一、什么是熔断机制熔断机制(Circuit Breaker)是一种故障处理模式,用于防止故障扩散和提高系统的容错能力。

它通过监控服务调用的状态,当服务调用失败率达到一定阈值时,会触发熔断器,停止继续调用该服务,而是直接返回一个预先设定的错误响应。

当一段时间内服务调用成功率恢复正常后,熔断器会自动恢复调用该服务。

二、Hystrix熔断机制Hystrix是Netflix开源的一款熔断库,提供了对延迟和故障的容错保护。

它通过封装服务调用逻辑,并为每个服务调用设置一个熔断器,实现了服务调用的隔离和降级。

1. 隔离Hystrix通过线程池隔离和信号量隔离两种方式实现服务调用的隔离。

通过线程池隔离,每个服务调用都会在独立的线程中执行,避免了因某个服务调用阻塞而导致整体系统的阻塞。

通过信号量隔离,每个服务调用都会在独立的信号量中进行计数,当达到阈值时,新的服务调用将被拒绝。

2. 降级当服务调用失败或超时时,Hystrix会根据预设的降级策略返回一个预先设定的错误响应,而不是继续等待服务调用的结果。

这样可以避免等待时间过长,导致整个系统的性能下降。

3. 监控Hystrix提供了丰富的监控指标,用于实时监控服务调用的成功率、失败率、延迟等。

通过监控数据,可以及时发现并定位服务调用的问题,并采取相应的措施进行修复。

三、Resilience4j熔断机制Resilience4j是另一款开源的熔断库,提供了类似于Hystrix的功能,但具有更轻量级和更灵活的特点。

它通过函数式编程的方式,将熔断逻辑与业务逻辑解耦,使得熔断逻辑的配置更加灵活。

1. 断路器Resilience4j通过断路器实现熔断功能,当服务调用失败率超过设定的阈值时,断路器会打开,停止继续调用该服务。

Java中Collections的min和max方法

Java中Collections的min和max⽅法⽅法⼀public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)此⽅法需要传⼊⼀个实现了Comparable接⼝的对象类的集合创建实现了Comparable的对象类public class Student1 implements Comparable<Student1> {private String name;private int age;public Student1() {}public Student1(String name, int age) { = name;this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic int compareTo(Student1 s) {int num = this.age - s.age;int num1 = (num == 0 ? pareTo() : num);return num1;}}调⽤import java.util.ArrayList;import java.util.Collections;import java.util.List;public class Student1Test {public static void main(String[] args) {List<Student1> list1 = new ArrayList<Student1>();list1.add(new Student1("林青霞", 27));list1.add(new Student1("风清扬", 30));list1.add(new Student1("刘晓曲", 28));list1.add(new Student1("武鑫", 29));list1.add(new Student1("林青霞", 27));Student1 min=Collections.min(list1);System.out.println(min.getName()+"---"+min.getAge());Student1 max=Collections.max(list1);System.out.println(max.getName()+"---"+max.getAge());}}⽅法⼆public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)此⽅法传⼊⼀个对象类的集合,以及⼀个⽐较器创建对象类public class Student2 {private String name;private int age;public Student2() {}public Student2(String name, int age) { = name;this.age = age;}public String getName() {return name;}public void setName(String name) { = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}}调⽤import java.util.ArrayList;import java.util.Collections;import parator;import java.util.List;public class Student2Test {public static void main(String[] args) {List<Student2> list2 = new ArrayList<Student2>();list2.add(new Student2("林青霞", 27));list2.add(new Student2("风清扬", 30));list2.add(new Student2("刘晓曲", 28));list2.add(new Student2("武鑫", 29));list2.add(new Student2("林青霞", 27));Student2 min=Collections.min(list2,new MyComparator());System.out.println(min.getName()+"---"+min.getAge());Student2 max=Collections.max(list2,new MyComparator());System.out.println(max.getName()+"---"+max.getAge());}}class MyComparator implements Comparator<Student2> {@Overridepublic int compare(Student2 s1, Student2 s2) {int num = s1.getAge() - s2.getAge();int num1 = (num == 0 ? s1.getName().compareTo(s2.getName()) : num);return num1;}}。

collectionsde的singletonlist的原理

collectionsde的singletonlist的原理`Collections.singletonList()` 是 Java 中的一个实用方法,它返回一个包含单个元素的不可修改的列表。

这个方法非常有用,当你需要一个只包含一个元素的列表,并且不打算修改它时。

其工作原理如下:
1. **不可修改性**:由于返回的列表是 `java.util.Collections` 的一个实现,所以它是不可修改的。

这意味着你无法向列表添加或删除元素。

2. **单元素性**:这个方法只接受一个参数,所以返回的列表始终只包含一个元素。

3. **效率**:由于这是一个单例列表(即只有一个实例),所以每次调用`Collections.singletonList()` 方法时,它都会返回相同的列表实例。

这使得这个方法在某些情况下更加高效,特别是当你需要多次引用同一个单元素列表时。

4. **线程安全**:由于它是不可修改的,所以它是线程安全的。

即使多个线程同时访问这个列表,也不会出现并发修改异常。

示例:
```java
List<String> singletonList = Collections.singletonList("element");
```
在这个例子中,`singletonList` 是一个只包含字符串 "element" 的不可修改列表。

你不能向这个列表添加或删除元素。

Java垃圾回收机制

垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。

垃圾收集的目的在于清除不再使用的对象。

GC通过确定对象是否被活动对象引用来确定是否收集该对象。

GC首先要判断该对象是否是时候可以收集。

两种常用的方法是引用计数和对象引用遍历。

引用计数收集器引用计数是垃圾收集器中的早期策略。

在这种方法中,堆中每个对象(不是引用)都有一个引用计数。

当一个对象被创建时,且将该对象分配给一个变量,该变量计数设置为1。

当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引用的对象+1),但当一个对象的某个引用超过了生命周期或者被设置为一个新值时,对象的引用计数减1。

任何引用计数为0的对象可以被当作垃圾收集。

当一个对象被垃圾收集时,它引用的任何对象计数减1。

优点:引用计数收集器可以很快的执行,交织在程序运行中。

对程序不被长时间打断的实时环境比较有利。

缺点:无法检测出循环引用。

如父对象有一个对子对象的引用,子对象反过来引用父对象。

这样,他们的引用计数永远不可能为0.跟踪收集器早期的JVM使用引用计数,现在大多数JVM采用对象引用遍历。

对象引用遍历从一组对象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。

如果某对象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。

在对象遍历阶段,GC必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。

下一步,GC要删除不可到达的对象。

删除时,有些GC只是简单的扫描堆栈,删除未标记的未标记的对象,并释放它们的内存以生成新的对象,这叫做清除(sweeping)。

这种方法的问题在于内存会分成好多小段,而它们不足以用于新的对象,但是组合起来却很大。

因此,许多GC可以重新组织内存中的对象,并进行压缩(compact),形成可利用的空间。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

package java.util;
public interface Collection<E> extends Iterable<E> {
// 以下是几个查询的方法
int size();
//查询有几个元素
boolean isEmpty();
//查询聚集是否为空
boolean contains(Object o);
Java Collections Framework 的 Fail Fast 机制及代码导读
江苏 无锡 缪小东
本文章主要抽取了 Java Collections Framework 中的 Collection 接口、List 接口、AbstractCollection 抽象类、AbstractList 抽象类和具体的 ArrayList 的实现纵向研究了 Java Collections Framework 中的 Fail Fast 机制,通常的编程错误以及这些接口和类之间的关系,以有助于大家对 Java Collections Framework 源代码的研究。
boolean addAll(Collection<? extends E> c); boolean addAll(int index, Collection<? extends E> c);
//将聚集插入指定索引
boolean removeAll(Collection<?> c);
boolean retainAll(Collection<?> c);
//返回列表遍历器,提供双向遍列 //返回从某个位置开始的遍历器
List<E> subList(int fromIndex, int toIndex);
//返回该 List 的子视图
}
三、Iterator 接口
Iterator 是 Java Collection Framework 中一个比较有用的接口,它的作用是完成集合内部对象的遍列, 是一个典型的遍历器模式的应用。
}
public boolean contains(Object o) { Iterator<E> e = iterator();
//查询聚集中是否包含某元素 //利用接口的 iterator 接口,遍历比较
if (o==null) {
while (e.hasNext())
if (e.next()==null) return true;
“Fail Fast”机制――列表的结构在其返回遍历器(Iterator)后的任何时候发生变化(这种变化不 包括遍历器本身调用 remove 方法移除元素)后,将会导致遍历器抛出异常的机制。
一、Collection 接口
Collection 接口是 Java Collections Framework 中两个顶层接口(Collection 和 Map)中的一个。它表 示一个集合的概念。
//聚集中可以包含 null 值哦
} } else {
while (e.hasNext()) { if (o.equals(e.next())) { e.remove(); return true; }
} } return false; }
// 批量处理方法 public boolean containsAll(Collection<?> c) {
//设置指定索引处的元素 //在指定索引处插入元素 //删除指定索引处的元素
//查找操作
int indexOf(Object o); int lastIndexOf(Object o); // 遍历器方法
//返回指定对象的索引 //返回指定对象的索引,从后向前找
ListIterator<E> listIterator(); ListIterator<E> listIterator(int index); // 视图操作
//聚集不支持此方法,会抛出 UnsupportedOperationException 异常。
//next 方法没有调用前,就调用此方法会抛出 IllegalStateException 异常。
}
Iterator 接口是 Java 集合框架中新的接口,Enumeration 是老的遍列接口。新接口支持 remove 方法, 同时新接口的方法名称也比老接口短了。不过 Collections 类提供了它们之间转换的方法,阎宏的《Java 与模式》中使用了适配器模式(Adapter)完成两者的转换。
Iterator<E> iterator();
Object[] toArray();
<T> T[] toArray(T[] a); // 修改操作
boolean add(E e);
boolean remove(Object o); // 批处理操作
boolean containsAll(Collection<?> c);
return a;
}
//以上方法中返回数组的长度至少等于聚集类元素的个数 //当指定数组的长度小于聚集内元素的个数时,创建与其元素个数相同的指定类型的数组
//放入元素,并返回之;当指定数组的长度大于聚集中元素的数目时,作者让第 n+1 个元素为 null,
//是否合理呢!! //若聚集内部有 n 个元素,指定数组长度大于 n,且指定数组在以前的操作中,全放满了元素, //调用该方法后会是怎样呢??首先是指定元素中的前 n 个元素被聚集中的 n 个元素覆盖,
void clear(); // 比较和 hsah 操作
boolean equals(Object o);
int hashCode(); // 位置相关的操作,只是 List 接口特有的 E get(int index);
//得到指定索引处的元素
E set(int index, E element); void add(int index, E element); E remove(int index);
protected AbstractCollection() { }
//默认的构造器,抽象类是有构造器的哦
public abstract Iterator<E> iterator(); public abstract int size();
public boolean isEmpty() { return size() == 0;
// 修改操作
boolean add(E e); boolean remove(Object o); // 批量操作
//增加指定的元素 //删除指定的元素
boolean containsAll(Collection<?> c);
//查询是否包含某个聚集
boolean addAll(Collection<? extends E> c); //将某个聚集假如该聚集
boolean removeAll(Collection<?> c);
//从本聚集中删除指定聚集中的元素
boolean retainAll(Collection<?> c);
//在本聚集中保存指定聚集中的元素
void clear(); // 父类的方法 boolean equals(Object o);
Iterator<E> it=iterator();
Object[] result = a;
for (int i=0; i<size; i++)
result[i] = it.next();
if (a.length > size)
a[size] = null;
//这是干什么的啊?仔细想想吧!有什么问题吗
//清除本聚集中所有的元素 //聚集自身的比较方法
int hashCode();
//聚集自身的 hash 值
}
二、List 接口
List 接口是 Collection 接口的三个子接口(List、Set、Queue)之一。它是各种具体列表(ArrayList、 LinkedList)的公共接口。它们共同的特点是可以通过索引访问聚集中的对象。
下面是 JDK 中 Iterator 类的源代码:
package java.util;
public interface Iterator<E> {
boolean hasNext(); //查询聚集中是否还有元素
E next();
//返回聚集中的下一个元素
void remove(); //从聚集中删除当前元素。该方法在每次调用 next 方法后可以被使用。 //在调用该方法时,若其它线程改变聚集中的元素会抛出 ConcurrentModificationException 异常。
四、AbstractCollection 抽象类
AbstractCollection 抽象类是 Collection 接口的抽象实现,它利用 Collection 中的方法,完成其中的某 些方法。
package java.util;
public abstract class AbstractCollection<E> implements Collection<E> {
package java.util;
public interface List<E> extends Collection<E> { //蓝色的为 List 接口中的新方法,其它的为 Collection 接口中的方法。 // 查询操作
int size();
boolean isEmpty();
相关文档
最新文档