枚举
可以用来表示一种事物的所有可能
枚举类
enum Week{
//枚举的成员,当前 枚举类的实例(对象),这些由我们程序员指定,只能有这些,不能外部new实例化-->所以称为当前这个类的所有可能
Mon,Tue,Sun("第七天",10); //Sun("第七天") ->Sun对象名 (参数)-->构造器的实参
//属性
private String name;
private int num;
private Week() { // TODO Auto-generated constructor stub
}
private Week(String name) {
this.name = name;
}
private Week(String name, int num) {
this.name = name;
this.num = num;
}
public String getName() {
return name;
}
public void test() {
System.out.println("今天是"+name);
}
}
注意:
1.枚举都隐示的继承自java.lang.Enum
2.枚举也是一种比较特殊的类,枚举中得饿所有成员都是当前枚举类的一个实例(对象),成员默认public static final修饰
3.不允许外部实例化,只能使用枚举类中提供的成员
public static void main(String[] args) {
//枚举类型实例的获取
Week w = Week.Sun;
//成员名字
System.out.println(w.name());
//索引
System.out.println(w.ordinal());
//w.setName("周日");
System.out.println(w.getName());
w.test();
//判断枚举类型的
switch(w) {
case Mon:
System.out.println("周一");
break;
case Sun:
System.out.println("周天");
break;
}
}
容器
数组和容器:都可以存储多个数据
数组的特点:
- 有序,可根据索引快速查找
- 数据类型一致
- 长度一旦确定不可改变
容器:
- 容器的长度可以根据数据的多少自动增删
- 是引用数据类型
- 容器中可以存储任意类型的数据
容器的使用
List list = new ArrayList();
list.add("zhangsan");
list.add(123);
list.add(new Person());
System.out.println(list.size());
list.add(new Person());
System.out.println(list.size());
System.out.println(list);
list.remove(0);
System.out.println(list.size());
System.out.println(list.get(-1));
Collection:
一些实现类可重复有序(List) 一些不可重复无序(Set)
定义自定义的引用数据类型的数据,存放在容器中(ArrayList)
public static void main(String[] args) {
Collection coll = new ArrayList();
Collection coll2 = new ArrayList();
Collection coll3 = new ArrayList();
coll.add(123); // 自动装箱
coll.add(456); // 自动装箱
//添加
coll2.add("000");
System.out.println(coll2);
coll2.addAll(coll);
System.out.println(coll2);
System.out.println(coll);
//清空
coll.clear();
System.out.println(coll);
//boolean contains(Object o) 包含
System.out.println(coll2.contains("000"));
coll3.addAll(coll2);
//boolean equals(Object o) 比较内容是否相等
System.out.println(coll2.equals(coll3));
//boolean remove(Object o) 移除
System.out.println(coll2.remove(123));
coll2.add(false);
System.out.println(coll2);
//boolean retainAll(Collection<?> c) 交集
System.out.println(coll3.retainAll(coll2));
System.out.println(coll2);
System.out.println(coll3);
}
迭代器
使用方式:
//1.获取容器的迭代器
Iterator it = coll2.iterator();
//2.循环判断是否存在下一个元素
while(it.hasNext()) {
//3.获取
System.out.println(it.next());
}
List 接口
有序可重复
public static void main(String[] args) {
//准备一个List容器,存放我喜欢的电影名字
//泛型: 规定使用数据的类型-->好处增强程序的可读性和稳定性。
//只能存放字符串类型
List<String> list = new ArrayList<String>();
list.add("记忆碎片 ");
list.add("无间道");
list.add("星际穿越");
list.add("后来的我们");
System.out.println(list);
//void add(int index, E element)
list.add(3, "时间规划局");
list.add(5,"无间道");
System.out.println(list);
//E get(int index)
System.out.println(list.get(2));
//int indexOf(Object o)
System.out.println(list.indexOf("无间道")); //1
System.out.println(list.lastIndexOf("无间道")); //1
//remove()
System.out.println(list.remove(4));
//测试 如果存储的数据是数字,remove以索引还是内容为主?????
// E set(int index, E element)
System.out.println(list.set(4, "头号玩家"));
System.out.println(list);
}
List 接口的实现AarryList
底层实现: 可变数组实现的,内部 通过数组拷贝实现根据内容可变长
优点 : 根据索引查询效率高
缺点 :错增加删除时效率低,因为要通过数组拷贝实现
应用场景: 存储耽搁数据,有序可以重复–>大量做查询,少量增删,推荐使用ArrayList
扩容: 在第一次添加数据时候初始容量10 , 通过Arrays.copyof方法进行动态扩容,每次扩容原容量的1.5倍 int newCapacity = oldCapacity + (oldCapacity >> 1);
public class ArrayList03 {
public static void main(String[] args) {
ArrayList<Person> list = new ArrayList();
list.add(new Person("zhangsan",18));
list.add(new Person("zhangsan",18));
list.add(new Person("lisi",19));
list.add(new Person("王五",17));
System.out.println(list);
}
}
class Person{
private String name;
private int age;
public Person() {
// TODO Auto-generated constructor stub
}
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
ArrayList()
构造一个初始容量为 10 的空列表。
ArrayList(Collection<? extends E> c)
构造一个包含指定 collection 的元素的列表,这些元素是按照该 collection 的迭代器返回它们的顺序排列的。
ArrayList(int initialCapacity)
构造一个具有指定初始容量的空列表。