java容器的理解_java容器的理解

Set无序,元素唯一 常用实现类有HashSet,TreeSet

List有序的,可以重复 常用实现类有ArrayList,LinkedList

Map是以键值出现的 常用实现类有HashMap,TreeMap

一.基本概念

Java容器类库的用途是保存对象,根据数据结构不同将其划分为两个不同的概念

1、  Map,一组键值对(key-value)对象的序列,可以使用key来查找value,其中key是不可以重复的,value可以重复。我们可以称其为字典或者关联数组。其中HashMap是无序的,TreeMap是有序的,Hashtable是线程安全的。

?         int size() : 返回此集合中元素的个数

?         boolean isEmpty() : 测试此集合是否为空

?         boolean contains(Object element) : 测试此集合中是否有该元素

?         Iterator iterator() : 返回此集合中的各个元素进行迭代的迭代器

?           boolean containsAll(Collection> c) : 判定此集合是否包含给定的一组元素,包含返回true,否则false

?           boolean addAll(Collection extends E> c) : 将指定集合中的所有元素都添加到当前集合中

?           void clear() : 移除此集合中的所有元素

?           boolean removeAll(Collection> c) : 移除此集合中那些也包含在指定集合中的元素(求集合的差集)

?           boolean retainAll(Collection> c) : 仅保存此集合中那些也包含在指定集合中的元素(求集合的交集)

d)        将集合转换成Object类型的对象数组

1.     List接口及实在现类

List可以将元素维护在特定的序列中,并且答应一个相同元素在集合中多次出现。List接口在Collection接口的基础上增加了大量的方法,使得可以在List中间插进和移除元素。除了Abstract类之外,在学习中比较常用的类有ArrayList(基于数组实现),LinkedList(基于循环链表实现),Vector(基于数组实现,线程安全)

List接口中提供的面向位置操纵的各种方法:(集合中已有的方法略往)

?           void add(int index, E element) : 在列表的指定位置插进指定元素。

?           boolean addAll(int index, Collection extends E> c) : 将指定集合中的所有元素插进到集合中的指定位置。

?           E get(int index) : 返回集合中指定位置的元素。

?           int indexOf(Object o) : 返回指定对象在集合中第一次出现的索引,从0位置开始,返回-1为不存在该元素。

?           int lastIndexOf(Object O) : 返回指定对象在集合中最后一次出现的索引位置,返回-1为不存在。

?           ListIterator listIterator() : 以正确的顺序返回集合中元素的列表迭代器。

?           ListIterator listIterator(int index) : 以正确的顺序返回集合中元素的列表迭代器,从集合中指定的位置开始。

?           E remove(int index) : 移除集合中指定位置的元素。

?           E set(int index, E element) : 用指定元素替换集合中指定位置的元素。

?           List subList(int fromIndex, int toIndex) : 返回集合中指定的fromIndex(包括)和toIndex(不包括)之间的部分视图。

List在数据结构中分别表现为数组、向量、链表、堆栈、队列等形式。

?  ArrayList的特点、实现机制及使用方法

a)      ArrayList特点:

ArrayList顾名思义,它是用数组实现的一种线性表。常规数组不具备自动递增的功能,但是ArrayList在使用时我们不必考虑这个题目。可以直接按位置进行索引,查找和修改速度较快,缺点是插进或者删除速度较慢。在执行插进删除时调用的是System.arraycopy方法,是一个native方法。

b)      ArrayList的实现机制:

在JDK源码中可以看到ArrayList总共只有两个属性,一个是Object数组类型的elementData,一个是int型的size。

在构造方法中也可以看到,无参构造方法调用的是this(10),调用的带一个参数的构造方法,默认无参构造方法分配一个size为10的数组。按照Collection接口中定义的构造方法,它必须有一个通过其它集合对象构造自身对象的方法。这是一个相对比较简单的线性表。并且JDK中提供了大量的比较好用的方法可以使用。该动态数组在存储空间不足时按照下面方法重新分配空间:

a)      Vector的特点:

ArrayList实现的是一种动态数组,LinkedList是一种双向循环链表,Vector并未在前两者的基础上做实现,而是直接实现了List接口。Vector中的所有方法前面都有一个synchronized关键字做修饰。Vector是有序可重复的。

Set(集合):

Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

Set接口主要实现了两个实现类:

HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

TreeSet : TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值