集合的由来
- 数组长度固定的特性使得如果要改变数组的长度需要创建新的数组将旧数组里面的元素拷贝过去,使用起来不方便。
- Java给开发者提供了一些集合类,能够存储任意长度的对象,长度可以随着元素的增加而增加,随着元素的减少而减少,它就是Collection方法。
- 可以理解为可以扩容的数组。
Collection体系图

数组和集合的区别
- 区别1:
数组既可以存储基本数据类型,又可以存储引用数据类型,基本数据类型存储的是值,引用数据类型存储的是地址值
集合只能存储引用数据类型(对象),如果存储基本数据类型时,会自动装箱变成相应的包装类。 - 区别2:
数组长度是固定的,不能自动增长。
集合的长度的是可变的,可以根据元素的增加而自动增长。
Collection常用方法(持续更新中...)
boolean add(E e) //把元素e加入到集合中,并返回是否加入成功的结果。
boolean remove(Object o) //把对象o从集合中移除,并返回是否移除成功的结果。
void clear() //清空集合中的元素。
boolean contains(Object o) //调用此方法的集合中是否包含o。
boolean isEmpty() //查看集合中是否有元素。
int size() //返回集合中元素的个数。
Collection常用方法实际操作。
package Beacon001;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class CollectionTest01 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("你");
c.add("好");
//打印集合c
System.out.println(c);
//.size(), 数组中元素的个数。
System.out.println("数组c的长度是:"+c.size());
//遍历数组的方式分以下三种。详情见以下内容
//集合框架中的三种迭代方式删除数据有以下三种方式。
//1.普通for循环,可以删除,注意让索引做自减运算。
//2.迭代器,可以删除,但是必须使用迭代器自身的remove方法,否则会出现并发修改异常。
//3.增强for循环不能删除。
//1-增强for循环可以快捷地遍历数组和集合。(方便好用,推荐!)
for(String s :c) {
System.out.println("此元素由增强for循环打印而来 "+s);
}
//2-使用最垃圾的方式,即先转换再成数组再用for循环遍历。
System.out.println("以下元素由先转换成数组再遍历的方式得到");
Object[] o = c.toArray();
for(int i=0;i<o.length;i++) {
System.out.println(o[i]);
}
//3.1-利用迭代器来遍历数组。while、for(用于对集合元素修改时的遍历)
//Iterator iter = c.interator();
System.out.println("以下元素由while循环迭代器来实现。 ");
Iterator<String> iter =c.iterator();
while(iter.hasNext()) {
System.out.println(iter.next());
}
System.out.println("以下元素由for循环迭代器来实现。");
for(Iterator iter1 =c.iterator();iter1.hasNext();) {
System.out.println(iter1.next());
}
//3.2-利用迭代器来遍历数组。while、for(用于对List集合元素修改时的遍历)
ListIterator listInter =c.listIterator();
while(listIter.hasNext()){
String str =listIter.next();
if(str.qeuals("beacon")){
c.add(1024);
}
}
Collection<Person> c1 = new ArrayList<>();
c1.add(new Person("Beacon",23));
System.out.println(c1);
//在集合中remove指定元素
c.remove("好");
System.out.println(c);
c.clear();
System.out.println(c);
}
}
使用Collection来存储Person自定义类型。
思路:首先要创建一个Person类,其次创建一个类调用Person类。
- 创建一个Person类。
package Beacon001;
public class Person {
private String name;
private int age;
private Object object;
//无参数的构造方法。
public Person() {
}
//有参数的构造方法
public Person(String name,int age ) {
super();//继承父类的无参数构造方法。
this.name = name ;
this.age= age;
}
//下面代码是set get 方法,由系统自动生成。 (方法: 右键-source-Generate setter and getter;)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return " [姓名=" + name + ", 年龄=" + age + "]";
}
public boolean equals(Object obj) {
if(this == obj){
return true;
}
if(obj instanceof Person){
Person p = (Person)obj;
if(this.name.equals(p.getName()) && this.age == p.getAge()){
return true;
}
}
return false;
}
}
- 创建一个类,以分析Collection中的方法中如何调用自定义类Person
package Beacon001;
import java.util.ArrayList;
import java.util.Collection;
public class CollectionTest02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Collection<Person> c = new ArrayList<>();//创建一个集合c
c.add(new Person("Beacon",23));//添加元素,以下同理。
c.add(new Person("Jack",51));
c.add(new Person("Pony",45));
System.out.println(c);//将集合中的元素表示出来。
//将集合转换成Object数组,以进行遍历。
//这里说一下为什么要用Object[],因为Object是所有类的父类。例子:你只要是人,那你一定出生在地球。
Object[] o = c.toArray();
for(int i=0; i<o.length;i++) {
System.out.println(o[i]);
}
//contains方法,
Person p = new Person("Jack",51);//创建一个对象,马云。
System.out.println(c.contains(p));//调用contains方法传入马云这个参数,获取是否包含马云的结果。
System.out.println(c.contains(new Person("Beacon",23)));//new一个(Beacon,23)
c.remove(p);//在集合中移除新建元素p。
System.out.println(c);//看以下成果。
c.clear();//清空集合
System.out.println(c);//看以下成果。
}
}
Vector简介
- Vector是在jdk1.0版本中就存在的,当时的集合体系还没有现在这么多,在jdk1.2中Vector才实现了Collection接口,不过随着jdk的不断更新,这个类已经逐渐被ArrayList所替代,这里简单介绍下Vector里面特有的方法
网友评论