大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > JAVA基础之集合简介

JAVA基础之集合简介

关键词:JAVA集合  阅读(634) 赞(12)

[摘要]本文是对JAVA基础之集合简介的讲解,对学习Java编程技术有所帮助,与大家分享。

集合,就是将数据倒腾来倒腾去的容器。

集合的分类:由两大接口统领,Collection与Map。

Collection与Map的区别是,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与LinkedList

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

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

Set下的小弟们:HashSet与TreeSet

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

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

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接口的有HashMap与TreeMap(只是我用过的)。

HashMap:HashSet的contains方法调用的就是它的containsKey的方法

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

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



相关评论