------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
引用:java.util.Collection
为什么要出现集合:
Java是纯面向对象语言,而面向对象语言对事物的体现就是以对象的形式存在的。因此我们想对对象进行操作,就要对对象进行储存,那么聚合就出现了。
数组和集合类同样是容器。有什么不同?
数组虽然是可以存储对象,但是长度是固定不变得。集合的长度可以动态改变的。数值是可以存储基本数据类型,集合只能存储对象。(如String)
Collection的两个常用子接口
- List(列表):
List<E>有序的 collection(也称为序列)。实现此接口可以对每一个列表精确的控制。元素可以重复。因为该集合体系有索引
ArrayList:底层的数据结构使用的是数组结构,特点:查询速度比很快,但是删除速度稍慢,因底层是数组的数据结构,只能通过角标索取,当我们删除一个元素的时候后面的元素都要向后移动,线程不同步。
LinkedList:底层使用的链表的数据结构,特点是增删的熟读快。但是查询的速度稍慢。
Vector:底层是数组数据结构,线程同步。(现在很不用了)
- Set(集合):
Set<E>一个不包含重复元素的 collection。set 不包含满足
e1.equals(e2)
的元素对e1
和e2
,并且最多包含一个 null 元素。HashSet:数据结构是哈希表,
保证元素唯一性的原理,判断hashCode的值是否想相同,如果相同,还会继续判断元素的equal方法,否则返回true
Treeset:基于
TreeMap
的NavigableSet
实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的Comparator
进行排序,具体取决于使用的构造方法。底层数据结构是二叉树,保证数据唯一性的依据是:compareTo方法值得return的返回值。
方法摘要(添加,删除)
返回值 | 方法名 | 解释 |
boolean | add(E e) | 添加对象 |
boolean | addAll(Collection<? extends E> c) |
添加Cllection |
boolean | remove(object o) | 移出指定元素 |
boolean | removeAll(Collection<?> c) |
移除Collection 指定的所元素 |
Iterator<E> | iterator() | 获得两个集合交集的迭代器,就是生成两个集合的相同的元素 |
void | clerar | 删除集合的所有的元素 |
获取元素的思路:就是判断和取出 实现Iterable<T>
所有的集合都需要一些取出方式,所以他们就会有一定的共性,那么我们就把他定义成为在集合的内部,
那么我们把他定义成为内部类,就可以对集合的元素进行操作。 所以就抽取出了一个
接口:Iterable<T> (迭代器)ListIterable出现了以后就可以对List集合进行增删除改查。
实现这个接口允许对象成为 "foreach" 语句的目标
Iterator<T> | interitor() | 返回一组T类型上进行迭代的迭代器 |
迭代器方法摘要
boolean | hasNext | 如果仍然有元素可则返回true |
E | next() | 返回下一个迭代的元素 |
void | remove() | 从迭代器指向Collection中的元素移除 |
改:
E | set(int index ,E element | 用指定元素替换列表中指定位置的元素 |
List集合当中方法摘要的特别之处:List对象 是有索引的。都带脚标。
查:
E | get(int index ) | 返回列表中指定位置的元素。 |
具体放方法的查看,API文档:http://www.w3cschool.cc/manual/jdk1.6/
迭代器的使用方法
package com.text; import java.util.ArrayList; import java.util.Iterator; public class List { public static void main(String[] args) { //创建长度为10的 ArrayList lang = new ArrayList(); lang.add("abc1"); lang.add("abc2"); lang.add("abc1"); lang.add("abc2"); lang.add("abc1"); lang.add("abc3"); lang.add("454"); } //去除重复元素的方法 public static ArrayList singleElement( ArrayList al) { //用到conkd ArrayList newAL = new ArrayList(); //创建查找。 如果第一次存在我我们记录。如果在有同样的内容我们就不添加 //创建迭代器我们反复的查找 Iterator it= al.iterator(); while(it.hasNext()) { Object ob = it.next(); if (!newAL.contains(ob)) { //如果新的没有我们就添加。有就不添加 newAL.add(ob); } } return newAL; } }