在 java 程序中,除了常用的八种基本数据类型,String还有一个集合类。常用的有ArrayList、HashMap、HashSet等,也有不常用的Stack、Queue,有线程安全的Vector,HashTable,也有线程不安全的LinkedList,Treemap等等。
一、Collection接口
- 最基本的集合接口,Java SDK提供的类都是继承自Collection的字接口如:List,Set,
- 在java中实现了Collection接口的类必须提供两套标准构造函数,一个无参,一个创建新的Collection,
二、 List接口
- 是Collection的直接接口,代表有序的Collection,用特定的插入顺序维护元素顺序。用户可以对列表中的元素插入位置进行精确的控制,也可以根据元素的位置索引访问元素并搜索列表中的元素,实现List接口的主要集合类:ArrayList,LinkedList,Vector,Stack
- ArrayList:
- 是一个动态数组,允许任何符合规则的元素插入甚至null;
- 每个ArrayList有一个初始容量10,代表数组的大小。随元素的增加,容器的大小也会增加,每次增加元素都会进行容量检查,如果要溢出,就会进行扩容。
- Size(),isEmpty,get,set,iterator,listIterator都以固定时间云寻,
- ArrayList擅长随机访问,同时ArrayList是非同步的。?
- LinkedList:
- LinkedList:是一个双向链表,除了ArrayList的基本操作方法外,还提供其首部和尾部的get,Remove,insert,操作;
- 不支持随机访问,在列表中索引的操作将从头或尾遍历列表;
- 非同步,多个线程同时访问List,必须自己实现访问同步,一种解决方法是在List构造时构造一个同步的list:List list = Collections.synchronizedList(new LinkedList())
- Vector:
与ArrayList相似,但是Vector是同步的,所以Vector是线程安全的动在数组;
- Stack:
继承自Vector,提供5个额外的方法作为堆栈使用,基本的push,pop方法,还有peek方法得到栈顶元素,empty测试是否为空,search检索元素位置,
三、 Set接口
不包含重复元素的Collection,维持自己的内部排序,随机访问对其没有任何意义。实现的集合有:EnumSet,HashSet,TreeSet
- EnumSet:枚举专用
- HashSet:查询速度最快的集合,其内部采用HashCode实现,元素的顺序由哈希码决定,
- TreeSet:生成一个总在排序状态的set,内部以Treemap实现,使用元素的自然顺序来进行排序,或者根据创建Set时提供的Comparator进行排序,取决于具体的构造方法;
四、Map接口
由一系列的键值组成的集合,提供key->value映射,不能存在相同的key值,实现Map的有HashMap,TreeMap,HashTable,Properties,EmumMap