当前位置: 首页 > 科技观察

Java中集合框架总结

时间:2023-03-16 10:46:53 科技观察

直接上图:从上面的集合框架图可以看出,Java集合框架主要包括两类容器,一类是集合(Collection),存储元素的集合;一种是映射(Map),存储的是键/值对映射。Collection接口有List和Set两个子接口,后面是一些抽象类,最后是具体的实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap等。集合框架是表示和操作集合的统一框架。所有集合框架都包括以下内容:接口:它是表示集合的抽象数据类型。例如:Collection、List、Set、Map等。定义多个接口的原因是为了以不同的方式操作集合对象。实现(类):是集合接口的具体实现。本质上,它们是可重用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。除了集合之外,该框架还定义了几个Map接口和类。映射存储键/值对。虽然地图不是集合,但它们完全集成在集合中。Java集合框架提供了一套性能优良、使用方便的接口和类。Java集合框架位于java.util包中,所以在使用集合框架时,需要导入该包。一、收藏接口:1、CollectionCollection是最基本的收藏接口。Collection代表一组Object,即Collection的元素。Java不提供直接继承自Collection的类,只提供继承自Collection的子接口(如List和Set),Collection接口存储了一组非唯一、无序的对象。2、ListList接口是一个有序的Collection。使用该接口可以精确控制每个元素的插入位置,可以通过索引(元素在List中的位置,类似于数组的下标)访问List中的元素。第一个元素的索引为0,并且允许存在相同的元素。List接口存储一组非唯一的、有序的(插入顺序)对象。3.SetSet与List具有完全相同的接口,但行为不同。Set不保存重复元素。Set接口存储一组唯一的、无序的对象。4、MapMap接口存储了一组键值对对象,提供了键(key)到值(value)的映射。5.Map.EntryMap.Entry描述了Map中的一个元素(key/value对),是Map的内部接口。二、Set和List的区别:1、Set接口实例存储的是无序、不重复的数据。List接口实例存储有序和可重复的元素。2.集合检索效率低,删除和插入效率高,插入和删除不会引起元素位置的变化,实现类有HashSet和TreeSet。3、List类似于数组,可以动态增长,根据实际存储数据的长度自动增加List的长度。查找元素效率高,插入删除效率低,因为会引起其他元素的位置改变。实现类包括ArrayList、LinkedList和Vector。三、集合实现类1.AbstractCollection:实现了大部分的集合接口。2.AbstractList:继承于AbstractCollection,实现了List的大部分接口。3.LinkedList:该类实现了List接口,允许空元素。主要用于建立链表数据结构,LinkedList查找效率低。4.ArrayList:该类同样实现了List接口,实现了可变大小数组,在随机访问和遍历元素时提供更好的性能。5.AbstractSet:继承于AbstractCollection,实现了大部分Set接口。6、HashSet:该类实现了Set接口,不允许有重复元素,不保证集合中元素的顺序,允许值为null的元素,但最多只能有一个。7.LinkedHashSet:具有可预测迭代顺序的Set接口的哈希表和链表实现。8.TreeSet:该类实现了Set接口,可以实现排序等功能。9.AbstractMap:实现了大部分的Map接口。10、HashMap:HashMap是一个哈希表,存储键值对(key-value)映射关系。该类实现Map接口,根据key的HashCode值存储数据,访问速度快,最多允许一条记录key为null,不支持线程同步。11.TreeMap:继承AbstractMap,使用树。12.LinkedHashMap:继承自HashMap,使用元素的自然顺序对元素进行排序。13、Vector:这个类和ArrayList很相似,但是这个类是同步的,可以用在多线程的情况下。该类允许设置默认的增长长度,默认的扩展方式是原来的两倍。14.HashTable:HashTable是Dictionary(字典)类的子类,位于java.util包中。四、迭代器的使用(遍历集合)1、遍历ArrayList/***使用不同的方法遍历ArrayList集合*其中,使用迭代器的方法可以不用担心在遍历过程中超过集合的长度***/publicclassTestArrayList{publicstaticvoidmain(String[]args){Listlist=newArrayList<>();list.add("吴永基");list.add("吴玉涛");list.add("吴旭东");//第一种遍历:使用普通的forSystem.out.println("第一种遍历:");for(inti=0;i2,遍历HashSet/***使用不同的方法遍历ArrayList集合*其中,使用迭代器的方法可以不用担心遍历过程中超出集合的长度**/publicclassTestArrayList{publicstaticvoidmain(String[]args){Listlist=newArrayList<>();list.add("吴永基");list.add("吴玉涛");list.add("吴旭东");//第一次遍历:使用普通的forSystem.out.println("第一次遍历:");for(inti=0;iiter=list.迭代器();while(iter.hasNext()){//判断下一个元素后是否有值System.out.println(iter.next());}}}3.遍历HashMap/***使用不同的方法遍历HashSet集合**/publicclassTestHashSet{publicstaticvoidmain(String[]args){Setset=newHashSet<>();set.add("吴永基");set.add("吴玉涛");set.add("吴旭东");//第一次遍历:使用foreachSystem.out.println("第一次遍历:");for(Stringstr:set){System.out.println(str);}//第二种遍历:将set转换为数组相关内容进行遍历System.out.println("第二种遍历:");String[]strArray=newString[set.size()];set.toArray(strArray);for(Stringstr:strArray){System.out.println(str);}//第三次遍历:使用迭代器遍历System.out。println("三次遍历:");Iteratoriter=set.iterator();while(iter.hasNext()){//判断下一个元素后是否有值System.out.println(iter.next());}}}5.总结:Java集合框架是程序员提供预先打包的数据结构来操作它们。集合是可以保存对其他对象的引用的对象。集合接口声明可以对每种类型的集合执行操作。集合框架的类和接口在java.util包中。在使用泛型的情况下,泛型中的数据类型会限制集合中对应的数据类型,所以取出来的时候就是泛型中指定的数据类型;不使用泛型时,任何对象加入集合类后,都会自动转为Object类型,所以取出时,需要进行强制类型转换。