集合中存放的依然是对象的引用,而不是对象本身

ArrayList:
1) ArrayList底层使用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组
2) 如果生成的数组超过10个,那么ArrayList底层会生成一个新的数组,长度为原数组的1.5倍+1,然后将原数组的元素复制到新数组之中,并且后续增加的内容都会放到新数组之中,当新数组无法容纳增加的元素时,重复该过程
3) 对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高
4) 集合当中只能放置对象的引用,不能放置原生数据类型,当我们需要使用原生数据的包装类才能加入到集合当中
5) 集合当中放置的都是Object类型,因此取出来也是Object类型,必须强制转换

 如果数据量很大,那么造成数组重新分配的次数会增加,但对于一般的数据量下,

  1千需要分配 11次
  1万一级需要分配17次
  10万 需要分配23次
  100万需要分配28次
  所以,大家根据实际情况,大致分配一个初始化的容量还是有必要的。但是如果你初始容量太大,而数据增长很慢,那么就在浪费内存了。

System类中的一个JNI方式实现类.(JNI , Java Native Interface 故名思意,就是java 语言调其它语言的一个接口)
这个JNI的底层在不同的平台上不一样.打个比方windows 其实java的JNI就是调了dll . Unix 其实就是调了.so 共享库. 做过C++的一定明白.这个暂且放一下,让我们来关注一下arrayCopy 如何复制数组元素的. 如果有人对java 的JNI接口有兴趣朋友,不防去Sun网站下它的源码.嘎嘎. C代码还是有点深度的.SCSL 源码就能看到. 地址,
https://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/USD/ViewFilteredProducts-SingleVariationTypeFilter
(说明:要注册一个SUN的账号.才可以下载.)

LinkedList:
1) LinkedList底层使用双向链表实现
2) LinkedList的无参结构方法将第一个链表的下一个元素指向自己的上一个元素等于自己,增加元素的时候使用生成一个内部类对象,存放数据<E>,该元素的上一个对象,与下一个对象
将上一个元素的下元素指向自己,将下一个元素的上一个元素指向自己
3) 查找数据需要从第一个一直往第N个找

总结
a) ArrayList底层使用数组实现,LinkedList底层使用双向链表实现
b) 当执行插入或者删除操作时,采用Linked比较好
c) 当执行搜索操作时,采用ArrayList比较好
d) 当向一个ArrayList添加一个对象时,实际上就是将该对象的引用地址放置到了ArrayList底层所维护的数组当中,当向LinkedList中添加一个对象时,实际上LinkedList内部会生成一个Entry对象,该Entry对象的结构为:
private static class Entry<E> {
E element;
Entry<E> next;
Entry<E> previous;

Entry(E element, Entry<E> next, Entry<E> previous) {
this.element = element;// 新元素的内容
this.next = next; // 新元素的下一个元素为上一个元素
this.previous = previous;// 新元素的下一个元素为上一个元素
}
}
其中的Object类型的元素Element就是我们向LinkedList中所添加的元素,然后Entry又构造好了向前向后的引用previous、next最后将这个对象加入到链表当中,换句话说LinkedList中所维护的是一个个的Entry对象。

HashSet:
1)当使用HashSet时,hashCode()方法就会被调用,判断已经存储在集合中的对象的hashcode值是否与增加对象的hashcode是否一致
不一致:直接添加
一致:再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则进加进去

集合-Collection的更多相关文章

  1. Guava库介绍之集合(Collection)相关的API

    作者:Jack47 转载请保留作者和原文出处 欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. 本文是我写的Google开源的Java编程库Guava系列之一,主要介 ...

  2. 【再探backbone 02】集合-Collection

    前言 昨天我们一起学习了backbone的model,我个人对backbone的熟悉程度提高了,但是也发现一个严重的问题!!! 我平时压根没有用到model这块的东西,事实上我只用到了view,所以昨 ...

  3. 5、数组和集合--Collection、Map

    一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1:  类型 [] 数组名 = ne ...

  4. WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

    数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...

  5. 在含有null值的复杂类的集合(Collection)中取最大值

    在日常编程中,经常遇到要在一组复杂类的集合(Collection)中做比较.取最大值或最小值. 举个最简单的例子,我们要在一个如下结构的集合中选取包含最大值的元素: public class Clas ...

  6. 集合Collection总览

    前言 声明,本文使用的是JDK1.8 从今天开始正式去学习Java基础中最重要的东西--->集合 无论在开发中,在面试中这个知识点都是非常非常重要的,因此,我在此花费的时间也是很多,得参阅挺多的 ...

  7. java中集合Collection转list对象

    参考:java中集合Collection转list对象 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构造方法获取购物项,这里购物项是Collection对象 // 购物项集合,K商品I ...

  8. java基础27 单例集合Collection及其常用方法

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

  9. 18_java之集合Collection

    01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public static void main(String[] args) { ArrayList< ...

  10. 集合--Collection接口详解&&迭代器

    /* * 集合的顶层接口--Collection接口 * 添加 * add() * addAll() * * 遍历集合 * iterator() 迭代器 * * 删除 * remove() * rem ...

随机推荐

  1. 机器学习 —— 概率图模型(Homework: Representation)

    前两周的作业主要是关于Factor以及有向图的构造,但是概率图模型中还有一种更强大的武器——双向图(无向图.Markov Network).与有向图不同,双向图可以描述两个var之间相互作用以及联系. ...

  2. Eliza Doolittle lyrics Big City

    Eliza Doolittle lyrics  Big City 歌词很好,现在还没有,以后添加进来.

  3. WIN32编程杂记(一)

    1.UNREFERENCED_PARAMETER的用处 作用:告诉编译器,已经使用了该变量,不必检测警告! 在VC编译器下,如果您用最高级别进行编译,编译器就会很苛刻地指出您的非常细小的警告.当你生命 ...

  4. 常用的coco2d-x游戏开发工具(转)

    物理编辑工具Physics Editing ToolsMekanimo 网址:http://www.mekanimo.net/PhysicsBench 网址:http://www.cocos2d-ip ...

  5. HDU 4869 Turn the pokers (2014 Multi-University Training Contest 1)

    Turn the pokers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. UVa 1646 (递推 JAVA大数) Edge Case

    题意: 有n个点围成一圈,这n个点的匹配就是没有公共点的边集(这些边只能连接一圈中相邻的两点),求所有匹配的个数. 额,我不会分析..=_=|| 算了几个数,找找规律发现它满足斐波那契数列的递推关系, ...

  7. Mysql分支

    MySQL是历史上最受欢迎的免费开源程序之一.它是成千上万个网站的数据库骨干,并且可以将它(和linux)作为过去10年里Internet呈指数级增长的一个有力证明. 那么,如果MySQL真的这么重要 ...

  8. BZOJ 1861 书架

    (╯-_-)╯╧╧ 此处为错误代码. #include<iostream> #include<cstdio> #include<cstring> #include& ...

  9. UVA 11426 GCD-Extreme(II) ★ (欧拉函数)

    题意 求Σ{1<=i<N} Σ{i<j<=N} GCD(i, j)     (N<=4000000) 分析 原始思路 暴力求明显是不行的,我们把式子简化形式一下发现它可以 ...

  10. Tomcat 7.0配置SSL的问题及解决办法

    http://dong-shuai22-126-com.iteye.com/blog/1830209   以前一直在用Tomcat 6.0.29版本,今下载了apache-tomcat-7.0.33- ...