Collection概念:
Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
注释:JDK 不提供此接口的任何直接 实现:它提供更具体的子接口,更具体的实现类
Collection基本功能:
添加功能:
boolean add(Object e)
删除功能:
void clear() :删除集合中所有元素(暴力删除)
boolean remove(Object o):删除集合中的指定元素
判断功能:
boolean contains(Object o):集合中是否包含指定的元素
获取功能:
int size() :获取集合中的元素数
举例:
boolean addAll(Collection c) :添加一个集合中的所有元素
boolean removeAll(Collection c):删除的高级功能(思考:删除一个算是删除还是删除所有算是删除?)
boolean containsAll(Collection c):包含所有元素算是包含,还是包含一个算是包含
交集功能:
boolean retainAll(Collection c):A集合对B集合取交集,交集的元素到底是去A集合还是去B集合中,返回值boolean
举例:
需求:要给集合中存储字符串类型的数据,并遍历
举例:
有5个学生,学生有姓名,年龄,遍历5个学生,输出5个学生对应的信息(集合改进)
1)创建一个学生类
2)在测试类中,创建集合对象
3)创建5个具体学生对象,并且添加集合中
4)将集合转换数组
Iterator :接口中有以下的方法:
boolean hasNext() :如果有元素可以迭代,那么返回true,否则返回false
Object next()返回迭代的下一个元素。
存储 String类型的元素
2)遍历的时候使用的while循环,可不可以使用for循环呢?
举例:
Collection 层次结构中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。
注释:JDK 不提供此接口的任何直接 实现:它提供更具体的子接口,更具体的实现类
Collection基本功能:
添加功能:
boolean add(Object e)
删除功能:
void clear() :删除集合中所有元素(暴力删除)
boolean remove(Object o):删除集合中的指定元素
判断功能:
boolean contains(Object o):集合中是否包含指定的元素
获取功能:
int size() :获取集合中的元素数
举例:
* @author 田伟
*
*/
public class CollectDome {
public static void main(String[] args) {
Collection c=new ArrayList();//接口不能实例化
//System.out.println(c);空的数组
//添加功能
c.add("hello");
c.add("world");
c.add("java");
System.out.println(c);
//删除功能
//c.clear();
//System.out.println(c);
System.out.println(c.remove("java"));
System.out.println(c);
//集合中是否包含对应元素
System.out.println(c.contains("hello"));
System.out.println(c.contains("java"));
//获取集合长度
System.out.println(c.size());
//判断集合是否为空
System.out.println(c.isEmpty());
}
}
Colleciton的集合的高级功能:
boolean addAll(Collection c) :添加一个集合中的所有元素
boolean removeAll(Collection c):删除的高级功能(思考:删除一个算是删除还是删除所有算是删除?)
boolean containsAll(Collection c):包含所有元素算是包含,还是包含一个算是包含
交集功能:
boolean retainAll(Collection c):A集合对B集合取交集,交集的元素到底是去A集合还是去B集合中,返回值boolean
举例:
* @author 田伟
*
*/
public class CollectionDemo2 {
public static void main(String[] args) {
//创建集合
Collection c=new ArrayList();
c.add("asd1");
c.add("asd2");
c.add("asd3");
c.add("asd4");
// c.add("asd8");
//创建集合2
Collection c2=new ArrayList();
c2.add("asd1");
c2.add("asd2");
c2.add("asd3");
c2.add("asd4");
c2.add("asd5");
c2.add("asd6");
c2.add("asd7");
System.out.println(c);
System.out.println(c2);
System.out.println("-------------");
//将c2中的元素,添加到c中
/*System.out.println(c.addAll(c2));
System.out.println(c);
System.out.println(c2);*/
//删除一个算删除
/*System.out.println(c.removeAll(c2));
System.out.println(c);
System.out.println(c2);*/
//包含所有元素算包含
/*System.out.println(c.containsAll(c2));
System.out.println(c);
System.out.println(c2);*/
System.out.println(c.retainAll(c2));
System.out.println(c);
System.out.println(c2);
//交集的部分会显示出来,在c1中,没有的就不会显示,看a是否发生变化,若有则true,否则则flase.
}
}
转换功能:Object[] toArray()
:将集合转换成数组
需求:要给集合中存储字符串类型的数据,并遍历
举例:
* @author 田伟
*
*/
public class CollectionDemo3 {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add("retain");
c.add("hello");
c.add("world");
System.out.println(c);
//需要去转换;
Object[] arr=c.toArray();
for(int i=0;i<arr.length;i++) {
System.out.println(arr[i]);
String s=(String)arr[i];
System.out.println(s+"----"+s.length());
}
}
需求:存储自定义对象并遍历
有5个学生,学生有姓名,年龄,遍历5个学生,输出5个学生对应的信息(集合改进)
1)创建一个学生类
2)在测试类中,创建集合对象
3)创建5个具体学生对象,并且添加集合中
4)将集合转换数组
5)遍历
6)输出
举例:
* @author 田伟
*
*/
public class CollectionDemo4 {
public static void main(String[] args) {
Collection c=new ArrayList();
Student s1=new Student("胡歌",27);
Student s2=new Student("靳东",18);
Student s3=new Student("黄晓明",28);
Student s4=new Student("科比",33);
Student s5=new Student("詹姆斯",30);
c.add(s1);
c.add(s2);
c.add(s3);
c.add(s4);
c.add(s5);
Object[] arr=c.toArray();
for(int i=0;i<arr.length;i++) {
// System.out.println(arr[i]);
Student s=(Student)arr[i];
System.out.println(s.getName()+"----"+s.getAge());
}
}
}
Iterator
iterator() :集合的迭代器方法(获取集合的迭代器)
集合的专有遍历方式:迭代器遍历Iterator :接口中有以下的方法:
boolean hasNext() :如果有元素可以迭代,那么返回true,否则返回false
Object next()返回迭代的下一个元素。
存储 String类型的元素
* @author 田伟
*
*/
public class IteratorDemo1 {
public static void main(String[] args) {
Collection c=new ArrayList();
c.add("hello");
c.add("retain");
c.add("iterator");
Iterator it=c.iterator();
/*System.out.println(it.hasNext());
System.err.println(it.next());
System.out.println(it.hasNext());
System.out.println(it.next());*/
while(it.hasNext()) {
String s=(String)it.next();
System.out.println(s+"----"+s.length());
}
}
}
存储自定义对象并遍历(使用专有遍历方式)
举例:
* @author 田伟
*
*/
public class IteratorDemo2 {
public static void main(String[] args) {
Collection c=new ArrayList();
Student s1=new Student ("靳东",28);
Student s2=new Student ("胡歌",18);
Student s3=new Student ("黄晓明",30);
c.add(s1);
c.add(s2);
c.add(s3);
Iterator it =c.iterator();
while(it.hasNext()) {
Student s=(Student)it.next();
System.out.println(s.getName()+"---------"+s.getAge());
}
}
}
注释:1)it.next(),只使用一次即可,使用多次,会出现问题(it.next(),每次使用的时候都是返回一个对象)2)遍历的时候使用的while循环,可不可以使用for循环呢?
举例:
/**
* @author 田伟
*
*/
public class IteratorDemo3 {
public static void main(String[] args) {
Collection c=new ArrayList();
Student s1=new Student ("靳东",28);
Student s2=new Student ("胡歌",18);
Student s3=new Student ("黄晓明",30);
c.add(s1);
c.add(s2);
c.add(s3);
for(Iterator it=c.iterator();it.hasNext();) {
Student s=(Student)it.next();
System.out.println(s);
}
}
}