java.util包中提供了一些集合类,这些集合类又被称容器.
集合和数组的区别:组数的长度是固定的,集合的长度是可变的;数组用来存放基本类型数据,集合用来存放对象的引用.
常用的集合有List集合、Set集合和Map集合,其中List和Set继承了Collection接口.
一.Collection接口
Collection接口是层次结构中的根接口.构成Collection的单位称为元素.Collection接口通常不能直接使用,但该接口提供了添加元素,删除元素,管理数据的的方法.
import java.util.*;//导包
public class Muster{
public static void main(String args[]){
Collectionlist=new ArrayList<>();//实例化集合类对象
list.add("a");//向集合添加数据
list.add("b");
list.add("c");
Iteratorit=list.iterator();//创建迭代器
while(it.hasNext()){//判断是否有一个元素
String str=(String)it.next();//获取集合中元素
System.out.println(str);
}
}
}
二.List集合
list集合继承了Collection接口,因此包含Collection中的所有方法,此外,List接口还定义了一下两个非常重要的方法.
1.get(int index): 获得指定索引位置的元素
2.set(int index,Object obj):将集合中指定索引位置的对象修改为指定的对象.
List接口的实现类
List接口的常用实现类有ArrayList与LinkedList.
1.ArrayList类实现了可变的数组,允许保存所有元素,包括null,并可以根据索引位置对集合进行快速的随机访问;缺点是指向的索引位置插入对象或删除对象的速度较慢.
2.LinkedList类采用链表结构保存对象.这种结构的优点是便于向集合中插入和删除对象,需要向集合中插入、删除对象时,使用LinkedList类实现的List集合的效率较高;但对于随机访问集合中的对象,使用LikedList类实现List集合的效率较低.
Set集合
Set集合中的对象不按特定的方式排序,只是简单地把对象加入集合中,但Set集合中不能包含重复对象.Set集合由Set接口和Set接口的实现类组成.
**注意:**Set构造一个约束条件,传入的Collection对象不能有重复值,必须小心操作可变对象.如果一个Set的可变元素改变了自身状态导致Object.equals(Object)=true,则会出现一些问题.
Set接口常用的实现类有HashSet类与TreeSet类
1.HashSet类实现Set接口,由哈希表支持,它不保证Set的迭代顺序,特别是它不保证该顺序恒久不变,此类允许使用null元素.
2.TreeSet类不仅实现了Set接口,还实现了java.util.SortedSet接口,因此,TreeSet类实现的Set集合在遍历集合时按照自然顺序递增排序,也可以按照指定比较器递增排序,即可以通过比较器对用TreeSet类实现的Set集合中的对象进行排序.
Map集合
Map集合没有继承Collection接口,其提供的是key到value的映射.Map中不能包含相同的key,每个key只能映射一个value.key还觉定了存储对象在映射中的储存位置,但不是由key对象本身决定的,还会通过”散列技术”进行处理,产生一个散列码的整数值.Map集合包括Map接口以及Map接口的所有实现类.
public class UpdateStu{
public static void main(String[]args){
Mapmap=new HashMap<>();//创建Map对象
map.put("01","张三");//向集合中添加对象
map.put("02","李四");
Setset=map.keySet();//构建Map集合中所有key对象的集合
Iteratorit=set.iterator();//创建迭代器
System.out.println("key集合中的元素:");
while(it.hasNext()){
System.out.println(it.next());//遍历集合
}
Collectioncoll=map.values();//构建Map集合中所有values值集合
it=coll.iterator();
System.out.println("values集合中的元素:");
while(it.hasNext()){ //遍历集合
System.out.println(it.next());
}
}
}
Map接口的实现类
Map接口常用的实现类有HashMap和TreeMap.建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合天剑和删除映射关系效率更高.
1.HashMap类是基于哈希表的Map的接口实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性,HashMap通过哈希表对其内部的映射关系进行快速查找
2.TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序.但在添加,删除和定位映射关系时,TreeMap类比HashMap类性能稍差.TreeMap类的键不能为null.