重庆达内IT培训
美国上市IT培训机构

400-111-8989

JAVA基础之集合阐述

  • 时间:2017-08-31 17:54
  • 发布:达内
  • 来源:达内

集合的分类:由两大接口统领,CollectionMap

CollectionMap的区别是,Map里面放的是键值对,而Collection中只有孤零零的一个人。

先说Collection

Collection所包含的方法:

反映自身属性梯队:isEmpty(),size()

容器操作梯队:增[add(E e)],删[remove(Object o)],查[contains(Object o)]

大批量操作梯队:addAll(Collection<? extends E> c),removeAll(Collection<?> c),containsAll(Collection<?> c),clear()

retainAll(Collection<?> c) 这个解释下,留下此集合和参数集合中的交集。(相信大家没有被参数吓到)

负责比较梯队:hashCode()equals(Object c) 这两个之后再详细说吧。。。。

变形梯队:Iterator<E>iterator() 返回迭代器,<T> T[]toArray(T[] a)将自己体内的对象变为相应的对象数组,Object[] toArray() 没有泛型,只能变成老祖宗。

注:以上没有给出返回值的方法,其返回值也是很重要的。

Collection下又有很多门派,但我只介绍我接触过的,其他的大家自强吧。

List:有序,可重。

Set:无序(存入顺序与输出顺序无关),不可重。

PS:这几个接口为什么不以"I"开头命名呢

List下的虾兵蟹将们(同样还只是我接触过的

ArrayList:可变数组。它的contains方法是线性比较,涉及多层循环时要注意,会很慢。其他的基本用法就不敷述了。

LinkedList:内部是用链表实现的,所以增删会很快。多了一些对于第一个元素和最后一个元素的操作,如peek(),pop(),poll()等。

Set下的小弟们:HashSetTreeSet

HashSet:里面的值不可重复,输出的顺序与存入的顺序无关。它的contains方法实现了哈希算法,查找是非线性的,特别快。如果要改变contains方法的行为,比如比 较自定义对象,就需要重写hashCode()方法与equals()方法。既然已经重写了hashCode,为什么还要重写equals;既然有equals,重写hashCode岂不是多余。 这就要弄明白哈希算法了。哈希算法中,不可避免的会出现哈希冲突,即hashCode返回同样的值,这时需要解决哈希冲突,会有很多种办法,而这个equals 法就是在哈希冲突的情况下调用的。

TreeSet:放入其中的对象必须是可排序的,即实现了ComparableComparator接口。它的contains()方法调用的是NavigableMapcontainsKey方法。

Map所包含的方法:

反应自身属性的小团伙:isEmpty()size()

容器操作团伙:get(Object key)put(K key, V value)remove(Object key)containsKey(Object key)containsValue(Object value)clear()

大批量操作团伙:putAll(Map<? extends K,? extends V> m)clear()

比较团伙:hashCode()equals(Object c) HashSet中介绍的功能相同

变形团伙:Set<Map.Entry<K,V>>entrySet()相当于Collections中的迭代器,Set<K> keySet() 返回所有键值,Collection<V> values()返回所有value

Map中存放的是键值对,键是不可重的,通过键可以快速的找到相应值。遍历Map需要一个特殊的数据结构,Map.Entry<K,V>

Set相似,实现Map接口的有HashMapTreeMap(只是我用过的)。

HashMapHashSetcontains方法调用的就是它的containsKey的方法

TreeMap:与TreeSet相同,它的键要求是可排序的,即实现ComparableComparator接口

以上介绍的均为非线程安全,可以用Collections.synchronizedxxx转为相应的线程安全集合

如果想学习更多IT实战干货内容,可以关注“重庆达内软件”微信公众号(CQTEDU_UI)获取更多更全资讯。

 

(来源网络,侵权联系删除)
上一篇:0基础如何更好的学习JAVA
下一篇:在大家纷纷转行学IT的背后,竟是这些原因!

马上预约七天免费体验课

姓名:

电话:

0基础如何更好的学习JAVA

JavaScript学习篇之——面向对象

优秀的Java程序员的编程风格是什么

java工程师需要什么技能?

  • 扫码领取资料

    回复关键字:视频资料

    免费领取 达内课程视频学习资料

  • 搜索抖音号

    搜索抖音号:1821685962

    免费领取达内课程视频学习资料

Copyright © 2021 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
江西省

贵州省

广西省

海南省