一、枚举
特征:
1、不能有public的构造函数。(防止外部修改常值)
2、所有的枚举值都是public,static,final的。
3、enum默认实现了java.lang.Comparable 接口。
4、enum重载了toString方法。
5、enum提供了valueOf(),values()……等方法。
格式 :
[ 枚举类型修饰词列表 ] enum 枚举类型标识符 { 枚举常量 1 , 枚举常量 2 , ... ..., 枚举常量 n }
eg. public enum Test{
Monday("Mon.");
Tuesday("Tue.");
。。。
Test(String name){。。。} }
二、集合
集合框架:所谓框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统 一的架构,包含了实现集合的接口与类,以及集合算法。
集合框架几个基本接口下的层次结构关系:
1、Collection:集合层次中的根接口,JDK 没有提供这个接口直接的实现类。
2、Set:继承自 Collection,但不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。
3、List:继承自 Collection,是一个有序的集合,允许重复,并引入位置下标。提供了按索引访问的方式。
4、Queue:扩展自Collection接口,提供队列各种操作。
5、Map:包含了key-value对。Map不能包含重复的key,但value可以重复。 SortedMap是一个按照升序排列key的Map。
三、数组
java.util里面有一个Arrays类,它包括了一组可用于数组的static方法,其中有四个基本方法:
用来比较两个数组是否相等的equals();
用来填充的fill();
用来对数组进行排序的sort();
以及用于在一个已排序的数组中查找元素的binarySearch()。
四、集合-Collection接口
Java SDK不提供直接实现自Collection 的类,Java SDK提供的类都是实现自 Collection的“子接口”如List、Set、 Queue。
不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代器,使用该迭代器即可逐一访问Collection中每一个元素。
eg. Iterator it = collection.iterator(); // 获得一个迭代子
while(it.hasNext()) { Object obj = it.next(); // 得到下一个元素 }
五、集合-List接口
列表,是一个排序的Collection,它可以包含重复的值。
具有位置下标,可按索引访问其元素,索引从0开始。
六、ArrayList
ArrayList实现了可变大小的数组。它允许所有元素,包括null。
ArrayList没有同步化。 (涉及多线程)
eg. List <String> list=new ArrayList<String>();
创建了泛型类ArrayList,并将其引用分别赋予变量list。(赋值给父接口的类型)
七、LinkedList
LinkedList实现了List接口,允许null元素。
程序员就可以轻松的 把 LinkedList 当作一个堆栈(stack), 队列(queue)或双向队列(deque) 或其它面向端点的数据结构。
eg. List <String> list=new ArrayList<>();
注意:LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
List list = Collections.synchronizedList(new LinkedList(...));
另: Arrays类提供静态方法asList(),将数组看成List集合,并返回其视图。
该数组的list视图使程序员能够将数组像列表那样操作。
List<String> list = Arrays.asList(arr);
八、ArrayList和LinkedList的比较
如果经常在List的开始处增加元素,或者 经常在List中间位置进行插入和删除操作, 且只要顺序的访问列表元素,应该使用 LinkedList(链表),
如果希望随机访问有序集合中的任何一个元素,或者总是把元素追加在末尾, 优先考虑使用使用ArrayList(数组)。
九、集合-Vector
和ArrayList一样,Vector类也提供与数组相似的数据结构功能,但它能动态的调整大小,可以存储不同类型的数据元素。
Java 2 SDK,版本 2以后Vector类被改良到“集合框架”层次结构中以实现 List 接口。
与ArrayList不同的是,Vector是同步的。
当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出 ConcurrentModificationException,必须捕获该异常。
十、集合-Stack
由于Stack类扩展Vector类,所有 Vector类的全部公有接口都可以用于 Stack。
要当心一些超常规方法,例如:Vector的add方法,可以在栈的任何地方插入元素,会扰乱栈的操作。