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); } } }