java的集合的作用是用来操作和存储对象组,他们对于基础集合的实现非常高效,具有高度的互操作性,并且具有良好的可扩展性和适应性。java集合的类型包括两种,一种是存储单个对象的集合Collection,另一种是以键值对方式存储对象的Map,Collection有三种类型,包括List、Set和Queue,java集合类型都是实现这三个接口的,目的是为了用不同的方式去操作集合对象,其中常用的集合类型有:ArrayList、LinkList,HashSet、LinkHashSet、HashMap和LinkHashMap。
集合接口
java集合中常用的接口是List、Set和Map,这里给出各个接口的描述
Collection | Collection接口是集合中最基本的集合,它代表着一组对象 Collection存储的是一组无序的,不唯一的对象 |
List | List集合是一个有序的集合对象,他可以对其中的对象进行精准的位置访问和插入操作,利用和数组下表类似的方法可以索引到其中的元素,和数组一样从0开始。 List集合存储的是一组有序的,不唯一的对象 |
Set | Set集合是一个无序的对象集合,其中的对象元素不允许重复 Set集合存储的是一组无序的,唯一的对象 |
SortedSet | SortedSet是Set的补充,存储的是有序的对象 |
Map | Map是以键值对方式存储对象的集合,其中健的值不可以重复 |
SortedMap | SortedMap是Map的补充,存储的是由key升序排列的对象 |
Map.Entry | Map集合的内部类,代表着Map中的一个元素,也就是一个键值对 |
List和Set的区别
List和Set接口是java中使用最广泛的单对象集合,他们有各自的优缺点:
1、Set集合存储的是无序的、不可以重复的对象组,List存储的是有序的(位置上有序,1、2、3....),可以重复的对象组
2、Set在插入和遍历的时间都是逊色于List(网上很多说是Set插入的速度会比List快,但是这是我自己试过,如果硬是要说Set比List快,应该是在集合中间插入数据,因为每次插入,List的数据都会往后移动而产生额外的操作,但是如果直接往集合使用add()方法,List确实要比Set快),所以说不管是哪一种说法都不对,主要还是看情景。把ArrayList换成LinkList结果是一样的,也是比Set快,但是时间上稍有不懂,主要是List的实现方式是数组还是链表的方式,这里暂时不做详细解释。
public static void main(String[] args) {
List list=new ArrayList();
Set set =new HashSet();
long lt1=System.currentTimeMillis();
for(int i=0;i<1000000;i++){//往List集合插入一百万调数据
list.add(i);
}
System.out.println("list插入时间:"+(System.currentTimeMillis()-lt1));
long st1=System.currentTimeMillis();
for(int i=0;i<1000000;i++){//往Set集合插入一百万数据
set.add(i);
}
System.out.println("set插入时间:"+(System.currentTimeMillis()-st1));
int sumSet=0;
long s1=System.currentTimeMillis();
for (Object object : set) {//遍历Set集合
if(Integer.parseInt(object.toString())%2==0){
sumSet+=Integer.parseInt(object.toString());
}
}
System.out.println("set遍历时间:"+(System.currentTimeMillis()-s1));
int sumList=0;
long l1=System.currentTimeMillis();
for(Object obj:list){//遍历List集合
if(Integer.parseInt(obj.toString())%2!=0){
sumList+=Integer.parseInt(obj.toString());
}
}
System.out.println("list遍历时间:"+(System.currentTimeMillis()-l1));
}
上面代码的运行结果是
list插入时间:20
set插入时间:104
set遍历时间:572
list遍历时间:81