容器
容器:
- 容器的长度可以根据数据的多少自动增删
- 是引用是引用数据类型
- 容器中可以存储任意类型的数据
- 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。
1.collection接口
Collection 接口是一组允许重复的对象。
Set 接口继承 Collection,无序不允许重复,使用自己内部的一个排列机制。
List 接口继承 Collection,有序允许重复,以元素安插的次序来放置元素, 不会重新排列。
Map 接口是一组成对的键值对象.
package com.tyl.homework0707;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionDemo {
public static void main(String[] args) {
Collection c2 = new ArrayList();
c2.add("0000");
System.out.println(c2);
2.ArrayList
ArrayList 是 List 的子类,它和 HashSet 相反,允许存放重复元素,因此有序。如果对 ArrayList 进行访问,迭代器将从索引 0 开始, 每迭代一次,索引值加 1。
遍历方式:
- 增强for循环
for(Object o:c2) {
System.out.println(o);
}
-
普通for循环方式
-
迭代器
Iterator it = c2.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
几个List接口的区别:
1) AarryList :
- 底层实现: 可变数组实现的,内部 通过数组拷贝实现根据内容可变长
- 优点 : 根据索引查询效率高
- 缺点 :错增加删除时效率低,因为要通过数组拷贝实现
- 应用场景: 存储耽搁数据,有序可以重复–>大量做查询,少量增删,推荐使用ArrayList
- 扩容: 在第一次添加数据时候初始容量10 , 通过Arrays.copyof方法进行动态扩容,每次扩容原容量的1.5倍
源码:
int newCapacity = oldCapacity + (oldCapacity >> 1);
2) Vector:
- 底层实现: 可变数组实现的
- 扩容:: 在第一次添加数据时候初始容量10 , 每次扩容原容量的2倍
- 与ArrayList不同点:
- 1)AarryList线程不安全 ,vector线程安全
- 2)扩容问题: ArrayList1.5倍增长 vector2倍增长 ArrayList更有利于节省内存
3)LinkedList:
- 底层实现: 双向链表实现的
- 优点:增删效率高
- 缺点: 查询效率低
- 应用场景: 存储耽搁数据,有序可以重复–>如果做大量的增删,少量的查询,推荐使用LinkedList
3.泛型
把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型
泛型的好处:
增强程序的可读性和稳定性。
使用泛型,保留了容器中元素的类型,安全省心的使用容器。
package com.tyl.homework0707;
import java.util.ArrayList;
import java.util.List;
public class ArrayListCopy02 {
public static void main(String[] args) {
//泛型不能使用基本类型,只能使用引用类型
List<Integer> list = new ArrayList();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
list.add(5);
枚举
枚举类可以简单地理解为一种特殊的java类 。通过关键字 enum实现,自动继承自Enum类(枚举类),其中每一个数据,都是枚举类的实例。
enum Week{
//每个都是实例
Mon,Tue,Sun;
//可以有其他属性
private String name;
private int num;