马鞍山网站开发流程,设计师免费资源导航,上海公共招聘平台,手机网站制作费面试官#xff1a;Java的容器类你有什么了解吗#xff1f;-#xff1a;额#xff0c;没有用过....面试官#xff1a;你肯定用过#xff0c;但你没有注意过....-#xff1a;应该是吧....你知道什么是容器类吗#xff1f;Java容器可以说是增强程序员编程能力的基本工具Java的容器类你有什么了解吗-额没有用过....面试官你肯定用过但你没有注意过....-应该是吧....你知道什么是容器类吗Java容器可以说是增强程序员编程能力的基本工具本文将与您一起理解容器类看完之后你也许会恍然大悟这原来就是容器类啊一起避免面试时的尴尬1.容器的用途如果对象的数量与生命周期都是固定的自然我们也就不需要很复杂的数据结构。我们可以通过创建引用来持有对象如Class clazz;也可以通过数组来持有多个对象如Class[] clazs new Class[10];然而一般情况下我们并不知道要创建多少对象或者以何种方式创建对象。数组显然只能创建固定长度的对象为了使程序变得更加灵活与高效Java类库提供了一套完整的容器类具备完善的方法来解决上述问题。2.容器的类别容器的类别]观察上图我们可以得出容器主要分为两种类型两个接口Collection与Map定义了两类不同的对象存储方式。Collection用以保存单一的元素Map保存关联键值对。通过泛型来指定容器存放的数据类型。** Iterator 设计的目的是在未知容器具体的类型的情况下用来遍历容器元素。剩下的容器类型都是继承了这两个接口。在实际编码中通过向上转型**为接口在其与代码中都使用这个接口是非常普遍的使用方式。如下import java.util.*;public class TestCollection {public static void main(String[] args){Collection c new ArrayList();for(int i 0; i 10; i){c.add(i);}for(Integer i : c){System.out.print(i , );}}}注由于List接口的方法比Collection更为丰富所以 实际应用中ArrayList向上转型为List更为合适。刚刚接触容器的朋友们可能会只把Collection与Map当做接口实际上并非如此容器中的接口其实有六个。3. 容器中的七大接口1.Collection接口2.Map接口3.Set接口4.List接口5.Queue接口6.Iterator接口7.Comparable接口其中List, Queue和Set接口继承了Collection接口剩下的接口之间都是相互独立的无继承关系。List和Set接口主要是为了区分是否要包含重复元素Iterater迭代器则是为了更灵活的迭代集合与foreach一起使用。Comparable接口则用于比较。4. 各类容器的功能(主要实现类分析).Collection接口List接口(相比Collection, 添加了新的方法)ArrayList实现List接口类似于动态数组适用于大量随机访问的情况。但插入和删除的代价非常高昂LinkedList实现List接口类似于链表也提供了优化的顺序访问。在插入和删除方面代价低廉随机访问代价较高Set接口(方法与Collection完全相同)HashSetHashSet使用了散列函数实现极大的提高了访问速度集合中的对象是没有顺序的。存入HashSet的对象必须定义hashCode()TreeSetTreeSet使用红黑树来实现存储元素 红黑树的好处是可以插入之后维持集合的有序性从而保证在遍历的时候按照递增的顺序获取对象。LinkedHashSet顾名思义LinkedHashSet使用了链表来保持插入顺序不过为了提高查询效率也使用了散列。Queue接口LinkedListLinkedList实现了Queue接口提供了方法支持队列的行为在以后的系列我们会深入讲解如何用LinkedList实现队列。PriorityQueue与普通队列不同优先队列每次弹出的是优先级最高的元素。可以通过提供自己的Comparator来修改默认的优先级顺序。Map接口HashMapHashMap通过散列机制用来快速访问适用于添加、删除和定位映射关系。允许键对象为null但因为键对象是唯一的所以只允许有一个null。TreeMapTreeMap保持key处于排序状态不允许键值为null访问速度不如HashMapLinkedHashMap 。LinkedHashMap保持元素插入时顺序同时提供散列实现快速访问 。关于Map的散列实现是非常重要的实现Map的原理(关联数组等)。import java.util.*;public class IntegerSet{private static Random rand;public static void main(String[] args){rand new Random(47);Set intset new HashSet();for(int i 0; i 10000; i){intset.add(rand.nextInt(30));}System.out.println(intset);}}5.总结通过本文的回顾相信读者对容器的用途分类以及容器的层次结构与一些常用容器的基本功能和用法有了较为清晰地了解。然而想要更好的使用容器类还必须了解每种容器具体的方法源码以及线程安全的实现但是以上这些应对一下面试官应该还可以吧。