集合类
为什么会出现集合类
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就需要对多个对象进行存储,而想要存储多个对象,就不能是一个基本的变量。而应该是一个容器类型的变量,在我们目前所学过的知识里面,容器类型的有数组和StringBUffer 但是,StringBuffer 的结果是一个字符串,不一定满足要求,所以只能是数组,即对象数组,而对象数组又不能适应变化的需求,因为其长度是固定的,所以java就提供了集合类。
数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但是长度是固定的,集合的长度是可变的;
数组中可以存储基本数据类型,而集合只能存储对象;
数组存储的是同一种类型的元素,而集合可以存储不同类型的元素。
集合类的特点
集合只能存储对像;
集合长度是可变的;
集合可以存储不同类型的对象。
集合的存储是多员的,但是呢,存储多个元素我们是有不同的需求的,比如说,我要这个多个元素中不能有相同的元素,再比如说,我要这个元素按照某种规则排序一下,针对不同的需求,java就提供了不同的集合类。所以,java提供了很多个集合类,这多个集合类的数据结构不同。结构不同不重要,重要的是要能够存储东西,并且能够使用它们。
Collection 1.2版本
集合的顶层接口,其子体系有重复的,有唯一的,有有序的,有无序的等
Collection
功能描述
添加功能
boolean add(Object obj):添加一个元素
boolean addAll(Collection c); 添加一个集合
删除功能
void clear() ;移除所有元素
boolean remove(Object obj):移除一个元素
boolean removeAll(Collection c) ;移除一个集合的元素,只要有一个被移除,就返回true
修改功能
boolean contains(Object o) 判断集合中是否包含指定的元素
boolean containsAll(Colleation c); 判断集合中是否包含指定的集合元素 全部包含,返回true
boolean isEmpty() 判断集合的元素是否为空
获取功能
Iterator iterator() {重点}
长度功能
int size() 元素的个数
交集功能
boolean retainAll(Collection a)两 个集合中都有的元素,需要注意的是,元素去哪里了<相同的元素去了C1 >,返回的布尔值又是什么意思(true,)
假设有两个集合A和B
A对B做交集,最终的结果保存在A中,B不变
返回值表示A是否发生改变,如果A发生改变,则返回真,如果A 未发生改变,则返回假
把集合转为数组 Object[] toArray()
注意:ColletionXxx.java 使用了未经检查或不安全的操作
注意: 要了解详细的信息,请使用-Xlint:unchecked 重新编译
java编译器认为该程序存在安全隐患,具体分析,等到反泛型
Collection 接口成员方法,把集合转成数组,可以实现集合的遍历。
Iterator iterator()
迭代器 集合的专用遍历方式
获取元素,并移动到下一个位置:Object next()
noSuchElementException 没有这样的元素,因为已经找到最后的元素了
注意:不要多次调用it.next()方法
Student s = (Student) it.next();
System.out.println(s.getName()+" "+s.getAge());
System.out.println(((Student) it.next()).getName()+" "+((Student) it.next()).getAge())
//该方法是调用的第一次的名字,第二次的年纪,第三次的名字,第四次的年纪,依次类推
迭代器的原码
public interface Iterable{
Iterator iterator();
}
public interface Inteator{
public abstract boolean hasNext();
public absract Object next();
}
public interface Collection extends Iterator{
}
public interface Collection extends Collection{
}
public class ArrayList implements LIst{
Iterator iterator();
}
public interface Collection extends Iterable{
}
public interface List extends Collection{
}
public class ArrayList implements List {
public Iterator iterator(){
return new Itr();
}
private class Itr implements Iterator{
public boolean hasNext();
public Object next(){}
}
}
Collection c = new ArrayList();
c.add("hello");
c.add("world");
c.add("java");
Iterator it = c.iterator(); //new Itr();
while(it.hasNext()){
String s = (String )it.next();
System.out.plrintln(s);
}
常见的数据结构
栈
队列
数组
链表
树
哈希表