一、集合框架
1.概述
面向对象的语言会产生很多对象,为了方便存储,就要有容器来存储这些对象。区别于数组,集合是可变长度的。
注意:集合中不可以存储基本数据类型。
简单总结一下,集合与数组的区别在于:长度可变、不能存储基本数据类型。
2.体系&共性功能
Collection是层次结构中的根接口,即集合框架的顶层。我们先来了解它有哪些功能,就能了解他的实现有哪些基本功能。
2.1.添加
boolean add(E e);
boolean addAll(Collection<? extends E> c);
2.2.删除
boolean remove(object obj);
boolean removeAll(Collection coll);//将两个集合中的相同元素从调用removeAll的集合中删除
void clear();//清空
2.3.判断
boolean contains(object obj);
boolean containsAll(Collection coll);//判断是否包含集合
boolean isEmpty();//判断是否为空
2.4.获取
int size();//集合中的个数
Interator<E> iterator();//返回元素上进行迭代的迭代器,就是取出元素的方式,返回迭代器对象
2.5.其他
boolean retainAll(Collection<E> coll);//取交集
Object[] toArray();//返回包含此 collection 中所有元素的数组。
3.迭代器的使用iterator
3.1.使用
查API:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh
3.2.原理
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同。
所以该迭代器对象是在容器中进行内部实现的。
对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法。
Iterator接口就是对所有的Collection容器进行元素取出的公共接口。
其实就是抓娃娃游戏机中的夹子!
二、List和Set(列表和集合)
1.特点
- List:有序(存入和取出的顺序一致),元素都有索引(角标),元素可以重复。
- Set:元素不能重复,无序。
2.List常见方法
List:特有的常见方法:有一个共性特点就是都可以操作角标。
2.1.添加
void add(int index, T element);
void add(int index, Collection coll);
2.2.删除
Object remove(index);//注意可以返回被删除对象
2.3.修改
Object set(index,element);
2.4.获取
Object get(index);
int indexOf(object);
int lastIndexOf(object);
List subList(from,to);
2.5.listIterator接口
List list;
//通用方法
Iterator it = list.iterator();
//特有方法,只有List有
list.get(x);//int x,返回List中的对象类型
例子:
public static void main(String[] args) {
List list = new ArrayList();
// show(list);
list.add("abc1");
list.add("abc2");
list.add("abc3");
System.out.println("list:"+list);
ListIterator it = list.listIterator();//获取列表迭代器对象
//它可以实现在迭代过程中完成对元素的增删改查。
//注意:只有list集合具备该迭代功能.
while(it.hasNext()){
Object obj = it.next();
if(obj.equals("abc2")){
it.set("abc9");
}
}
System.out.println("hasNext:"+it.hasNext());
System.out.println("hasPrevious:"+it.hasPrevious());
while(it.hasPrevious()){
System.out.println("previous:"+it.previous());
}
System.out.println("list:"+list);
}
3.List 常用子类的特点
- Vector:内部是数组数据结构,是同步的。增删,查询都很慢!
- ArrayList:内 部是数组数据结构,是不同步的。替代了Vector。查询的速度快。
- LinkedList:内部是链表数据结构,是不同步的。增删元素的速度很快。
4.Set无序、可重复
4.1.HashSet
哈希冲突解决办法:1.顺延;2.串联
4.2.LinkedHashSet<E>
具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现。
特点:链表存储,有序;不可重复。
4.3.TreeSet
使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator
进行排序,具体取决于使用的构造方法。
特点:可以对set元素进行排序,
TreeSet集合第一种排序方式:让元素自身具备比较功能,重写被比较对象的CompareTo方法(需要实现Comparable接口)
TreeSet集合第二种排序方式:让TreeSet具备比较能力(Comparator怎么写?)
class ComparatorDemo implements Comparator<StringToInt>{
@Override
public int compare(StringToInt o1, StringToInt o2) {
return o1.comp-o2.comp;
}
}
//实现
ComparatorDemo<StringToInt> comp = new CompparatorDemo<StringToInt>();
TreeSet ts = new TreeSet(Comp);