java集合类:1、集合框架

目录

集合框架中的接口

接口之间的区别

Collection

Set

List

Map

集合框架中的实现类

ArrayList

1、我们可以将其看作是能够自动增长容量的数组。

(1)查看jdk路径

(2)查看java源码,ArrayList的内部实现

(3)ArrayList 源码简单分析

2、利用ArrayList的toArray()返回一个数组。

3、Arrays.asList()返回一个列表。

4、迭代器(Iterator) 给我们提供了一种通用的方式来访问集合中的元素。


集合框架中的接口

集合框架是一个统一的架构,用来表示和操作集合。 一个集合是一个对象,它表示了一组对象。集合框架主要是由一些接口、抽象类以及相应的实现类组件。我们来看一下集合框架中的接口

所谓框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,包含了实现集合的接口与类。

从Collection接口派生出两个接口Set和List,从Set接口派生出SortedSet接口。从Map接口派生出SortedMap接口。

需要注意的是:Map接口和Collection接口没有任何关系。

接口之间的区别

我们来看一下这些接口之间的区别:

Collection

集合层次中的根接口,JDK没有提供这个接口直接的实现类。

Set

不能包含重复的元素。

Set接口是从Collection接口继承而来,但是Set接口并没有提供任何新的抽象方法。在Set接口当中它的方法和Collection接口当中的方法是一样的。但是要注意的是,这两个接口它们表示的含义是不一样的。

SortedSet是一个按照升序排列元素的Set。也就是说SortedSet是一个排序的Set

List

是一个有序的集合,可以包含重复的元素。提供了按索引访问的方式。

需要注意的是:这个有序并不是指的排序,它指的是在List当中元素是按照一定的次序摆放的,各个元素之间的位置是很重要的。

我们集合框架中的接口还有相应的实现类都是在java的util包当中的。我们参考API,你会发现在Collection接口当中它提供了一个add方法,可以让我们将元素加入到集合当中。但是它并没有提供相应的get方法,也就是说没有提供相应的获取元素的方法。

那么在List当中,它增加了一个get方法( Object get(int idex) ),是按照索引去获取集合当中的元素。

Map

包含了key-value键值对。Map不能包含重复的key。

SortedMap是一个按照升序排列key的Map。也就是说SortedMap是一个排序的Map

集合框架中的实现类

我们来看一下集合框架中的实现类

继承用的实线,实现类用的虚线

也就是说:HashSet、LinkedHashSet实现了Set接口,SortedSet接口继承于Set接口,其他同理。

那么这些类和接口,我们现在没有必要去死记硬背它。后面我们介绍了这些类的用法以及这些类之间的区别,那么大家自然而然就会记住了。

ArrayList

1、我们可以将其看作是能够自动增长容量的数组。

这句话我们在一些书本上也能够看见,但是我们如果要知道它底层真正的实现,我们可以看看官方给我们提供的源代码,你可以这样操作。

(1)查看jdk路径

在终端输入命令:/usr/libexec/java_home -V

Command + 空格键,进入目录:/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

(2)查看java源码,ArrayList的内部实现

可以看到 src.zip 文件,然后将它解压,如下图我将它们放在一块了。

              

src--->java--->util--->ArrayList.java ,用适当的开发工具打开看看即可

(3)ArrayList 源码简单分析

我们可以看到 ArrayList 这个类当中,它定义了一个 Object 类型的数组

    /**
     * The array buffer into which the elements of the ArrayList are stored.
     * The capacity of the ArrayList is the length of this array buffer. Any
     * empty ArrayList with elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA
     * will be expanded to DEFAULT_CAPACITY when the first element is added.
     */
    transient Object[] elementData; // non-private to simplify nested class access

对于 ArrayList 它是否是将元素增加到这个数组当中,这时候我们可以再看一下它的 add 方法实现,如果它的 add 方法也就是增加元素的方法,是往这个对象数组当中增加这个元素,那么我们就明白了原来这个 ArrayList 在它的背后,就是利用对象数组来实现这个元素的存储的。我们可以 Command + F 查找 add 方法

    /**
     * Appends the specified element to the end of this list.
     *
     * @param e element to be appended to this list
     * @return <tt>true</tt> (as specified by {@link Collection#add})
     */
    public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

在这个 add 方法中我们传入一个对象,它就将此对象放置到这个对象数组当中: elementData[size++] = e ,这时候我们基本能够确定 ArrayList 这个类,它在背后就是利用对象数组来实现的,这样我们对 ArrayList理解起来就更加深刻了。

既然ArrayList 这个类,它在背后就是采用对象数组来实现的。那么这个自动增长容量,也就是当容量不够的时候,我们再分配一个更大的数组,然后将原先数组的元素,拷贝到我们这个新的数组当中。我们在学习过程当中应当抱着一种钻研的态度,当我们看到一个知识点的时候,我们应该想一想我们是否真正的理解了这个知识点。

下面我们来看一下 ArrayList的用法

 

 

2、利用ArrayList的toArray()返回一个数组。

3、Arrays.asList()返回一个列表。

4、迭代器(Iterator) 给我们提供了一种通用的方式来访问集合中的元素。

 

整理中。。。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华哥折腾历险记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值