java集合相关学习

java集合框架解读

Java集合框架继承Collection和map两个接口,Collection的子类有List,set,queue,而List的实现类有ArrayList,Vecor,LinkList,而set接口的实现类有HashSet,sortSet,EnumSet,queue的实现类有priorityQueue,Deque,Map的实现类主要有HashMap和HashTable。

区别:Collection和map的主要区别在于Collection是存储一组对象的集合,而map是存储键值对形式的集合。

List集合详解:

说明:list是一个有序的集合,使用接口能锁定元素的位置,如indexof方法,可以通过索引访问集合中的元素,如get,对应方法的实现类:ArrayList,LinkList,Vector。

一、ArrayList详解:

ArrayList继承AbstractList类,实现了List, RandomAccess, Cloneable, java.io.Serializable接口。

属性:

DEFAULT_CAPACITY=10,默认创建的集合容量大小是10

Object[] EMPTY_ELEMENTDATA, 一个泛型空数组

Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA , 一个泛型空数组

DEFAULTCAPACITY_EMPTY_ELEMENTDATA

transient Object[]elementData,集合元素存在于该数组中

构造器:

new ArrayList();无参构造器,默认elementData创建一个空数组

ArrayList(int initialCapacity);设置容量的构造器,指定elementData数组的大小为initialCapacity

ArrayList(Collection c);参数为一个集合的构造器,将集合中元素放到elementData数组中,并设置集合大小

基本方法:

添加原数:

add(E e):添加创建时指定类型的数据,先检查集合中数组容量是否足够,当不足够的时候,会将容量扩展到原来的1.5倍,再将原来数组中的元素指向新的数组中去。

add(int index, E element):指定位置添加元素,和add(E,e)一样,先检查容量大小,判断是否需要扩容,调用System.arraycopy(elementData, index, elementData, index +1, size - index)将数组复制一遍,之前的index位置数值上面被复制一次,接着后面的元素的位置都后移以为,再在idex位置上面赋值

删除元素:

remove(int index):按照指定位置删除元素,主要是使用System.arraycopy(elementData, index+1, elementData, index,numMoved)复制一个新的数组来接管。

remove(Object o):按照元素删除元素,遍历数组,用equals方法判断元素所在位置,用remove(int index)删除元素方法将元素移除

获取元素和赋值元素:

get(E e);获取元素,实际上是获取数组的方法获取元素。

set(int index, E element);指定位置给元素赋值。

总结:ArrayList对元素的操作,实际上是对数组的操作,ArrayList集合是有序的集合,线程不安全的集合,在多线程使用比较多的情况下保证不了原子的一致性,指定位置添加元素的时候使用的是数组复制的方法,删除元素也是这样,因此添加和删除元素的时候速度不够快,查找元素是居于数组索引的查找,比较快,因此在添加删除比较多的情况下,不适合用ArrayList集合

LinkList集合

说明:LinkList集合是居于链表的有序集合,用链表的数据结构封装成一的组有序的集合一个元素中由三部分组成,prev头元素,item当前元素,next下一个元素,三个部分组成。查找的时候使用链表方式查找,一个个遍历,速度太慢,但是添加元素比较方便;

vector集合

vector集合的结构和ArrayList一样,不同点在于Vector加上了synchronized方法,保证了线程安全

参考csdn:http://blog.csdn.net/u012877472/article/details/50852933

问:ArrayList添加元素的时候容量大小是如何自动增加的?

答:ArrayList源代码中的属性中有一个数组属性和容量大小的属性组成的,创建数组的时候,容量大小初始为10,当新添加一个元素的时候,先检查ArrayList容量是否足够大,当容量不足的时候,进行扩容,然后新增一个更加大容量的数组,将原来的数组的元素通过Arrays.Copyof的方法复制到新的数组中去,并将引用指向新的数组。

问:什么情况下使用ArrayList,什么情况下使用LinkList?

答:ArrayList是居于数组的数据结构,而LinkList是居于链表的数据结构,get\set比较频繁的集合用ArrayList比较快,因为ArrayList居于数据索引进行查找,而LinkList要移动指针进行查找,如果是add/remove呢,那么用LinkList比较快,因为ArrayList要移动数据。

问:当传递ArrayList到某个方法中,或者某个方法返回ArrayList,什么情况需要考虑安全问题,如何避免这个安全问题?

答:当ArrayList作为参数传到方法的时候,由于无法保证ArrayList在多线程的情况下原子的一致性被破坏,导致原有的结构被破坏,安全问题可以在传入方法的时候,新建一个集合,将传进来的集合元素值复制到新的集合中,再用新的集合进行逻辑运算,返回值也是如此。

问:如何复制一个ArrayList到另外一个ArrayList中?

答:使用clone方法,2,使用ArrayList构造方法,使用copy方法。。。。。。

问:在索引中使用ArrayList的增加或者删除摸个对象的运行过程?效率很低吗?为什么?

答:ArrayList在使用索引新增或者删除元素的时候使用了System.arraycopy方法,因此效率很低

问:ArrayList,vector,LinkList的区别

答:ArrayList和vector都是采取数据存储结构对数据进行存储,根据索引对数据进行操作,而LinkList采用的是链式存储结构,因此ArrayList和vector的查询操作速度比较快,而LinkList的插入,删除速度比较快,ArrayList和LinkList都是非线程安全的,在多线程的环境中无法保证线程的原子性,而vector采用了synchronized方法添加元素,保证了原子一致性,是线程安全的集合,但是添加元素速度比较慢。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容