区分集合和数组:
- 数组:数组是可以存储不同类型的多个数据,数据类型可以使简单数据类型也可以是引用数据类型。
- 缺点:创建的是一个定值,只能存储固定长度的数据,一旦存满了,就不能继续存储下去了。
- 集合:集合也是可以存储不同类型的多个数据,但是只能存储引用数据类型
- 缺点:只能存储引用数据类型。
- 优点:存储空间会随着存储数据的增大而增大,所以可以更加合理的利用内存空间。
数据存储的分类
短期存储:一旦计算机关闭,存储的内容会被立刻释放----例如:变量,对象,数组,集合等
长期存储:直接存储在磁盘上,可以长久的保存,数据不会随着计算机的关闭而消失---- 例如: .mp4,.doc,.jpg等格式的文件
Collection:----(一个接口)
- List---(一个接口):存储的数据时有序的(这里的有序指的是元素的顺序与添加元素的顺序一致),可以重复的。
- ArrayList ---(类):底层的数据结构是数组,线程不安全的。 特点:查找速度快,添加删除速度慢。
- Vector ---(类):同ArrayList一样,只是线程安全的。
- LinkedList(类):底层是链表,线程不安全的。 特点:查找速度慢,添加删除速度快
Collection
public class Demo04 {
public static void main(String[] args) {
Collection collection = new ArrayList<>();
//Collection中定义是整个集合体系最共性的方法:
//1.添加:
//boolean add(Object o)
collection.add("java");
collection.add("php");
collection.add("IOS");
System.out.println(collection);
//boolean addAll(Collection<? extends E> c)
Collection collection1 = new ArrayList<>();
collection1.add("python");
collection1.add("html");
collection.addAll(collection1);
System.out.println(collection);
//2.删除:
//boolean remove(Object o)
//collection.remove("html");
//System.out.println(collection);
//boolean removeAll(Collection<?> c)----删除定义的一批元素,但是collection里面不一定包含collection1 的所有内容
//collection.removeAll(collection1);
//System.out.println(collection);
//void clear()---清空collection里面的元素,但是变成了空集合,空集合不等于null
//collection.clear();
//System.out.println(collection);
//3.判断:
//boolean contains(Object o) ---是否包含一个元素
System.out.println(collection.contains("java"));
//boolean containsAll(Collection<?> c)---是否包含多个元素
//boolean isEmpty() //判断集合是否为空
System.out.println(collection.isEmpty());//false
//boolean equals(Object o) ---比较的是集合的内容
Collection collection2 = new ArrayList<>();
collection2.addAll(collection);
System.out.println(collection.equals(collection2));//true
//int size() //获取集合中对象的个数
System.out.println(collection.size());
//5.集合变数组:
//Object[] toArray()----当我们希望集合的长度固定下来的时候就转成数组
Object[] objects = collection.toArray();
for(Object object :objects) {
System.out.println(object);
}
test(collection);
}
//4.获取:(重点!!!)
//Iterator<E> iterator() //获取集合中的对象,对集合实现遍历(迭代器)
/*
* boolean hasnext():判断当前的位置是否存在元素,存在返回true,不存在返回false
* Object next():将当前位置的元素返回,并且指向当前位置的指针指向下一个位置
*/
public static void test(Collection collection) {
//1.获取迭代器对象
Iterator iterator = collection.iterator();
//2.通过方法实现遍历
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println("元素: "+object);
}
//注意点:
//1.直接再次使用第一次的iterator进行遍历,遍历失败,因为当前的指针已经指向了结婚的最后,再次使用hasnext会直接返回false,所以如果想再次遍历,要重新获取迭代器对象
while (iterator.hasNext()) {
Object object = (Object) iterator.next();
System.out.println("元素1 "+object);
}
//2.集合可以同时存储不同类型的数据
collection.add(4);//存储的是:new Integer(4)---自动装箱
//3.再次遍历 --- 当集合中同时存在不同类型的数据时(注意点2,加入了integer类型的数据),需要进行容错处理和向下转型。
Iterator iterator1 = collection.iterator();
while (iterator1.hasNext()) {
Object object = (Object) iterator1.next();
if (!(object instanceof String)) {
throw new ClassCastException();//类型转化异常
}
//向下转型
String string = (String)object;
System.out.println(string.length());
}
}
}
List
public class Demo05 {
public static void main(String[] args) {
List list = new ArrayList();
// * List:特有方法,可以操作下标
// 1.增:
// void add(int index, E element)
list.add("java");
list.add(0, "php");
list.add("html");
list.add("html2");
list.add("html3");
System.out.println(list);
// boolean addAll(int index, Collection<? extends E> c)
// 2.删
// E remove(int index)
System.out.println(list.remove(0));
// 3.改
// E set(int index, E element)
list.set(0, "c");
System.out.println("list");
// 4.查
// ListIterator<E> listIterator()\
test(list);
// 返回此列表元素的列表迭代器(按适当顺序)。
// ListIterator<E> listIterator(int index)
// List<E> subList(int fromIndex, int toIndex)
List sub = list.subList(1, 3);// 包含开头不包含结尾
System.out.println(sub);
// E get(int index)
System.out.println(list.get(0));
// 5.删除全部对象
// list.clear();
}
// 4.查
// ListIterator<E> listIterator()
public static void test(List list) {
ListIterator iterator = list.listIterator();
//从左到右遍历
while(iterator.hasNext()) {
Object object = iterator.next();
System.out.println("从左到右:"+object);
}
System.out.println();
while(iterator.hasPrevious()) {
Object object = iterator.previous();
System.out.println("从右到左:"+object);
}
//注意事项:
while(iterator.hasNext()) {
Object object = iterator.next();
System.out.println("从左到右:"+object);
//需求:将html删除
if (object.equals("html2")) {
//在使用迭代器期间,使用list的删除方法直接删除元素,有可能发生错,所以不要这么做
//list.remove("html2");
//使用迭代器自带的remove方法进行删除,注意:他的remove,add,set方法尽量不要同时使用
iterator.remove();
}
}
System.out.println(list);
}
}