集合:也是一种存储数据的手段,一次可以存储多个值
短期存储:一旦计算机关闭了,存储的东西就会消失---对象、变量、数组、集合
长期存储:直接存储到硬盘上,可以长久保存,数据不会随着计算机的关闭而消失---各种文件,.tet,.doc,.png,.mp4,.mp3,.jpg
学习集合:
数组:可以存储不同类型的数据,可以存储简单数据类型,也可以存储引用数据类型
缺点:创建的是一个定值,只能存储固定长度的数据,一旦存满了,就不能再存了
集合:可以存储不同类型的数据,他的存储的空间会随着存储数据的增大而增大(可变的)
优点:可以更加合理的利用内存空间,方法很多,可以更加方便的实现功能
缺点:只能存储引用数据类型
集合分类:
Collection 接口
List 接口
ArrayList 类
Vetor 类
LinkedList 类
Set 接口
HashSet 类
TreeSet 类
Map 接口
HashMap 类
TreeMap 类
Collection中定义是整个集合体系最共性的方法:
因为Collection是接口,所以它自己不能new对象,只能通过多态来用
Collection collection1 =new ArrayList();
1.添加方法:
boolean add(Object 0)//添加某一个Object类型的数据
boolean addAll(Collection c)//将一个集合c添加到另一个集合
调用:
collection1.add("java");
collection1.add("php");
collection1.add("ios");
System.out.println(collcetion);//这里自动重写toString方法,可以直接打印出集合里面的内容
collection.addAll(collection2);//将collection2全部加到collection1中
2.删除
boolean remove(Object o)//删除某一个Object类型的数据
boolean removeAll(Collection c)//删除集合c包括的全部数据,如果没有,则跳过,删掉有的
调用:
collection1.remove("html");
collection1.removeAll(collection2);//删除指定的一批元素,但是在collection1中不一定包含collection2的所有元素
3.判断
boolean contain(Object o)//是否包含某个元素
boolean containAll(collection c)//是否包含另外一个集合
boolean isEmpty()//判断集合是否为空,这里的空!= null,说的是空集合
boolean equals(Object o)//判断是否两个元素或者集合相等,这里重写了equals方法,自动比较内容
4.集合变数组
Object[] toArray()
调用:
Object [] arr = collection.toAraay();
5.获取(重点)
Iterator iterator() //获取集合中的对象---叫迭代器
(可以把Iterator看做是一个类继承了collection,只要是集合要遍历,就必须用到Iterator中的方法iterator,用父类引用collection来调用子类的方法,说明接口Collection有iterator方法,Iterator类中重写了该方法)
int size() //获取集合中对象的个数
迭代器里面有两个方法
boolean hasnext():判断当前位置是否存在元素,存在返回true,不存在返回false
Object next():将当前位置的返回,并且将指向当前的指针指向下一个元素的位置
步骤:
1.获取当前对应的迭代器对象---通过调用集合对象的方法获取
Iterator iterator = collection.iterator();//前面是一个Iterator类型的变量iterator来接收集合collection调用方法iterator之后的结果
2.通过while循环实现遍历
while(iterator.hasnext()){
Object object = (Object) iterator.next();//这里需要向上转型,因为调用.next()的返回值默认是父类Object,这里默认是Object类的是因为你要打印集合所有类型的元素,需要用基类的变量来接受,才可以遍历,道理和数组遍历一样,判断一下,将元素返回,就可以打印了,就是循环一次打印一次,知道循环结束
System.out.println(object);
}
注意点:
1.集合中可以存储不同类型的数据
collection1.add(4);//这里是自动进行了装箱(将基本数据类型通过包装类转换并封装)
System.out.println(collection);
2.如果集合中存储了不同类型的数据,在使用的时候需要进行容错处理
Iterator iterator = collection2.iterator();
while(iterator.hasnext()){
Object object = (Object)iterator.next();
System.out.println(object)//这里可以打印出集合里面所有的元素,但如果要对集合里面的字符串进行其他操作就需要转成字符串类型的,然后对字符串类型的进行操作
if(object instanceof String){
//向下转型,目的是为了筛选出集合中字符串类型的元素,之前是Object类型的java,php,ios,4,容错处理会自动把4这个整型类型给过滤掉,只剩下字符串
String string = (String) object;
//调用字符串的特有方法
}
}
List:存储的对象时有序的(元素的位置和添加的顺序保持一致),可以重复的
ArrayList:底层的数据结构是数组,线程不安全的,查找速度快,添加删除速度慢
Vector:底层的数据结构是数组,线程安全的,查找速度快,添加删除速度慢
LinkedList:底层的数据结构是链表,线程不安全的,查找速度慢,添加删除速度快
Set:存储的对象时无序的