For investors
股价:
5.36 美元 %For investors
股价:
5.36 美元 %认真做教育 专心促就业
集合的分类:由两大接口统领,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:可变数组。它的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转为相应的线程安全集合
如果想学习更多IT实战干货内容,可以关注“重庆达内软件”微信公众号(CQTEDU_UI)获取更多更全资讯。
(来源网络,侵权联系删除)