集合的由来:
对象是用于封装特有的数据,对象多了需要存储,如果对象的个数不确定,
就使用集合这种容器进行存储.
集合特点:
1.用于存储对象的容器
2.集合的长度是可变的 // 数组不变
3.集合中不可以存储基本数类型值据 // 数组可以存储基本数据类型的值
容器自身都有其特定的数据结构
容器共性:Collection(集合框架中的根接口)
集合在java.util包(工具)
集合因为内部的数据结构不同,有多种具体容器,
不断地向上抽取,就形成了集合框架
框架的顶层Collection接口:
Collecction的常见方法:
1.添加
boolean b =add(E e ) e其实就是Object,能接收任意对象.
boolean b =addAll(Collection coll)
2.删除
boolean remove(Object obj)
boolean remove(Collection coll)
void clear();//清空
3.判断
bollean conyains (obeject obj);
boolean containsAll(Collection coll);
boolean isEmpty();//判断集合是否有元素
4.获取:
获取集合的元素个数
int size();
获取集合中元素的个数:
迭代器(专门用于取出集合中元素的方式)
Iterator a = iterator();
该对象必须依赖于具体的容器,因为每个容器中的数据结构都不同
所以该迭代器对象是在容器中内部实现的
对于使用容器这而言,具体的实现不重要,只要通过容器获取到该实现的迭代器对象即可.
也就是iterator方法.
Iterator 接口也就是对所有的Collection容器进行元素取出的公共接口.
for (Iterator it = coll.iterator(); it.hasNext();) {
System.out.println(it.next());
}
//依赖于子类(内部类)实现的,每个容器中有自己的数据结构
在迭代过程中不要使用集合操作元素,容易出现异常
java.util.ConcurrentModificationException 异常
可以使用Iterator接口的子接口ListIterator来完成在迭代中队元素进行更多的操作
只有list有listIterator迭代方法
ListIterator可以实现在迭代过程中对元素的增删改查
注意:只有list集合具备该迭代功能
while(lit.hasPrevious()){
System.out.println("previous:"+lit.previous());//反向输出
}
listIterator() //从头开始
listIterator(int index) //从指定角标开始
5.其他方法
retainAll(Collection coll) 取交集
Objicet[] toArray();将集合变为数组
-------------------------------------------------------------------------------------------
===========================================================================================
Collection下两大子体系|--List:有序(存入和取出的顺序一致),
元素都有索引(角标)
元素可以重复
|--set: 元素不能重复.
无序.(有可能会有序)
list:特有的常见方法:有一个共性特点都可以操作角标
可以完成对元素的增删改查.
1,添加
void add(int index,element);
void add(int index,Collection);
2.删除
Object remove(index);
3.修改
Object set(index,element)
4.获取
Object get(index)
int indexOf(object)
int lastIndexOf(object)
List subList(from,to)
list(有角标)集合下三个常用的子类对象:
可变数组的原理,创建一个新数组,将原来的数组放到新数组中来
1.0出现|--vector:内部是数组数据结构. 同步的,线程安全,效率低(几乎不用)100%延长
增删查询都很慢
|--ArrayList:内部是数组数据结构,增删速度不快,查找元素的速度快查询速度快,增删慢,是不同步的,效率高,替代了vector 50%延长
|--LinkedList:链接列表实现,简称链表. 内部是链表数据结构,是不同步的,增删元素的速度非常快,查询慢 ,有角标
--------LinkedList link = new LinkedList();
link.addFirst("abc1");
link.addFirst("abc1");
link.addFirst("abc1");
link.addFirst("abc1");
while(!(link.isEmpty())){
syso(link.removeFirst());
}
addFirst();
addLast();
jdk 1.6
offerFirst();
offerLast();
getFirst(); //获取但不移除,如果次链表为空,抛出异NoSuchElementException
getLast();
jdk1.6
peekFirst();获取但不移除,如果次链表为空,返回null
peekLast();
removeFirst(); //获取并移除,如果次链表为空,抛出异NoSuchElementException
removeLast();
pollFirst();;获取并移除,如果次链表为空,返回null
pollLast();
=======================================================
set :元素不可重复,是无序的
set接口中的方法跟Collection一致
子类对象
|---HashSet 内部数据结构是哈希表,是不同步的.
|
|
|