是一个接口不能创建Collection的实例集合,但能创建其子类的集合。
但在等号的左侧是Collection 即在进行创建实例对象的时候是多态形式
拥有工具类Collections
有序性:集合再进行插入元素的时候,按照插入的先后顺序进行排列
无序性:集合再进行插入元素的时候,随机在集合中排列,且当集合运行一次后,即使是退出应用,该集合数据的排序也是确定的。
Set旗下的实现类有的是无序的有的是有序的
对于有序/无序,不同的资料对其理解不同
1.将一个集合的全部数据倒入到另一个集合中去,但需要将两个集合的数据类型是相同的
c1.addAll(c2);将c2集合的全部数据倒入c1集合中去
2. boolean add(E ,e) 向集合添加元素e,若成功返回true
3.boolean addAll(Collection extends E> c) 把集合C中的元素全部添加到集合中,若指定集合元素改变返回true;
4.void clear() 清空所有集合元素
5.boolean contains(Object o) 判断指定集合是否包含对象o
6.boolean containsAll(Collection> c) 判断指定集合是否包含集合c的所有元素
7.boolean isEmpty() 判断指定集合的元素size是否为0
8boolean remove(Object o) 删除集合中的元素对象o,若集合有多个o元素,则只会删除第一个元素
9.boolean removeAll(Collection> c) 删除指定集合包含集合c的元素
10.boolean retainAll(Collection> c) 从指定集合中保留包含集合c的元素,其他元素则删除
11.int size() 集合的元素个数
12.T[] toArray(T[] a ) 将集合转换为T类型的数组
----
(不适用普通的for循环,该循环需要使用有索引的数据才能进行)
需要先从集合对象中进行获取迭代器的对
Iterator<集合对象的数据类型> 迭代器的对象名=集合对象名.iterator();
直接使用迭代器对象的功能即可进行对数组的遍历如 .next();每次一个都是进行获取一个元素,包括直接System
且当进行连续去取时不能够超过元素的个数。
迭代器是一次性的:即每次进行该迭代器的使用时他都会进行一个hastnext()。判断当前元素是否存在,如果存在放在该次的next中,进行下一个判断但不存在在时就会报错。
所以在循环中进行时只用一个next否则会分次取到元素
即一个hasnext一定要只对应一个next
此时这时不方便,下面进行使用循环结合迭代器进行使用,进行避免迭代器元素数超过报错的问题
-----
当集合是储存任意类型的元素的时候,就可以通过使用强转,使呈现出来的数据为指定的类型
Collection coll = new ArrayList();
coll.add("abc");
coll.add("def");
coll.add("opq");
//获取迭代器
Iterator it = coll.iterator();
while (it.hasNext()) {
// it.next()获取出来的对象数据类型为Object
//Object obj = it.next();
//当需要使用子类对象特有方法时,需要向下转型
String str = (String) it.next();
System.out.println(str.length());
}
String str =(String) it.next(); System.out.println(str.length());}
//注意:如果集合中存放的是多种对象,这时进行向下转型会发生类型转换异常。
可以通过数组/集合名.for快速搭建框架
格式:for(元素的数据类型 变量名(是foreach的标识符): 数组名/集合名 ){
Sy.............
也可以进行其他处理
}
以上都等价:实际上print 和pringln都是一个方法
package jihe2;
import java.util.ArrayList;
import java.util.Collection;
//对Collection类型的集合进行元素的遍历
public class test {
public static void main(String[] args) {
Collection movies=new ArrayList<>();
movies.add(new movie("傻逼一号",11,"傻逼1"));
movies.add(new movie("傻逼二号",22,"傻逼2"));
movies.add(new movie("傻逼三号",33,"傻逼3"));
//类型一:进行在类中对toString方法进行重写
System.out.println(movies);
//类型二:使用foreach 迭代器 Lambda表达式进行遍历
for (movie movie : movies) {
System.out.println(movie.getName()+movie.getScore()+movie.getActor());
}
}
}
package jihe2;
public class movie {
@Override
public String toString() {
return "movie{" +
"name='" + name + '\'' +
", score=" + score +
", actor='" + actor + '\'' +
'}';
}
private String name;
private double score;
public movie(String name, double score, String actor){
this.name = name;
this.score = score;
this.actor = actor;
}
public String getName () {
return name;
}
public void setName (String name){
this.name = name;
}
public double getScore () {
return score;
}
public void setScore ( double score){
this.score = score;
}
public String getActor () {
return actor;
}
public void setActor (String actor){
this.actor = actor;
}
private String actor;
public movie() {
}
}
集合在进行储存对象的时候是储存的地址
---------------
Collection系列集合在使用addAll方法后原集合的数据仍存在