Java集合
在面试过程中集合是很大概率上被问到的,索性来一个小总结,希望印象深刻一点。
集合是一类指定对象的汇总,为了更好地聚集这些特定对象,并对其进行访问、修改、更新等操作,计算机语言定义了一系列不同类型的集合来更好地适应不同的情形。就java而言,主要分为以collection和map接口为代表的两大类,它们作为集合的鼻祖,分别对子孙进行了如下约束:
①Collection代表一组对象,每一个对象都是它的子元素,具有迭代器;
②Map可以把键(key)映射到值(value)的对象,键不能重复;
由Collection呢,引申出了两大分支,分别是有序可重复的List和无序不可重复的Set,List/set/Map构成java集合三足鼎立之势。既然是天下三分,那必然各有千秋:
首先来回顾一下继承关系(多实现关系没有体现,中间抽象类或接口略过):
List(有序、可重复,默认初始容量10,每次扩容3/2)
Vector 线程安全,基于Array,查询修改高效
Stack 基于Vector实现先进后出的栈结构
ArrayList 线程不安全(不同步),基于Array,查询修改高效
LinkedList 基于链表,增删元素效率高
Set(无序、不能重复)
HashSet 基于HashMap实现,默认初始容量16,每次扩容4/3,底层是hash表,线程不安全
LinkedHashSet 基于HashSet实现的链表结构
SortedSet(有序set的接口)
TreeSet 基于TreeMap实现,因此元素间有序排列
Map(键值对、键唯一、值不唯一,均线程不安全)
HashMap 允许最多一个空健,允许空值的键值对,基本替代了HashTable
LinkedHashMap 基于HashMap实现的一个链表
TreeMap 利用红黑二叉树实现根据健升序排序的有序键值对
HashTable 所有健必须非空
Collections和Collection有什么区别?
Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。
它有两个常用的子接口,
List:对元素都有定义索引。有序的。可以重复元素。
Set:不可以重复元素。无序。
Collections是集合框架中的一个工具类。该类中的方法都是静态的。
提供的方法中有可以对list集合进行排序,二分查找等方法。
通常常用的集合都是线程不安全的。因为要提高效率。
如果多线程操作这些集合时,可以通过该工具类中的同步方法,将线程不安全的集合,转换成安全的。
有序性:
List、TreeSet、TreeMap有序,其他无序;
重复性:
Set与Map中的Key不能重复,其他可重;
非空性:
Map有一个键可为null,Set最多一个null,HashTable键非空;
集合的常见4种遍历方式:
①Iterator: 迭代输出,使用最多的输出方式
②ListIterator: Iterator的子接口,专门用于输出List中的内容③Enumeration:for循环遍历
④foreach:for循环
Session 与cookie的区别?
栈与堆的区别?
servlet生命周期?
<< 与 <<< 区别?
简化表达式?
未完待续。。。