集合类的基本接口是collection接口(集合中不予许有重复的对象)和Map接口:(设计模式:接口隔离原则)
---》这个接口的两个基本方法是:
add();
Iterator():实现了Iterator接口,next()方法和hasnext()方法需要联合使用;
这里的两个方法其实是和enumeration接口的nextElement和hasMoreElement方法一致。
补充:for each()翻译为带有迭代器的循环,而collection接口扩展了iterator接口
因此,标准类库的任何集合都可以使用for each.
原理解释:java迭代器应该认为是在两个元素之间,当调用next方法时,迭代器就越过
下一个元素,并返回越过的元素。(可以将iterato.next和inputStream.read看做是等效的)
iterator.remove之前必须调用iterator.next方法(否则抛出illegalStateException异常)
----》由于非抽象类必须实现接口中的所有的方法,所以,
Java类库提供了一个AbstractCollection抽象类(实现了collection接口)
具体的集合:(出去Map结尾的类外,其他类都实现了collection接口)
---》List接口(按插入顺序保存元素)
--》ArrayList:相当于一个可以自动扩充尺寸的数组,查询快,增删慢,线程不安全
--》LinkedList:一个双向链表,查询慢,增删快
*****实现了Queue接口,提供各种Queue和栈的行为
--》Vector:同ArrayList,区别是线程安全
---》Set接口(不能有重复元素)(主要用来测试归属性,contains)
--》HashSet:提供最快的查询速度
--》LinkedHashSet:以插入顺序保存,同时也通过散列提供快速访问
--》TreeSet:保持元素处于排序状态(红-黑树)默认实现了Comparable接口
补充:comparable接口和comparator接口区别:
---comparable接口实现默认的对象比较,内部的compareTo方法
---comparator接口声明了两个显示参数的compare方法,可以自己定义比较对象
---》Map接口(键-值,相当于字典)
--》HashMap:key不能重复;key的实现就是HashSet;允许null的键或值;
--》Hashtable:线程安全的,不允许null的键或值;
--》TreeMap:保持元素处于排序状态(红-黑树)
--》LinkedHashMap:双重链接列表,存储的数据是有序的。
--》WeakHashMap:一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,
Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
--》Properties::key和value都是String类型,用来读配置文件;
--->Queue接口
--》ArrayQueue
--》LinkedList
--》PriorityQueue:典型示例(任务调度)
******使用堆结构,即可以自我调整的二叉树(根中总是最小值)
---》Enum类(分别实现Set和Map接口的)
---》这个接口的两个基本方法是:
add();
Iterator():实现了Iterator接口,next()方法和hasnext()方法需要联合使用;
这里的两个方法其实是和enumeration接口的nextElement和hasMoreElement方法一致。
补充:for each()翻译为带有迭代器的循环,而collection接口扩展了iterator接口
因此,标准类库的任何集合都可以使用for each.
原理解释:java迭代器应该认为是在两个元素之间,当调用next方法时,迭代器就越过
下一个元素,并返回越过的元素。(可以将iterato.next和inputStream.read看做是等效的)
iterator.remove之前必须调用iterator.next方法(否则抛出illegalStateException异常)
----》由于非抽象类必须实现接口中的所有的方法,所以,
Java类库提供了一个AbstractCollection抽象类(实现了collection接口)
具体的集合:(出去Map结尾的类外,其他类都实现了collection接口)
---》List接口(按插入顺序保存元素)
--》ArrayList:相当于一个可以自动扩充尺寸的数组,查询快,增删慢,线程不安全
--》LinkedList:一个双向链表,查询慢,增删快
*****实现了Queue接口,提供各种Queue和栈的行为
--》Vector:同ArrayList,区别是线程安全
---》Set接口(不能有重复元素)(主要用来测试归属性,contains)
--》HashSet:提供最快的查询速度
--》LinkedHashSet:以插入顺序保存,同时也通过散列提供快速访问
--》TreeSet:保持元素处于排序状态(红-黑树)默认实现了Comparable接口
补充:comparable接口和comparator接口区别:
---comparable接口实现默认的对象比较,内部的compareTo方法
---comparator接口声明了两个显示参数的compare方法,可以自己定义比较对象
---》Map接口(键-值,相当于字典)
--》HashMap:key不能重复;key的实现就是HashSet;允许null的键或值;
--》Hashtable:线程安全的,不允许null的键或值;
--》TreeMap:保持元素处于排序状态(红-黑树)
--》LinkedHashMap:双重链接列表,存储的数据是有序的。
--》WeakHashMap:一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。
不过,由于垃圾回收器是一个优先级很低的线程,因此不一定会很快发现那些只具有弱引用的对象。
弱引用可以和一个引用队列(ReferenceQueue)联合使用,如果弱引用所引用的对象被垃圾回收,
Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。
--》Properties::key和value都是String类型,用来读配置文件;
--->Queue接口
--》ArrayQueue
--》LinkedList
--》PriorityQueue:典型示例(任务调度)
******使用堆结构,即可以自我调整的二叉树(根中总是最小值)
---》Enum类(分别实现Set和Map接口的)