江苏省建设厅官方网站资质查询,网站开发策划,常用软件开发模型,河北做网站哪家公司好16.Java集合框架是什么#xff1f;说出一些集合框架的优点#xff1f;每种编程语言中都有集合#xff0c;最初的Java版本包含几种集合类#xff1a;Vector、Stack、HashTable和Array。随着集合的广泛使用#xff0c;Java1.2提出了囊括所有集合接口、实现和算法的集合框架。… 16.Java集合框架是什么说出一些集合框架的优点每种编程语言中都有集合最初的Java版本包含几种集合类Vector、Stack、HashTable和Array。随着集合的广泛使用Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类Java已经经历了很久。它还包括在Java并发包中阻塞接口以及它们的实现。集合框架的部分优点如下(1)使用核心集合类降低开发成本而非实现我们自己的集合类。(2)随着使用经过严格测试的集合框架类代码质量会得到提高。(3)通过使用JDK附带的集合类可以降低代码维护成本。(4)复用性和可操作性。17.Java集合框架的基础接口有哪些Collection为集合层级的根接口。一个集合代表一组对象这些对象即为它的元素。Java平台不提供这个接口任何直接的实现。Set是一个不能包含重复元素的集合。这个接口对数学集合抽象进行建模被用来代表集合就如一副牌。List是一个有序集合可以包含重复元素。你可以通过它的索引来访问任何元素。List更像长度动态变换的数组。Map是一个将key映射到value的对象.一个Map不能包含重复的key每个key最多只能映射一个value。一些其它的接口有Queue、Dequeue、SortedSet、SortedMap和ListIterator。18.为何Map接口不继承Collection接口尽管Map接口和它的实现也是集合框架的一部分但Map不是集合集合也不是Map。因此Map继承Collection毫无意义反之亦然。如果Map继承Collection接口那么元素去哪儿Map包含key-value对它提供抽取key或value列表集合的方法但是它不适合“一组对象”规范。19.Enumeration和Iterator接口的区别Enumeration的速度是Iterator的两倍也使用更少的内存。Enumeration是非常基础的也满足了基础的需要。但是与Enumeration相比Iterator更加安全因为当一个集合正在被遍历的时候它会阻止其它线程去修改集合。迭代器取代了Java集合框架中的Enumeration。迭代器允许调用者从集合中移除元素而Enumeration不能做到。为了使它的功能更加清晰迭代器方法名已经经过改善。20.Iterater和ListIterator之间有什么区别(1)我们可以使用Iterator来遍历Set和List集合而ListIterator只能遍历List。(2)Iterator只可以向前遍历而LIstIterator可以双向遍历。(3)ListIterator从Iterator接口继承然后添加了一些额外的功能比如添加一个元素、替换一个元素、获取前面或后面元素的索引位置。21.遍历一个List有哪些不同的方式List strList new ArrayList(); /*使用for-each循环for(String obj : strList){ System.out.println(obj); }*///using iteratorIterator it strList.iterator();while(it.hasNext()){ String obj it.next(); System.out.println(obj);}使用迭代器更加线程安全因为它可以确保在当前遍历的集合元素被更改的时候它会抛出ConcurrentModificationException。22.为何Iterator接口没有具体的实现Iterator接口定义了遍历集合的方法但它的实现则是集合实现类的责任。每个能够返回用于遍历的Iterator的集合类都有它自己的Iterator实现内部类。这就允许集合类去选择迭代器是fail-fast还是fail-safe的。比如ArrayList迭代器是fail-fast的而CopyOnWriteArrayList迭代器是fail-safe的。23.在Java中HashMap是如何工作的HashMap在Map.Entry静态内部类实现中存储key-value对。HashMap使用哈希算法在put和get方法中它使用hashCode()和equals()方法。当我们通过传递key-value对调用put方法的时候HashMap使用Key hashCode()和哈希算法来找出存储key-value对的索引。Entry存储在LinkedList中所以如果存在entry它使用equals()方法来检查传递的key是否已经存在如果存在它会覆盖value如果不存在它会创建一个新的entry然后保存。当我们通过传递key调用get方法时它再次使用hashCode()来找到数组中的索引然后使用equals()方法找出正确的Entry然后返回它的值。下面的图片解释了详细内容。其它关于HashMap比较重要的问题是容量、负荷系数和阀值调整。HashMap默认的初始容量是32负荷系数是0.75。阀值是为负荷系数乘以容量无论何时我们尝试添加一个entry如果map的大小比阀值大的时候HashMap会对map的内容进行重新哈希且使用更大的容量。容量总是2的幂所以如果你知道你需要存储大量的key-value对比如缓存从数据库里面拉取的数据使用正确的容量和负荷系数对HashMap进行初始化是个不错的做法。24.hashCode()和equals()方法有何重要性HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。当我们试着从HashMap中获取值的时候这些方法也会被用到。如果这些方法没有被正确地实现在这种情况下两个不同Key也许会产生相同的hashCode()和equals()输出HashMap将会认为它们是相同的然后覆盖它们而非把它们存储到不同的地方。同样的所有不允许存储重复数据的集合类都使用hashCode()和equals()去查找重复所以正确实现它们非常重要。equals()和hashCode()的实现应该遵循以下规则(1)如果o1.equals(o2)那么o1.hashCode() o2.hashCode()总是为true的。(2)如果o1.hashCode() o2.hashCode()并不意味着o1.equals(o2)会为true。25.Map接口提供了哪些不同的集合视图Map接口提供三个集合视图(1)Set keyset()返回map中包含的所有key的一个Set视图。集合是受map支持的map的变化会在集合中反映出来反之亦然。当一个迭代器正在遍历一个集合时若map被修改了(除迭代器自身的移除操作以外)迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除从map中移除对应的映射。它不支持add和addAll操作。(2)Collection values()返回一个map中包含的所有value的一个Collection视图。这个collection受map支持的map的变化会在collection中反映出来反之亦然。当一个迭代器正在遍历一个collection时若map被修改了(除迭代器自身的移除操作以外)迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除从map中移除对应的映射。它不支持add和addAll操作。(3)Set entrySet()返回一个map钟包含的所有映射的一个集合视图。这个集合受map支持的map的变化会在collection中反映出来反之亦然。当一个迭代器正在遍历一个集合时若map被修改了(除迭代器自身的移除操作以及对迭代器返回的entry进行setValue外)迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除从map中移除对应的映射。它不支持add和addAll操作。