自己总结的Java框架,其中标红显示的是很重要成用的实现类
Java集合工具类,可以实现常见的数据结构,如栈、队等
Java集合大致分为:
Collection
- List(绳子)——有序、可重复
LinkedList(链表实现)
ArrayList(数组实现)
- Set(瓶子)——无序、不可重复
HashSet
LinkedHashSet
TreeSet
EnumSet
- Queue(队列集合)
ArrayDeque
Map(键值对)——无序不可重复
HashMap
TreeMap
注:
Iterator 是 Collection 接口的父接口
Iterator也是Java集合框架的成员,但它的设计不是用来盛装数据的,而是用来遍历(迭代访问)Collection的元素。(只能遍历Collection集合吗?对)
注意:
1.Iterator的对象是需要依赖集合的存在才会有意义
2.定义的4个常用的方法:
boolean hasNext(); //若果没有遍历完就返回true
Object next(); //返回集合里的下一个元素,注意类型,实际中可能需要类型转换
void remove(); //删除集合里上一次next方法返回的元素,只是副本,并非真正删除集合中的元素
void forEachRemaining(Consumer action); //Java8新增的默认方法。
3.在Iterator迭代访问Collection集合时,Collection的集合不能被外界操作改变(如增、删操作),否则会引发 java.util.ConcurrentModificationException 的异常。但可以被该迭代器操作(如删除)。事实上,在ListIterator迭代器中,可以利用该迭代器对集合进行增、删操作,只是外界不能操作该集合而已
4.Iterator集合采用的快速失败的机制(fail-fast),即一旦在迭代过程中检测到该集合已经被修改(通常是程序中其他线程),程序就会立马引发ConcurrentModificationException异常。而不是显示修改后的异常,这可以避免共享资源而引发的潜在问题
5.迭代器作为Collection集合的父接口,因此,在Collection集合的实现类中必须要实现Iterator这一接口,那么具体是怎么实现的呢?是在这些子类中以内部类的方式来实现Iterator接口,
例如ArrayList集合的源码:
public ArrayList {
...
public Iterator<E> iterator() {
return new Itr();
}
//内部类
private class Itr implements Iterator<E> {
...
}
...
}
数组与集合的区别?
数组
-长度不可变
-无法保存具有映射关系的数据
-数组元素可以是基本类型,也可以是对象(实际是对象的引用)
集合
-长度可变
-可以保存具有映射关系的数据
-数据元素只能保存对象(实际是对象的引用)?那保存基本类型时会自动自动装箱成相应的包装类