天道酬勤,学无止境

How to prevent element deleting from ArrayList in Java?

I want to have an ArrayList, and to restrict element delinting as well. How can I do it?

标签

评论

Create a wrapper over List interface that doesn't allow removal, just the desired methods:

class MyArrayList<T> {
    private List<T> list;

    public MyArrayList() {
        list = new ArrayList<T>();
    }

    public boolean add(T t) {
        return list.add(t);
    }
    //add other desired methods as well
}

Another non recommendable option is to extend from ArrayList and override remove method(s) to do nothing, but it is not desired because you should not extend from these classes unless it is really needed:

public MyArrayList<T> extends ArrayList<T> {
    @Override
    public boolean remove() {
        //do nothing...
    }
}

Also, you could wrap your current List using Collections#unmodifiableList to avoid elements removal (that is a wrapper class like mentioned above except that implements List) but note that you cannot add elements either.

Create a subclass of ArrayList and override the remove methods.

If you want to forbid all modifications use Collections.unmodifiableList.

Use the ImmutableList class from the google guava library.

BTW: this is a duplciate of: make ArrayList Read only

You can create your own class extending ArrayList with will block all remove methods like in example

public class NoDeleteArray extends ArrayList{

    @Override
    public boolean remove(Object o) {
        return super.remove(o); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean removeAll(Collection c) {
        return false;
    }

    @Override
    public Object remove(int index) {
        return null;
    }

    @Override
    protected void removeRange(int fromIndex, int toIndex) {

    }

    @Override
    public boolean retainAll(Collection c) {
         return false;
    }

}

here all remove methods are covering original methods and does nothing. you can also perform some verification to check if object can be deleted from collection for example

@Override
public Object remove(int index) {
    MyClass tmp = (MyClass) get(index);
    if (tmp.isDeletable()) {
        return super.remove(index);
    } else {
        return null;
    }
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • java集合-ArrayList学习笔记
    集合和数组关系? 1) 集合是一种容器,可以存储多个数据.2) 数组的长度是固定的,集合的长度是可变的.3) 集合中存储的元素必须为引用类型数据,初始值为NULLArrayList集合类ArrayList<E>集合:大小可变数组的实现 <E>:是一种特殊的数据类型,泛型(泛型,用来将数据类型,作为参数进行传递.) 在出现 E 的地方我们使用引用数据类型替换即可 举例:ArrayList<String>,ArrayList<Student> 构造方法: ArrayList()成员方法:l public booleanadd(E e):添加元素l public voidadd(int index,E element):在指定的索引处添加元素集合元素增删改查举例:import java.util.ArrayList;publicclass demo_11 { publicstaticvoid main(String[] args) { ArrayList<String>list = new ArrayList<String>(); // 添加元素: list.add("hello");// 添加helloworld list.add("world"); // 获取元素 list.get(0); // 获取第1个元素 // 集合的长度(元素个数) list.size(); //
  • 从数组中删除对象[java](deleting an object from an array [java])
    问题 我的程序要求用户输入5人的名字,姓氏和年龄,并将其存储在数组中。 我想编写一个方法,询问用户要从数组中删除谁,然后删除该雇员。 我知道在数组中,您不能从技术上从数组中删除对象,而只能将其替换。 到目前为止,这是我所做的: private void deleteEmployee(){ Scanner scan = new Scanner(System.in); System.out.println("Enter the first name of the employee you want to delete from the list") String name = scan.nextLine(); for (int i = 0; i < employees.length; i++) { if (employees[i].getFirstName().equals(name)){ employees[i] = employees[employees.length - 1]; break; } if (i == employees.length - 1) { System.out.println("That requested person is not employed at this firm.") } } 我的问题是,它不会将数组大小减少1
  • java面试题:arraylist与linkedlist的区别——最全答案在底下
    昨天有一个面试,问到我arraylist与linkedlist的区别,我的回答只包含了增,删,查的的区别,然后面试官问我还有什么要补充的嘛,其实我是知道动态扩容的机制的,但是当时一时比较疏忽,就没有说出来,然后回头想了一想如果还要补充的话其实也就是动态扩容的机制补充了!所以今天整理一下这道面试题的答案: Arraylist: 接口继承: 继承了list,cloneable和Serializable接口,实际上list又继承了Collection接口,所以回答这方面可以说继承了list,collection等接口 动态扩容 初始容量:10 private static final int DEFAULT_CAPACITY = 10; 扩容机制:1.5倍 初始最大容量:Integer.MAX_VALUE - 8 这里就和以前不同了,之前最大的容量是Integer.MAX_VALUE ,但是在1.8之后改为了Integer.MAX_VALUE - 8,主要的原因其实还是避免机器内存溢出,但是实际上当容量超过了这个值之后还是可以存到Integer.MAX_VALUE private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8; 实际最大容量:Integer.MAX_VALUE 当内存超过Integer.MAX_VALUE
  • Java小白记录学习路线(java基础)-----java的常用类(Scanner类、Random类、ArrayList 类)
    1.Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。 例如,以下代码使用户能够从 System.in 中读取一个数: Scanner sc = new Scanner(System.in); int i = sc.nextInt(); nextInt() 这是一个最为普通的输入方法,这里仅仅是输入整型的数据,这是怎么样一个过程呢?先把Scanner类实例化,然后通过System.in 让程序允许键盘输入在控制台,然后去输入一个什么样的数据呢,就通过nextXXX方法来确定。 (System.in从字面翻译就是系统输入,这里指的就是通过键盘输入数据) 具体使用步骤查看类 java.util.Scanner :该类需要import导入后使用。查看构造方法 public Scanner(InputStream source) : 构造一个新的 Scanner ,它生成的值是从指定的输入流扫描的。查看成员方法 public int nextInt() :将输入信息的下一个标记扫描为一个 int 值。 2.Random类 查看类 java.util.Random :该类需要 import导入使后使用。查看构造方法 public Random() :创建一个新的随机数生成器。查看成员方法 public int nextInt(int n) :返回一个伪随机数,范围在 0 (包括
  • 删除元素时,ArrayList的容量是否会减少?(Does the capacity of ArrayList decrease when we remove elements?)
    问题 ArrayList的默认容量为10个对象。 当大小超过10个对象时,ArrayList将在内部增加其容量。 当我们从ArrayList中删除对象时,容量会降低吗? 如果ArrayList容量不减少,是否会导致性能问题? 回答1 它不会自动减少这一点。 从文档。 public void trimToSize() 将此ArrayList实例的容量修整为列表的当前大小。 应用程序可以使用此操作来最小化ArrayList实例的存储。 回答2 arraylist中有几种删除方法,在此示例中,我将使用按索引删除版本 public E remove(int index) { rangeCheck(index); modCount++; E oldValue = elementData(index); int numMoved = size - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--size] = null; // Let gc do its work return oldValue; } 需要注意的最重要的事情是,绝不会在elementData创建新数组,因此其大小不会改变,仅复制元素。
  • Java迭代器Iterator知识点浅析
    什么是迭代器: 维基百科解释:迭代器(iterator)有时又称光标(cursor)是程序设计的软件设计模式,可在容器对象(container,例如链表或数组)上遍访的接口,设计人员无需关心容器对象的内存分配的实现细节。 我们解释一下上面这段话:   讲到迭代器,就离不开容器,也是是Java中经常讲到的集合(Java集合框架的集合类,我们有时候称之为容器)。容器的种类有很多种,比如ArrayList、LinkedList、HashSet…,(这里我们先不考虑Map接口下面的类)每种容器都有自己的特点,ArrayList底层维护的是一个数组;LinkedList是链表结构的;HashSet依赖的是哈希表,每种容器都有自己特有的数据结构。   正是因为容器的内部结构不同,所以很多时候可能不知道该怎样去遍历一个容器中的元素。所以为了使对容器内元素的操作更为简单,Java引入了迭代器模式,把迭代抽取为一个接口,更为简洁高效的实现容器的遍历!   把访问逻辑从不同类型的集合类中抽取出来,从而避免向外部暴露集合的内部结构,达到设计人员无需关心容器对象的内存分配的实现细节的目的。 查看Iterator接口源码,发现Iterator主要有三个方法:hasNext()、next()、remove() 我们以一个具体的类来看迭代器的原理和实现过程(以ArrayList为例) 1、hasNext()方法
  • Java面试篇:手撕hashmap与ArrayList,LinkedList。
    这两个月来第一次8点下班,没有到12点甚至有点不习惯,马上就要到跳槽旺季,那么我给大家整理一套最常问的几个集合面条题,废话不多说,直接进入正题。 一、HASHMAP 1.如果想要了解hashmap首先要了解其数据结构 ①.hashmap数据结构是什么? hashmap数据结构中有数组和链表来实现对数据的存储 数组:数组存储区间是连续的,占用内存严重,故空间复杂的很大。但数组的二分查找时间复杂度小,为O(1),随机读取效率很高。因为数组是连续的,知道每一个数据的内存地址,可以直接找到给定地址的数据,但是插入数据和删除数据效率低,插入数据时,这个位置后面的数据在内存中都要向后移。所以数组的特点是:寻址容易,插入和删除困难; 链表:链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(N),链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。所以链表的特点是:寻址困难,插入和删除容易。 哈希表:那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表。哈希表((Hash table)既满足了数据的查找方便,同时不占用太多的内容空间,使用也十分方便。 哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法—— 拉链法,我们可以理解为“链表中的数组“
  • javaSE基础笔记_Day07_Scanner类,Random类,Arraylist类
    目录 1. API(Application Programming Interface) 字典应用程序编程接口引用类型使用步骤: 2. Scanner类Scanner使用步骤查看类:查看构造方法:查看成员方法: 匿名对象 3. Random类此类的实例用于生成一个伪随机数Random使用步骤查看类:java.util.Random查看构造方法`:public Random():创建一个新的随机数生成器`查看成员方法:`public int nextInt(int n):返回一个伪随机数,范围在{0}和指定值之间的int值` 4. ArrayList类引入--对象数组ArrayList的使用概念:使用步骤: 常用方法和遍历如何存储基本数据类型 1. API(Application Programming Interface) 字典 应用程序编程接口 api其实就是jdk中核心类库的说明文档对于jdk中的核心类库只需要知道如何使用,无须关心他是如何实现的主要查看类的解释说明,构造方法以及使用成员方法 引用类型使用步骤: 导包:可与创建对象同时进行创建对象:数据类型 变量名 = new 数据类型(参数列表)调用方法:变量名.方法名 例如:int i = sc.nextInt();//接收一个键盘键入的整数 2. Scanner类 Scanner使用步骤 查看类: Scanner sc =
  • 我如何使抽象类与JAXB一起使用(How do i make an abstract class work with JAXB)
    问题 亲爱的Java编码人员,我使用了http://www.vogella.com/articles/JAXB/article.html中的示例 我的3个类UserStorage,User和UserTest的JAXB XML用法 它工作正常,但这只是 JAXBContext context = JAXBContext.newInstance(UserStorage.class); Marshaller m = context.createMarshaller(); m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); the User class is ABSTRACT!, so it throws an 线程“主”中的异常javax.xml.bind.UnmarshalException:无法创建platform.User的实例-链接的异常:com.sun.xml.internal.bind.v2.runtime的[java.lang.InstantiationException]。 com.sun.xml.internal.bind.v2上的unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:648)。com.sun
  • Java基础(六)——容器
    文章目录 容器1 List1.1 ArrayList和Vector区别1.2 ArrayList和LinkedList区别1.3 ArrayList1.4 Arrays.copyOf1.5 Arrays.asList 2 Set2.1 如何检查重复 3 Map3.1 HashMap和Hashtable区别3.2 HashMap3.2.1 JDK1.7以前3.2.2 JDK1.8以后 4 Collections5 使用Iterator在遍历中删除元素 容器 1 List ArrayList:Object[]数组Vector:Object[]数组LinkedList:双向链表 1.1 ArrayList和Vector区别 ArrayList是List的主要实现类,Object[]数组,线程不安全Vector是List的古老实现类,Object[]数组,线程安全 1.2 ArrayList和LinkedList区别 两者都是线程不安全ArrayList使用Object[]数组,LinkedList使用双向链表ArrayList的数组结构利于随机查找,LinkedList的链表结构利于增加和删除ArrayList的空间主要浪费在列表结尾预留的容量空间,LinkedList的空间主要浪费在存储前驱和后继 1.3 ArrayList 继承于AbstractList,实现了List
  • Java——集合、List接口、ArrayList、LinkedList、Iterator接口:迭代器
    文章目录 集合CollectionListArrayListLinkedListIterator 集合 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。 集合和数组的区别有: 长度区别: 数组的长度是固定的而集合的长度是可变的数据类型的区别: 数组可以存储基本数据类型 , 也可以存储引用数据类型; 而集合只能存储引用数据类型内容区别: 数组只能存储同种数据类型的元素 ,集合可以存储不同类型的元素 在集合框架中,Collection是顶层父接口,List和Set为子接口,List的实现类又有ArrayList、LinkedList、Vector,而Set的实现类有HashSet、LinkedHashSet、TreeSet,集合框架图如下所示 首先,讲解Collection顶层父接口下的方法 Collection 常用的成员方法 添加功能 boolean add(Object obj):添加一个元素boolean addAll(Collection c):添加一个集合的元素 (给一个集合添加进另一个集合中的所有元素) 删除功能 void clear():移除所有元素boolean remove(Object o):移除一个元素boolean removeAll(Collection c):移除一个集合的元素(移除一个以上返回的就是true
  • JDK1.8源码(五)——java.util.ArrayList 类
    JDK1.8源码(五)——java.util.ArrayList 类   关于 JDK 的集合类的整体介绍可以看这张图,本篇博客我们不系统的介绍整个集合的构造,重点是介绍 ArrayList 类是如何实现的。 1、ArrayList 定义   ArrayList 是一个用数组实现的集合,支持随机访问,元素有序且可以重复。 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable      ①、实现 RandomAccess 接口   这是一个标记接口,一般此标记接口用于 List 实现,以表明它们支持快速(通常是恒定时间)的随机访问。该接口的主要目的是允许通用算法改变其行为,以便在应用于随机或顺序访问列表时提供良好的性能。   比如在工具类 Collections(这个工具类后面会详细讲解)中,应用二分查找方法时判断是否实现了 RandomAccess 接口: 1 int binarySearch(List<? extends Comparable<? super T>> list, T key) { 2 if (list instanceof RandomAccess || list.size()
  • 【集合类】 1 java.util.ConcurrentModificationException异常详解&ArrayList&CopyOnWriteArrayList原理探究
    环境:JDK 1.8.0_111 文章目录 一、单线程情况下问题分析及解决方案1.1 问题复现1.2 问题原因分析1.3 问题解决方案 二、 多线程情况下的问题分析及解决方案2.1 问题复现2.2 问题分析2.3 多线程下的解决方案2.3.1 方案一:加同步锁2.3.2 方案二:使用CopyOnWriteArrayListCopyOnWriteArrayList注意事项 三、汇总 在Java开发过程中,使用iterator或for遍历集合的同时对集合进行修改就会出现java.util.ConcurrentModificationException异常,本文就以ArrayList为例去理解和解决这种异常,一般抛出异常的场景分为两类,一是单线程场景,二是多线程场景,尤其是第二个场景不容易察觉,不幸的是小编就中招了。 一、单线程情况下问题分析及解决方案 1.1 问题复现 先上一段会抛异常的代码,iterator方式: import java.util.ArrayList; import java.util.Iterator; public class ExceptionTest1 { public void test() { ArrayList<Integer> arrayList = new ArrayList<Integer>(); //构建数组,并填充20个元素 for (int
  • Java集合框架的底层实现原理之——ArrayList
    文章目录 一、ArrayList1、ArrayList介绍2、ArrayList源码分析2.1 ArrayList底层使用List2.2 ArrayList的构造方法2.3 ArrayList的新增操作2.4 ArrayList的删除操作2.5 ArrayList的查找操作 一、ArrayList 1、ArrayList介绍 public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable{} ArrayList是实现List接口的动态数组,之所以说是动态,是因为它的数组大小是可变的。每个ArrayList都有一个容量 /** * Default initial capacity. */ private static final int DEFAULT_CAPACITY = 10; 容量是指用来存储列表元素的数组的大小。默认初始容量为10。随着ArrayList中元素的增加,它的容量也会不断的自动增长。在每次添加新的元素时,ArrayList都会检查是否需要进行扩容操作,扩容操作带来数据向新数组的重新拷贝,所以如果我们知道具体业务数据量,在构造ArrayList时可以给ArrayList指定一个初始容量
  • 逼着面试官问了我ArrayList和LinkedList的区别,他对我彻底服了
    ArrayList 和 LinkedList 有什么区别,是面试官非常喜欢问的一个问题。可能大部分小伙伴和我一样,能回答出“ArrayList 是基于数组实现的,LinkedList 是基于双向链表实现的。” 关于这一点,我之前的文章里也提到过了。但说实话,这样苍白的回答并不能令面试官感到满意,他还想知道的更多。 那假如小伙伴们继续做出下面这样的回答: “ArrayList 在新增和删除元素时,因为涉及到数组复制,所以效率比 LinkedList 低,而在遍历的时候,ArrayList 的效率要高于 LinkedList。” 面试官会感到满意吗?我只能说,如果面试官比较仁慈的话,他可能会让我们回答下一个问题;否则的话,他会让我们回家等通知,这一等,可能意味着杳无音讯了。 为什么会这样呢?为什么为什么?回答的不对吗? 暴躁的小伙伴请喝口奶茶冷静一下。冷静下来后,请随我来,让我们一起肩并肩、手拉手地深入地研究一下 ArrayList 和 LinkedList 的数据结构、实现原理以及源码,可能神秘的面纱就揭开了。 01、ArrayList 是如何实现的? ArrayList 实现了 List 接口,继承了 AbstractList 抽象类,底层是基于数组实现的,并且实现了动态扩容。 public class ArrayList<E> extends AbstractList<E>
  • 还在一直用ArrayList吗?使用不当性能差之万里
    你是否在面试时候也被问及List集合实现ArrayList与LinkedList区别? 相信大部分同学都能回答上:ArrayList 是基于数组实现,LinkedList 是基于链表实现。 而在回答使用场景的时候,我发现大部分同学的答案是:“ArrayList 和 LinkedList 在新增、删除元素时,LinkedList 的效率要高于 ArrayList,而在遍历的时候,ArrayList 的效率要高于 LinkedList。”这个回答是否准确呢?今天这一讲就带你验证。 List集合家谱 ArrayList 和 Vector 使用了数组实现,这两者的实现原理差不多,LinkedList 使用了双向链表实现。基础铺垫就到这里,接下来,我们就详细地分析下 ArrayList 和 LinkedList 的源码实现。 带上问题去看ArrayList ***问题 1:***我们在查看 ArrayList 的实现类源码时,你会发现对象数组 elementData 使用了 transient 修饰,我们知道 transient 关键字修饰该属性,则表示该属性不会被序列化,然而我们并没有看到文档中说明 ArrayList 不能被序列化,这是为什么? ***问题 2:***我们在使用 ArrayList 进行新增、删除时,经常被提醒“使用 ArrayList 做新增删除操作会影响效率”
  • day07【Scanner类、Random类、ArrayList类】
    第 1章 API 概述 API(Application Programming Interface),应用程序编程接口。Java API是一本程序员的 字典 ,是JDK中提供给我们使用的类的说明文档。这些类将底层的代码实现封装了起来,我们不需要关心这些类是如何实现的,只需要学习这些类如何使用即可。所以我们可以通过查询API的方式,来学习Java提供的类,并得知如何使用它们。 API 使用步骤 1. 打开帮助文档。 2. 点击显示,找到索引,看到输入框。 3. 你要找谁?在输入框里输入,然后回车。 4. 看包。java.lang下的类不需要导包,其他需要。 5. 看类的解释和说明。 6. 学习构造方法。 7 . 使用成员方法。 第 2章 Scanner类 了解了API的使用方式,我们通过Scanner类,熟悉一下查询API,并使用类的步骤。 2.1 什么是Scanner类 一个可以解析基本类型和字符串的简单文本扫描器。 例如,以下代码使用户能够从 System.in 中读取一个数: 备注:System.in 系统输入指的是通过键盘录入数据。 2.2 引用类型使用步骤 1. 导包 使用import关键字导包,在类的所有代码之前导包,引入要使用的类型,java.lang包下的所有类无需导入。 格式: import 包名.类名; 举例: java.util.Scanner; 2. 创建对象
  • 谈谈对集合的理解
    集合 ​ Java集合是java提供的一个工具包,全部继承自java.util.*。主要包括两大接口Collection接口和Map接口以及相关的工具类(Iterator迭代器接口、Enumeration枚举类、Arrays和Colletions)。 (1)Collection是一个接口,包含List列表和Set集合。其中List是有序的队列,元素值可以重复,索引从0开始,实现类有LinkedList,ArrayList,Vector;而Set是一个不允许有重复元素的集合,Set的实现类有HashSet和TreeSet。HashSet依赖于HashMap,它实际上是通过HashMap实现的;TreeSet依赖于TreeMap,它实际上是通过TreeMap实现的。 (2)Map是一个映射接口,通过key-value键值对实现。实现类有HashMap,TreeMap,WeakHashMap,Hashtable。 (3)Iterator是遍历集合的工具,Enumeration也是遍历集合,但它的的功能要比Iterator少,只能在Hashtable, Vector, Stack中使用。 (4)Arrays和`Collections是操作数组、集合的两个工具类。 下面是具体一点的比较: (1) ArrayList, LinkedList, Vector, Stack是List的4个实现类
  • 多线程并发变量问题
    背景 ​ 在Gnss功耗优化的项目中我们需要给其他模块提供一个接口,即我们Imp类中的功耗信息,但是我们功耗信息会在每次上传之后就进行了删除操作,因此就出现了多线程并发操作变量的情况,至此记录如下; 情景再现 ​ 我模拟了一下项目中会出现的情况代码如下: public static List<Integer> list = new ArrayList(); public static void main(String[] args) { for (int i = 0; i < 100000; i++) { list.add(i); } System.out.println("list.toString()"); Thread t1 = new Thread(() -> { while (true) { System.out.println("AAA----is running"); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } // System.out.println(list.toString() + "\n"); } }); t1.setName("AAAAA"); t1.start(); Thread t2 = new Thread(() -> {
  • 3-Java类集总结
    Java的类集 目的 普通的对象数组的最大问题在于数组中的元素个数是固定的(集合表示一组对象,一个对象即一个元素 ),不能动态的扩充大小。最早可以通过链表实现一个动态对象数组,但是太过于复杂,故java中为了方便用户操作各个数据结构,引入了类集的概念(JDK1.2 后引入)——可以把类集称为 java对数据结构的实现。 类集中最大的几个操作接口:Collection(单值)、Map(键/值对)、Iterator(迭代)。所有类集操作的接口或类都在java.util 包。 集合框架 是一个用来代表和操纵集合的统一架构。所有的集合框架都包含: 1)接口:是代表集合的 抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象 2)实现(类):是集合接口的具体实现。从本质上讲,它们是可重复使用的 数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。 3)算法:是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序等 。这些算法被称为多态,那是因为相同的方法可以在相似的接口上有着不同的实现。 除了集合,该框架也定义了几个 Map 接口和类。Map 里存储的是键/值对。尽管 Map 不是集合,但是它们完全整合在集合中。 集合 1、Collection(接口)