枚举:现实生活中有很多事物都是有限个的,比如一年只有四个季节,对应到java类中,一个季节类只能创建出4个对象,不能再多
像这样描述一个只有有限个对象,我们把这个类定义为枚举类。
在JDK1.5之前呢,我们使用自定义枚举类
在JDK1.5之后,java提供了enum关键字来定义枚举类
在enum修饰的枚举类中必须放在第一个位置。!!
1、必须将构造方法私有化,这样做的目的是为了保证类的对象是有限个的
2、创建枚举类的属性(成员变量),外界不能去修改也不能进行直接获取
3、在枚举类中创建对象,因为外界无法创建对象,又想让外界获取,所以改成静态的,可以直接通过类名访问
4、提供公共的方法获取属性
Math.random(); [0.0,1.0)
public class Random: 该类的实例用于生成伪随机数的流
java提供了一个类给我们做日期格式转换使用的
这个类叫做:SimpleDateFormat
public SimpleDateFormat(String pattern)使用给定模式SimpleDateFormat并使用默认的FORMAT语言环境的默认日期格式符号。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
集合
java替我们考虑到了这一点,根据存储元素的不同,元素的特点不同,以及存储与取出的方式不同
提供了一个集合继承体系给我们使用,简单的来说,就是今天开始上的内容:集合
面试题)集合与数组的不同点:
1、数组的长度是不可变的,集合是可以改变的
2、数组可以存放基本数据类型的数据,也可以存放引用数据类型的数据
集合只能存放引用数据类型的数据,但是一个集合中可以存放不同的数据类型元素
(注意:尽管我们说了集合可以存放不同的数据类型数据,但是,在实际开发中,一个集合存放的一类数据)
集合可以根据存放各种各样的数据,每种数据的长度,大小以及自身的特点都是不一样的,所以,java中集合也不应该是单一的,我们应该针对不同的需要,使用java提供的不同的集合类。这样的集合,他们的底层数据结构也是不同的,不同没有关系,我们只要知道集合是用来存储元素的,不光可以进行存储,还可以进行查找,删除,判断,等等。
集合继承体系:不同的集合不断地向上提取,这些不同集合应该有着某种共性,我们根据共性向上提取,最终会得到一个集合继承体系。
Collection:
public interface Collection object extends Iterable object
集合层次结构中的根接口。集合表示一组被称为其元素的对象。一些集合允许重复元素,而其他集合不允许。 有些可以是有序和其他无序。
1、添加功能:
boolean add(Object e) 确保此集合包含指定的元素(可选操作)。
boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合(可选操作)。
2、删除功能:
boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)。
boolean removeAll(Collection c) 删除指定集合中包含的所有此集合的元素(可选操作)。
void clear() 从此集合中删除所有元素(可选操作)。
3、获取功能:
Iterator iterator() 返回此集合中的元素的迭代器。
4、判断功能:
boolean contains(Object o) 如果此集合包含指定的元素,则返回 true 。
boolean containsAll(Collection c) 如果此集合包含指定 集合中的所有元素,则返回true。
boolean isEmpty() 如果此集合不包含元素,则返回 true 。
5、int size() 返回此集合中的元素数。
6、求交集
boolean retainAll(Collection c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
7、将集合转换成数组
Object[] toArray() 返回一个包含此集合中所有元素的数组。
All的操作:
boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合(可选操作)。
boolean removeAll(Collection c) 删除指定集合中包含的所有此集合的元素(可选操作)。
boolean containsAll(Collection c) 如果此集合包含指定 集合中的所有元素,则返回true。
boolean retainAll(Collection c) 仅保留此集合中包含在指定集合中的元素(可选操作)。
Collection集合遍历有三种方式:
1、toArray()
2、迭代器遍历
3、增强for循环
1、Object[] toArray()返回一个包含此集合中所有元素的数组。
如果此集合对其迭代器返回的元素的顺序做出任何保证,则此方法必须以相同的顺序返回元素。
2、遍历Collection集合的第二种方式:迭代器遍历
while (iterator.hasNext()) {
Object next = iterator.next();
//向下转型
String s = (String) next;
System.out.println(s + "字符串的长度为:" + s.length());
}
对于迭代器遍历:
1、能否将while循环改进成for循环?能,但是不推荐,推荐使用while循环
2、为什么java将Iterator设计成一个接口,而不是一个类呢?
将来你需要根据不同的数据创建不同的集合进行存储,每个集合都有自身的特点,很有可能每一个集合遍历的顺序存储特点以及方式都不一样,所以在取值的时候,也不太一样,所以就不应该将方法实现,方法不被实现的叫做抽象方法。
为什么不是抽象类呢?因为抽象类类与类之间只能是单继承不能是多继承,所以如果是抽象类,今后一个类要想用迭代器的同时还想继承其他类就不行了。局限性太大,所以java就设计成了一个了接口。将来不同的集合根据自身存储取出元素的特点来实现对应的迭代器中的方法。
Collection下的子接口:List
1、有序集合(也称为序列 )。(有序指的是存储和取出的顺序一致)
2、与Collection不同,List通常允许重复的元素。
List集合特有的功能:
该界面的用户可以精确控制列表中每个元素的插入位置。用户可以通过整数索引(列表中的位置)访问元素,并搜索列表中的元素。因为List集合拥有下标索引的特点,所以根据这个下标索引衍生出了很多特有的方法:
添加功能:
void add(int index, Object element) 将指定的元素插入此列表中的指定位置(可选操作)。
删除功能:
Object remove(int index) 删除该列表中指定位置的元素(可选操作)。
获取功能:
Object get(int index) 返回此列表中指定位置的元素。
修改功能:
Object set(int index, Object element) 用指定的元素(可选操作)替换此列表中指定位置的元素。
List集合特有迭代器:
ListIterator listIterator() 返回列表中的列表迭代器(按适当的顺序)。
List集合特有的迭代器遍历:
ListIterator listIterator() 返回列表中的列表迭代器(按适当的顺序)。