集合类概述
为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,Java就提供了集合类。
数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
Collection接口概述
Collection层次结构中的根接口。Collection表示一组对象,这些对象也称为collection的元素。一些collection允许有重复的元素,而另一些则不允许。一些collection是有序的,而另一些则是无序的。
Collection接口成员方法
添加功能
booleanadd(E确保此集合包含指定的元素
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest1 {
public static void main(String[] args) {
Collection c = new ArrayList();
//boolean add(E e)确保此集合包含指定的元素(可选操作)
System.out.println(c.add(12)); //输出true,表示该元素成功插入到对象c里
System.out.println(c.add('help'));
c.add(2.33);
c.add(12);
System.out.println(c); //调用AbstractCollection类中的toString()方法,所以不会输出地址值
}
}
booleanaddAll(Collection将指定集合中的所有元素添加到此集合
//创建集合对象
Collection c1 = new ArrayList();
//向集合中添加元素
c1.add('java');
c1.add('hadoop');
c1.add('hive');
c1.add('spark');
//创建另一个集合对象
Collection c2 =new ArrayList ();
c2.add('hello');
c2.add('java');
//boolean addAll(Collection c) 将指定集合中的所有元素添加到此集合(可选操作)
c1.addAll(c2); //将c2集合中的元素添加到c1里
System.out.println(c1);
System.out.println(c2);
删除功能
booleanremove(Objecto)从该集合中删除指定元素的单个实例
//boolean remove(Object o) 从该集合中删除指定元素的单个实例(如果存在)(可选操作)
c.add(121);
c.add('eee');
c.add('hello');
c.add('bigdata');
System.out.println(c);
c.remove('hello');//删除指定元素(如果有重复只移除一个符合条件的元素)
System.out.println(c);
booleanremoveAll(Collection删除指定集合中所包含的所有此集合的元素
//创建集合对象
Collection c1 = new ArrayList();
//向集合中添加元素
c1.add('java');
c1.add('hadoop');
c1.add('hive');
c1.add('spark');
//创建另一个集合对象
Collection c2 =new ArrayList ();
c2.add('hello');
c2.add('java');
//boolean removeAll(Collection c) 删除指定集合中所包含的所有此集合的元素(可选操作)
c1.removeAll(c2); //将c1集合里包含c2集合的元素删除
System.out.println(c1);
System.out.println(c2);
voidclear()从此集合中删除所有元素
//void clear() 从此集合中删除所有元素(可选操作)
c.add(121);
c.add('eee');
System.out.println(c);
c.clear(); //删除
System.out.println(c);
判断功能
booleancontains(Objecto)如果此集合包含指定的元素,则返回true
c.add(121);
c.add('eee');
c.add('hello');
c.add('bigdata');
System.out.println(c.contains('hello')); //包含就输出true,否则false
booleancontainsAll(Collection如果此集合中包含指定集合中的所有元素,则返回true
//创建集合对象
Collection c1 = new ArrayList();
//向集合中添加元素
c1.add('java');
c1.add('hadoop');
c1.add('hello');
//创建另一个集合对象
Collection c2 =new ArrayList ();
c2.add('hello');
c2.add('java');
System.out.println(c1.containsAll(c2)); //包含返回true,否则false
booleanisEmpty()如果此集合不包含元素,则返回true
//boolean isEmpty() 如果此集合不包含元素,则返回true
c.add(121);
c.add('eee');
c.add('hello');
c.add('bigdata');
System.out.println(c.isEmpty()); //空输出true,非空false
获取长度
intsize()返回此集合中的元素数
//int size() 返回此集合中的元素数
c.add(121);
c.add('eee');
c.add('hello');
c.add('bigdata');
System.out.println(c.size()); //这里有四个元素,输出为4
求交集功能
booleanretainAll(Collection仅保留此集合中包含在指定集合中的元素
//创建集合对象
Collection c1 = new ArrayList();
//向集合中添加元素
c1.add('java');
c1.add('hadoop');
c1.add('hello');
//创建另一个集合对象
Collection c2 =new ArrayList ();
c2.add('hello');
c2.add('java');
//boolean retainAll(Collection c) 仅保留此集合中包含在指定集合中的元素(可选操作)
c1.retainAll(c2); //c1保留与c2集合相交部分元素
System.out.println(c1);
System.out.println(c2);
集合的遍历
Object[]toArray()返回一个包含此集合中所有元素的的数组
把集合转成数组,可以实现集合的遍历
//创建集合对象
Collection c = new ArrayList();
//添加元素
c.add('ee');
c.add('sds');
c.add('rrr');
c.add('tet');
//集合转换为数组
Object[] objects = c.toArray();
//遍历数组
for(int i=0;i例:用集合遍历学生信息
首先创建学生的标准类(不会的可以去看看前面面向对象——封装)
class Student{
private String name;
private int age;
public Student() {}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return 'Student{' +
'name='' + name + ''' +
', age=' + age +
'}';
}
}
然后创建集合遍历
public class CollectionTest3 {
public static void main(String[] args) {
//创建集合对象
Collection c =new ArrayList();
//创建学生对象
Student s1 =new Student('qwee',20);
Student s2 =new Student('sdfs',30);
Student s3 =new Student('adasfa',40);
//将对象添加进入集合
c.add(s1);
c.add(s2);
c.add(s3);
//转换为数组
Object[] objects = c.toArray();
//遍历数组
for(int i=0;i< objects.length;i++){
// System.out.println(objects[i]); 普通输出
Student student = (Student) objects[i]; //向下转型
System.out.println(student.getName()+'————'+student.getAge());
}
}
}
结果
Iterator接口
Iterator接口概述
对collection进行迭代的迭代器
依赖于集合而存在
Iterator接口成员方法
Iteratoriterator返回此集合中的迭代器
Enext()返回迭代中的下一个元素
例:迭代器遍历字符串
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest4 {
public static void main(String[] args) {
//创建集合对象
Collection c =new ArrayList();
//添加元素
c.add('hadoop');
c.add('hive');
c.add('java');
c.add('bigdata');
//获取集合c的迭代器对象
//Iterator iterator() 返回此集合中的元素的迭代器
Iterator iterator = c.iterator();
//System.out.println(iterator);//不能直接输出,iterator的实现类中没有toString方法,输出是地址值
//E next() 返回迭代中的下一个元素
Object next = iterator.next();
System.out.println(next); //输出 hadoop
System.out.println(iterator.next()); //输出hadoop下一个元素hive,以此类推,超出集合元素数量会报错
System.out.println(iterator.next());
System.out.println(iterator.next());
}
}
booleanhasNext()如果迭代中还有元素,返回true
用上面的Enext()方法多调用一次超过集合拥有元素数量就会报错,所以可以用hasnext改进。
//boolean hasNext() 判断迭代中还有没有元素
if (iterator.hasNext()){
System.out.println(next);
//如果这样输出,每验证一次需重新输出,如果元素过多太繁琐,需改进
}
//由于不知道需要循环输出多少次,用while循环改进
while(iterator.hasNext()){
System.out.println(iterator.next());
}
遍历结果
若想继续使用元素的方法需向下转型
while(iterator.hasNext()){
Object next = iterator.next();
//向下转型,添加的数据都是String类型的,所以转String类
String s =(String) next;
System.out.println(s+' 长度:'+s.length());
}
同样,我们继续利用迭代器来遍历自定义的对象
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest5 {
public static void main(String[] args) {
//创建集合对象
Collection c= new ArrayList();
//创建学生对象
Student s1 =new Student('w3da3',24);
Student s2 =new Student('q32423',23);
Student s3 =new Student('sdf313',34);
//添加到集合
c.add(s1);
c.add(s2);
c.add(s3);
//获取迭代器对象
Iterator iterator = c.iterator();
//遍历迭代器对象,获取每一个元素
while(iterator.hasNext()){
Object next = iterator.next();
//向下转型,这里是Student类,所以转Student类
Student s =(Student) next;
//转型后就能调用元素的方法了
System.out.println(s.getName()+'_____'+s.getAge());
}
}
}
注意,同一个迭代器只能遍历一次,多次遍历没有效果。应为遍历一次指针指向末尾
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点