数组存储引用数据类型:
存储的是地址值。
Student[] stu = new Student[3];
stu[0] = new Student("张三",23);
数组和集合的区别:
数组:长度不可变,既可以存储基本数据类型也可以存储引用数据类型。
集合:长度可变,只能存储引用数据类型(存储基本数据类型的数据时,会自动装箱),可以存储任意类型。
单列集合:
Collection :单列集合顶层接口
-List :接口,存储有序,元素可重复
-ArrayList 类,底层数组实现
-LinkedList 类,底层链表实现
-Vector 类,底层数组实现
-Set :接口,存储无序,元素不可重复
-HashSet 类,底层hash算法实现
-TreeSet 类,底层二叉树实现
Collection :
方法: boolean add(E e) //添加元素
boolean remove(Object o) //移除某一个元素
void clear() //清空集合
boolean contains(Object o) //判断集合中是否包含某一个元素
boolean isEmpty() //判断集合是否为空
int size() //获取集合的长度
注意:集合重写了toString()方法,所以打印输出集合时,输出的是集合中的内容的字符串形式。
boolean addAll(Collection c) //向此集合中添加另外一个集合中的所有元素
boolean removeAll(Collection c) //从此集合中将指定集合中的元素移除
boolean containsAll(Collection c)//如果此集合中包含指定集合中的所有元素则返回true
boolean retainAll(Collection c) //将两个集合的交集返回给此集合,如果此集合发生改变则返回true
迭代器:
Collection c = new ArrayList();
c.add(new Student("赵四",20));
c.add(new Student("张三",23));
c.add(new Student("赵五",25));
c.add(new Student("赵六",26));
Iterator i = c.iterator(); //获取迭代器
while(i.hasNext()) { //判断是否有下一个元素
Student s = (Student) i.next(); //获取下一个元素,向下转型
System.out.println(s.getName() +"---"+ s.getAge());
}
迭代器原理
迭代器原理:迭代器是对集合进行遍历,而每一个集合内部的存储结构都是不同的,所以每一个集合存和取都是不一样,那么就需要在每一个类中定义hasNext()和next()方法,这样做是可以的,但是会让整个集合体系过于臃肿,迭代器是将这样的方法向上抽取出接口,然后在每个类的内部,定义自己迭代方式,这样做的好处有二,第一规定了整个集合体系的遍历方式都是hasNext()和next()方法,第二,代码有底层内部实现,使用者不用管怎么实现的,会用即可
迭代器源码解析
1,在eclipse中ctrl + shift + t找到ArrayList类
2,ctrl+o查找iterator()方法
3,查看返回值类型是new Itr(),说明Itr这个类实现Iterator接口
4,查找Itr这个内部类,发现重写了Iterator中的所有抽象方法
练习:(使用数组和迭代器两种方式实现)
1:首先定义一个标准学生类(name,age属性)
2:用集合存储3个学生,然后遍历集合。打印出每个学生的name和age。
List集合的特有功能概述
void add(int index,E element)
E remove(int index)
E get(int index)
E set(int index,E element)
练习:
注意:用迭代器来做。
我有一个集合,然后往里边添加hello,world,java三个元素,
我想判断里面有没有“world”这个元素。
如果有,我就添加一个“javaee”元素,没有什么都不添加。
并发修改异常 : java.util.ConcurrentModificationException
解决: 使用 ListIterator
ListIterator:
boolean hasNext()是否有下一个
boolean hasPrevious()是否有前一个
Object next()返回下一个元素
Object previous();返回上一个元素
Vector 类特有功能
public void addElement(E obj)
public E elementAt(int index)
public Enumeration elements()
List
ArrayList
底层数组实现,查询快,增删慢。
线程不安全,效率高。
LinkedList
底层链表结构,查询慢,增删块。
线程不安全,效率高。
Vector
底层数组实现,
线程安全的,效率低。
ArrayList 和 LinkedList
都是线程不安全
ArrayList 底层数组实现,查询快,增删慢。
LinkedList 底层链表结构,查询慢,增删块。
ArrayList 和 Vector
都是数组结构
ArrayList 是线程不安全的
Vector 是线程安全的
List的使用:
查询多用 ArrayList
增删多用 LinkedList
不确定用 ArrayList |
|