今天我们先讲一下Collection:
- Collection和Collections的区别:
- java.util.Collection是一种java集合接口,它提供了对集合对象的基本操作通用接口方法,同时它还有很多具体实现:
注:以上图片只列举常用集合类
- java.util.Collections是一个包装类,它包含许多有关集合操作的静态多态方法,此类不能实例化,它就像个工具类,服务与java的Collection。有关Collections的具体方法可参考JDK说明文档(部分也可见),下面我举出几个方法示例:
import java.util.Collection;
import java.util.Collections;
import java.util.ArrayList;
import java.util.List;
public class test {
private double[] a = {123,33,423,655,4553};
List<Double> l = new ArrayList();
List<Double> l2 = new ArrayList();
public static void main(String[] args) {
new test().sort();
}
public void sort(){
for(int i = 0; i<a.length;i++ ){
l.add(a[i]);
}
Collections.sort(l);
for(int i = 0 ;i<a.length;i++){
System.out.println(l.get(i));
}
}
}
运行结果如下:
可在上面代码的基础上添加同类方法,如:
把上面sort()中的
Collections.sort(l);--->Collections.shuffle(l); //随机排序
--->Collections.reverse(l); //反转排序
--->Collections.min(l); //返回最小元素(max,最大)
--->Collections.fill(l,"334"); //用334替换所有元素
......
2.常见java容器的比较:
接口 | 特性 | 实现类 | 实现类特性 | 成员要求 |
List | 线性、有序的存储容器,可通过索引访问元素 | ArrayList | 数组实现。非同步。 |
|
Vector | 类似ArrayList,同步。 |
| ||
LinkedList | 双向链表。非同步。 |
| ||
Map | 保存键值对成员 | HashMap | 基于哈希表的 Map | 任意Object对象,如果修改了equals方法,需同时修改hashCode方法 |
TreeMap | 默认根据自然顺序进行排序, 或者根据创建映射时提供的 Comparator进行排序 | 键成员要求实现Comparable接口,或者使用Comparator构造TreeMap。键成员一般为同一类型。 | ||
LinkedHashMap | 类似于HashMap,但迭代遍历时取得“键值对”的顺序是其插入顺序或者最近最少使用的次序 | 与HashMap相同 | ||
IdentityHashMap | 使用==取代equals()对“键值”进行比较的散列映射 | 成员通过==判断是否相等 | ||
WeakHashMap | 弱键映射,允许释放映射所指向的对象 |
| ||
ConcurrentHashMap | 线性安全的Map |
| ||
Set | 成员不能重复 | HashSet | 为快速查找设计的Set | 元素必须定义hashCode() |
TreeSet | 保持次序的Set,底层为树结构 | 元素必须实现Comparable接口 | ||
LinkedHashSet | 内部使用链表维护元素的顺序(插入的次序) | 元素必须定义hashCode() |
在满足要求的情况下,Map应尽量使用HashMap,Set应尽量使用HashSet
3.Collection的学习:
实例1:
import java.util.*;
public class SimpleCollection{
public static void main(String[] args){
Collection<Integer> c = new ArrayList<Integer>();
for(int i = 0;i < 10; i++)
c.add(i); //Autoboxing
for(Integer i: c)
System.out.println(i +", ");
}
}
/*
0,1,2,3,4,5,6,7,8,9,
*/
实例2:
/*
如何向Collection添加一组元素
*/
//以下是方法体
Collection<Integer> collection = new ArrayList<Integer>
(Arrays.asList(1,2,3,4,5)); //Array像Collections一样是工具类
Integer[] moreInt = {6,7,8,9,10};
Collection.addAll(Arrays.asList(moreInt));
Collections.addAll( collection,11,12,13,14); //Collection对象作参数
Collections.addAll( collection, moreInt);
List<Integer> list = Arrays.asList(16,17,18);
list.set(1,99);
//list.add(21) //错误,asList产生的List的长度不可变,只能修改元素值
下一节学习List部分!!