Java集合(一)

目录

Java集合框架概述

Collection接口

Collection接口方法

Iterator迭代器接口

使用 Iterator 接口遍历集合元素

Iterator接口的方法

Iterator接口remove()方法

使用 foreach 循环遍历集合元素


Java集合框架概述

一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储。另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器,可以动态地把多个对象的引用放入容器中。

集合、数组都是对多个数据进行存储操作的,简称java容器,此时的存储均为内存层面的存储,不涉及持久化存储。

数组在内存存储方面的特点:

1.数组初始化以后,长度就确定了。

2.数组声明的类型,就决定了进行元素初始化时的类型

数组在存储数据上的弊端:

1.数组初始化以后,长度就不可变了,不便于扩展

2.数组中提供的属性和方法少,不便于进行添加、删除、插入等操作,且效率不高。 同时无法直接获取存储元素的个数

3.数组存储的数据是有序的、可以重复的。---->存储数据的特点单一

java集合类可以用于存储数量不等的多个对象,还可用于存储具有影射关系的关联数组。

Java集合可以分为两种体系:CollectionMap

Collcetion接口:单列数据,定义了存取一组对象的方法的集合

        List:元素有序,可重复的集合

        Set:元素无序、不可重复的集合

Map接口:双列数据,保存具有映射关系“Key-value对”的集合

Collection接口

Collection 接口是 List、Set 和 Queue 接口的父接口,该接口里定义的方法既可用于操作 Set 集合,也可用于操作 List 和 Queue 集合。

JDK不提供此接口的任何直接实现,而是提供更具体的子接口(如:Set和List) 实现。

在 Java5 之前,Java 集合会丢失容器中所有对象的数据类型,把所有对象都当成 Object 类型处理;从 JDK 5.0 增加了泛型以后,Java 集合可以记住容器中对象的数据类型。

Collection接口方法

1、添加

 add(Object obj)

 addAll(Collection coll)

2、获取有效元素的个数

 int size()

3、清空集合(只清空内容)

 void clear()

4、是否是空集合

 boolean isEmpty()

5、是否包含某个元素

 boolean contains(Object obj):是通过元素的equals方法来判断是否是同一个对象(要求所在obj类重写equals()方法

 boolean containsAll(Collection c):也是调用元素的equals方法来比较的。拿两个集合的元素挨个比较。

 

6、删除

 boolean remove(Object obj) :通过元素的equals方法判断是否是要删除的那个元素。只会删除找到的第一个元素

 boolean removeAll(Collection coll):取当前集合的差集

均需要重写equals()方法

7、取两个集合的交集(会修改当前集合)

 boolean retainAll(Collection c):把交集的结果存在当前集合中,不影响c
 

8、集合是否相等

 boolean equals(Object obj):当前集合元素和形参集合元素都相等(是否有序看具体对象)

9、转成对象数组

 Object[] toArray()

10、转换成集合:调用Arrays类的静态方法asList()

11、获取集合对象的哈希值

 hashCode()

12、遍历

 iterator():返回迭代器对象,用于集合遍历 

import org.junit.Test;
import java.util.Date;
import java.util.ArrayList;
import java.util.Collection;

/**
 * @author  light
 * @Description  集合
 * @create 2022-11-29 15:15
 */
public class CollectionTest {
    /**
     * Collection接口中声明的常用方法
     */
    @Test
    public void test1(){
        Collection coll=new ArrayList();//arrayList是collection子接口List的实现

        //add(Object e):将元素e添加到集合中去
        coll.add("AA");
        coll.add("BB");
        coll.add(123);//自动装箱
        coll.add(new Date());

        //size:获取添加元素的个数
        System.out.println(coll.size());//4

        //addAll(Collection coll1):将coll1中集合的元素添加到当前集合中去
        Collection coll1 = new ArrayList();
        coll1.add(456);
        coll1.add("CC");
        coll.addAll(coll1);
        System.out.println(coll.size());//6

        //clear():清空集合内的元素
        coll.clear();


        //boolean  isEmpty():判断当前集合是否为空
        System.out.println(coll.isEmpty());


        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);

        //boolean  contains(Object obj):判断集合中是否包含Obj在判断是回去调用
        boolean contains = coll.contains(1236);
        System.out.println(contains);


        //boolean  remove(Object obj):从当前集合中删除obj元素
        System.out.println(coll.remove(123));
        System.out.println(coll);

        //removeAll(Collection c):从当前集合中移除c中的所有元素:将当前集合进行修改

        //retainAll:相当于求交集;将当前集合进行修改

        //equals(Object obj):当前集合和形参集合的元素是否相同

        //hashCode():返回当前对象的哈希值

        //集合可以转换为数组:toArray()

        //数组--->集合:调用Arrays类的静态方法asList()

        //iterator():返回Iterator接口的实例,用于遍历集合元素


    }

}

Iterator迭代器接口

使用 Iterator 接口遍历集合元素

Iterator对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素

GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。

Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了 Iterator接口的对象。

Iterator 仅用于遍历集合,Iterator 本身并不提供承装对象的能力。如果需要创建 Iterator 对象,则必须有一个被迭代的集合。

集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合 的第一个元素之前。 

Iterator接口的方法

在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且 下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常。 

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @auther light
 * @Description  集合元素的遍历:使用迭代器iterator()
 * @create 2022-11-30 21:25
 */
public class IteratorTest {

    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();//只是迭代器


//        System.out.println(coll.iterator().next());


        //遍历
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
}

 运行结果:

Iterator接口remove()方法

Iterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。 

如果还未调用next()或在上一次调用 next 方法之后已经调用了 remove 方法, 再调用remove都会报IllegalStateException。 

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/**
 * @auther light
 * @Description  集合元素的遍历:使用迭代器iterator()
 * @create 2022-11-30 21:25
 */
public class IteratorTest {
    /**
     * Iterator中的remove()方法
     *
     */
    @Test
    public void test2(){

        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);

        Iterator iterator = coll.iterator();
//      删除集合中"Tom"数据
        while(iterator.hasNext()){
            Object next = iterator.next();
            if("Tom".equals(next)){
                iterator.remove();//只能调用迭代器的remove()方法
            }
        }

        Iterator iterator1 = coll.iterator();
        while(iterator1.hasNext()){
            System.out.println(iterator1.next());
        }

    }

}

运行结果:

使用 foreach 循环遍历集合元素

Java 5.0 提供了 foreach 循环(增强for循环)迭代访问 Collection和数组。

遍历操作不需获取Collection或数组的长度,无需使用索引访问元素。

遍历集合的底层调用Iterator完成操作。

foreach还可以用来遍历数组。 

import org.junit.Test;

import java.util.ArrayList;
import java.util.Collection;

/**
 * @auther light
 * @Description 增强型for循环
 * @create 2022-11-30 21:56
 */
public class ForTest {

    @Test
    public  void test1(){
        Collection coll = new ArrayList();
        coll.add(123);
        coll.add(345);
        coll.add(new String("Tom"));
        coll.add(false);
        //for(集合中元素的类型 局部变量:集合对象)
        //内部仍然调用迭代器
        for(Object obj:coll){
            System.out.println(obj);

        }
    }
}

 运行结果:

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值