集合类 collection接口 ArrayList

数组: 存储同一种数据类型的集合容器.
数组的特点:
1. 只能存储同一种数据类型的数据。
2. 一旦初始化,长度固定。 
3. 数组中的元素与元素之间的内存地址是连续的。
  : Object类型的数组可以存储任意类型的数据。

集合:集合是存储对象数据的集合容器。
集合比数组的优势:
1. 集合可以存储任意类型的对象数据,数组只能存储同一种数据类型 的数据。
2. 集合的长度是会发生变化的,数组的长度是固定的。

Collection接口提供的方法:

提供的实现类继承关系如下:

------------| Collection 单例集合的根接口
----------------| List  如果是实现了List接口的集合类,具备的特点: 有序,可重复。 
-------------------| ArrayList  ArrayList 底层是维护了一个Object数组实现的。 特点: 查询速度快,增删慢。
-------------------| LinkedList LinkedList 底层是使用了链表数据结构实现的, 特点: 查询速度慢,增删快。
-------------------| Vector(了解即可)  底层也是维护了一个Object的数组实现的,实现与ArrayList是一样的,但是Vector是线程安全的,操作效率低。

----------------| Set  如果是实现了Set接口的集合类,具备的特点: 无序,不可重复。
-------------------| HashSet  底层是使用了哈希表来支持的,特点: 存取速度快. 
-------------------| TreeSet   如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。

ArrayList

ArrayList  继承关系如下:

RandomAccess为标记接口,表明for循环比Iterator迭代器循环具有更高的性能List接口新增方法为:
  • boolean addAll(int index, Collection<? extends E> c);
  • E get(int index);
  • E set(int index, E element);
  • void add(int index, E element);
  • E remove(int index);
  • int indexOf(Object o);
  • int lastIndexOf(Object o);
  • ListIterator<E> listIterator();
  • ListIterator<E> listIterator(int index);
  • List<E> subList(int fromIndex, int toIndex);

新增接口主要和List有关的随机访问有关系

ArrayList底层实现为Object数组,这也是泛型在数组上的缺陷,只能维护一个Object类型的数组。

扩容:首次初始化数组length为10,通常为1.5倍扩容,

      elementData = Arrays.copyOf(elementData, newCapacity);完成扩容和数组内容复制

会有系统调用的add操作:

    public void add(int index, E element) {
        rangeCheckForAdd(index);

        ensureCapacityInternal(size + 1);  // Increments modCount!!
        System.arraycopy(elementData, index, elementData, index + 1,
                         size - index);
        elementData[index] = element;
        size++;
    }

    public boolean addAll(int index, Collection<? extends E> c) {
        rangeCheckForAdd(index);

        Object[] a = c.toArray();
        int numNew = a.length;
        ensureCapacityInternal(size + numNew);  // Increments modCount

        int numMoved = size - index;
        if (numMoved > 0)
            System.arraycopy(elementData, index, elementData, index + numNew,
                             numMoved);

        System.arraycopy(a, 0, elementData, index, numNew);
        size += numNew;
        return numNew != 0;
    }

    public Object[] toArray() {
        return Arrays.copyOf(elementData, size);

    }    

所有Collection具有公共的父接口Iterable,Iterable接口提供如下三个方法:

其中iterator()方法返回一个Iterator类型的对象,Iterator包含两个方法,支持快速失败

原文地址:https://www.cnblogs.com/heapStark/p/8168728.html

时间: 2024-10-12 03:35:21

集合类 collection接口 ArrayList的相关文章

集合类 collection接口 LinkedList

LinkedList 是另外一种重要的数据结构形式, 底层是使用了双向链表数据结构, 特点: 查询速度慢,增删快. 继承关系如下: 可以发现,LinkedList同时实现了Quene和Deque接口. 静态内部类Node的实现: private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<E> next)

Java集合类之Collection接口学习

今天看到Collection集合类这个词,发现脑海里没有太多的记忆,于是重新复习了Collection接口.迟点再总结下Map接口. 下面是自己在MyEclispe中敲的代码,只有实践才可以提高记忆. /** * --Collection接口是Set接口和List接口的父接口,通常情况下不被直接使用,但定义了一些通用方法,通过这些方法可以实现对集合的基本操作. Collection接口的常用方法如下: 1)add():向集合中添加对象 2)remove():向集合中移除对象 3)isEmpty(

集合类:collection接口及其子接口(基础知识普及)

collection接口是集合接口树的根,定义了集合操作的通用API.作用是为了方便程序员处理一组常规元素. 注:Object[] toArray(Object[] a):返回一个内含集合所有元素的数组.实现了集合类和数组类之间的相互转换,一般如果指定数组长度不够的话,系统会自动生成一个新的数组用来存放这些元素,如果长度过大的话,多余的地方会被赋值为NULL.所以,如果不是操作者的话,不应该对这个函数返回的数组进行  .lenght运算,因为那样会得到不准确的数据. 另,这个函数返回的数组的运行

集合类之Collection接口和Map接口

先上图: 一.自己了解 Java的集合类主要有List.Set和Map三大类,其中,List和Set是Collection接口一脉,Map接口自成一脉. 其中,还有两个工具类Arrays和Collections 二.学习了解 1.List List的特性是按顺序插入,可重复,允许null值.实现List接口的集合主要有:ArrayList,LinkedList,Vector和Stack. 简单地讲一下: ArrayList是动态数组,底层是数组,默认初始化大小是10,可以动态扩容1.5倍,线程不

Java集合类根接口:Collection 和 Map

前言 在前文中我们了解了几种常见的数据结构,这些数据结构有着各自的应用场景,并且被广泛的应用于编程语言中,其中,Java中的集合类就是基于这些数据结构为基础. Java的集合类是一些非常实用的工具类,主要用于存储和装载数据 (包括对象),因此,Java的集合类也被成为容器.在Java中,所有的集合类都位于java.util包下,这些集合类主要是基于两个根接口派生而来,它们就是 Collection和 Map. Collection接口 Collection派生出三个子接口,Set代表不可重复的无

集合中list、ArrayList、LinkedList、Vector的区别、Collection接口的共性方法以及数据结构的总结

List (链表|线性表) 特点: 接口,可存放重复元素,元素存取是有序的,允许在指定位置插入元素,并通过索引来访问元素 1.创建一个用指定可视行数初始化的新滚动列表.默认情况下,不允许进行多项选择. 注意,这是 List(rows, false) 的一种便捷方法.还要注意,列表中的可视行数一旦创建就不能更改. public List(int rows)------------------row-----要显示的项数 2.创建一个初始化为显示指定行数的新滚动列表. 注意,如果指定了零行,则会按默

疯狂Java学习笔记(34)----------Iterator、Collection接口以及foreach

Iterator.Collection接口: 如下图:Iterator.Collection同在一个包中: 红字部分使我们经常遇到的,但是遇到又不知道怎么去理解,去应用它! Collection是最基本集合接口,它定义了一组允许重复的对象.Collection接口派生了两个子接口Set和List,分别定义了两种不同的存储方式,如下: 2. Set接口 Set接口继承于Collection接口,它没有提供额外的方法,但实现了Set接口的集合类中的元素是无序且不可重复. 特征:无序且不可重复. 3.

23、Collection接口和List集合

package com.alllist.list; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; public class Muster { /** * ----- Collection 接口 ----- * 1.集合类又被称为容器. * 2.数组的长度是固定的,集合的长度是可变的 * 3.数组和集合的区别: * 3.1.数组用来

Collection接口

在java.util包中提供了一些集合类,常用的有List.Set和Map类,其中List类和Set类继承了Collection接口.这些集合类 又称为容器,它们与数组不同,数组的长度是固定的,而集合的长度是可变的,数组用来存放基本数据类型的数据,集合用来存放类对象的引用. List接口.Set接口.Map接口以及Collection接口的主要特征如下: ● Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用. ● List接口继承了Collection接口,Li