当前位置 博文首页 > 立志欲坚不欲锐,成功在久不在速度:Java 集合 Collection的使用
在上一篇博客中介绍了关于集合框架的一个简单的组成,和分布,可以从中发现 Collection接口是Java集合类的顶级接口之一,
Collection 接口分为List 和 Set, 常用的是ArrayList、LinkedList、HashSet、TreeSet
boolean add(object element) | 向集合中添加元素 element |
void clear() | 清空集合 |
boolean contains(Object o) | 判断指定集合是否包含对象 o |
boolean remove(Object o) | 删除集合中的对象o |
int size() | 获取集合中元素的个数 |
Object[] toArray() | 将集合转换成数组 |
Iterator iterator() | 获取集合所依赖的迭代器对象 |
?一、方法: add()? ? clear()? ? size()的例子(知识点都在代码注释中,一定得仔细看啊!):
public class CollectionTest{
public static void main(String[] args){
//1.创建一个集合
Collection c=new ArrayList();//这里用到了多态,但是c在不强制类型转换的前提下只
能调用父类的对象,不能使用子类特有的对象
//2.添加元素
c.add(1);//在JDK5.0之前集合是不能存放基本数据类型的,但是之后基本类型有了自动拆装箱
的功能就可以直接使用了
c.add(new Integer(100));//开辟一个int类型的空间并且给该空间赋值100;
Object o=new Object();
c.add(o);
//3.获取元素的个数
System.out.println(c.size()); // 结果为3
System.out.println(c.isEmpty()); //false
//4.clear集合
c.clear();
System.out.println(c.clear());
System.out.println(c.isEmpty());//true
}
}
二、方法: boolean contains() 判断集合中是否包含某个元素? ? ?? ? ? ?
import java.util.*
public class CollectionTest{
public static void main(String[] args)
//创建集合
Collection c=new ArrayList();
Integer i1=new Integer(10);
c.add(i1);
//判断集合中是否包含i1;
System.out.println(c.contains(i1)); //true;
//创建 integer类型对象
Integer i2=new Integer(10);
System.out.println(c.contains(i2));//true
}
上面的代码解释了 contains方法的使用,但是大家注意里面的代码,我们先创建了i1对象,然后把i1添加到了集合中,但是随后又创建了值相同的i2对象,但是没有把i2通过add()方法加入到集合 中,但是通过contains方法,发现结果返回的是true,也就是说集合中有i2,这是为什么?
? ? ? 按理说i1和i2的内存地址不同,他们并不是同一个对象啊
? ? ? 原因:? ?integer在java源代码底层中重写了equals()方法,比较的不是内存地址,而是值是否相同,因为这里i1,i2的值都是10所以他们的结果是相同的
?既然这样,我们使用一个自定义的类,来验证:
import java.util.*
public class CollectionTest{
public static void main(String[] args)
//创建集合
Collection c=new ArrayList();
Integer i1=new Integer(10);
c.add(i1);
//判断集合中是否包含i1;
System.out.println(c.contains(i1)); //true;
//创建 integer类型对象
Integer i2=new Integer(10);
System.out.println(c.contains(i2));//true
Manager m1=new Manager(100,"java");
c.add(m1);
System.out.println(c.contains(m1));true;
Manager m2=new Manager(100,"java");
System.out.println(c.contains(m2));//在manager方法中若重写了equals方法,那么返回true
若没有重写equals方法,则返回false
}
//未重写equals方法的manager类
class Manager{
int no;
string name;
Manager(int no;String name){
this.no=no;
this.name=name;
}
}
重写了equals方法的manager类
class Manager{
int no;
string name;
Manager(int no;String name){
this.no=no;
this.name=name;
}
public boolean equals(Object o){
if(this==o) return true; //等号两边比的是内容
if(o instanceof Manager){
Manager m=(Manager) o;//强制类型转换
if(m.no==this.no && m.name.equals(this.name)){
return true;
}
}
return false;
}
}
三、boolean remove()删除集合中某个元素
*/
import java.util.*;
public class CollectionTest{
public static void main(String[] args){
//创建集合对象
Collection c=new ArrayList();
//创建一个对象
Integer c1=new Integer(10);
//添加元素
c.add(i1);
//删除
Integer c2=new Integer(10);
c.remove(i1);
System.out.println(c.size());//0
Manager m1=new Manager(100,"smith");
c.add(m1);
Manager m2=new Manager(100,"smith");
c.remove(m2);
System.out.println(c.size())//0
}
}
重写了equals方法的manager类
class Manager{
int no;
string name;
Manager(int no;String name){
this.no=no;
this.name=name;
}
public boolean equals(Object o){
if(this==o) return true; //等号两边比的是内容
if(o instanceof Manager){
Manager m=(Manager) o;//强制类型转换
if(m.no==this.no && m.name.equals(this.name)){
return true;
}
}
return false;
}
}
?
四、迭代方法:Iterator iterator()的使用
public class CollectionTest{
public static void main(String[] args){
//创建集合对象
Collection c=new ArrayList();
//添加元素
c.add(100);//自动装箱
c.add(3.14);//自动装箱
c.add(false);//自动装箱
//迭代,遍历
//获取迭代器对象
Iterator it=c.iterator();//迭代器是面向接口变成 it 是引用,保存了内存地址
指向堆中的“迭代器对象”
//注意:不需要关心底层集合的具体类型,所有集合依赖的迭代器都实现了java.util.Iterator;接口
//2.开始调用方法,完成遍历迭代 用while循环
while(it.hasNext()){
Object element=it.next();
System.out.println(element);//100 3.14. false
//调用的原则: 在调用it.next()之前必须调用it.hasNext()
}
//除了使用while循环,还可以利用for循环
for(Iterator it=c.iterator();it.hasNext();){
Object element=it.next();
System.out.println(element);//100 3.14,false 结果是一样的
}
}
}
上面这些都是介绍的关于Collection的使用方法,欢迎大家共同学习!
?
cs