Java语言进阶-集合-Collection接口

Collection接口

Collection接口常用方法如下:

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

import org.junit.Test;

public class CollectionTest {
    @Test
    public void test1(){
        Collection coll = new ArrayList();

        // add(object e):将参数e添加到集合coll中
        coll.add("AA");
        coll.add("BB");
        coll.add(123);
        coll.add(new Date());

        // size():获取集合长度
        System.out.println(coll.size()); 

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

        // clear():清空集合
        coll1.clear();
        System.out.println(coll1); 

        // isEmpty():判断size是否为0
        System.out.println(coll1.isEmpty());

        // contains(object obj):当前集合中是否包含obj
        System.out.println(coll.contains(123));

        // containsAll(Collection coll1):当前集合是否包含coll1集合内所有元素
        System.out.println(coll.containsAll(coll1));

        // remove(object obj):
        System.out.println(coll.remove(456));

        // removeAll(Collection coll1):删除当前集合中coll1集合内所有元素
        System.out.println(coll.removeAll(coll1));

        // retainAll(Collection coll1):删除当前集合中不属于coll1集合的元素
        System.out.println(coll.retainAll(coll1));

        // equals(object obj):比较两个集合是否一致(字面值)
        Collection coll2 = coll;
        System.out.println(coll.equals(coll2));

        // hashCode():取hash值
        System.out.println(coll.hashCode());

        // toArray():将集合转换为数组
        Object[] arr = coll.toArray();
        for(int i = 0;i< arr.length;i ++){
            System.out.println(arr[i]);
        }   
    }    
}

如果想要直接遍历集合,需要Iterator迭代器。

Iterator迭代器

  • Iterator对象被称为迭代器,主要用于遍历Collection集合中的元素。
  • GOF给迭代器模式的定义为:提供一种方法访问一个容器对象中各个元素,而又不需要暴露该对象的内部细节。迭代器模式,就是为容器而生。
  • Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Iterator接口的对象。
  • Iterator仅用于遍历集合,Iterator本身并不提供承载对象的能力。
  • 集合对象每次调用Iterator()方法都得到一个全新的迭代器对象。
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;

import org.junit.Test;

public class CollectionTest {
    @Test
    public void test1(){
        Collection coll = new ArrayList();

        // add(object e):将参数e添加到集合coll中
        coll.add("AA");
        coll.add("BB");
        coll.add(123);
        coll.add(new Date());

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

        // 方式一:
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());
        System.out.println(iterator.next());

        // 方式二:不推荐
        for(int i = 0;i < coll.size();i ++){
            System.out.println(iterator.next());
        } 

        // 方式三:推荐  hasNext()判断是否还有下一个元素
        while(iterator.hasNext()){
            System.out.println(iterator.next());
        }   
    }    
}
常用方法
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;

import org.junit.Test;

public class CollectionTest {
    @Test
    public void test1(){
        Collection coll = new ArrayList();
        coll.add("AA");
        coll.add("BB");
        coll.add(123);
        coll.add(new Date());

        // remove():移除
        while(iterator.hasNext()){
            Object obj = iterator.next();
            if("AA".equals(obj)){
                iterator.remove();
            }  
        }

        // foreach:增强for循环
        // 可以迭代访问Collection和数组
        // 遍历操作不需要获得Collection或数组的长度,无需使用索引访问元素
        // 底层是Iterator操作
        // foreach还可以用来遍历数组
        for(Object obj:coll){
            System.out.println(obj);
        }

    }    
}

List接口

List接口是Collection接口的子接口。

鉴于数组的局限性,我们经常使用List替代数组。

List集合类中元素有序且可重复,集合中每个元素都有其对应的顺序索引。

List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素。

接口下有三个实现类:ArrayList(主要实现类)、LinkedList、Vector

问题:ArrayList、LinkedList、Vector的异同

相同点:三个类都是实现了List接口,存储数据的特点相同:存储都是有序的、可重复的数据

不同点:ArrayList类是线程不安全的,效率高,本质是对数组的封装,底层是Object[];LinkedList类是线程不安全的,效率高,本质是对数组的封装,底层是双向链表,适合频繁的插入,删除操作;Vector类是线程安全的,效率低,底层同ArrayList类。

  • List接口常用方法
import java.util.ArrayList;

public class ListTest {
    public static void main(String[] args) {
        ArrayList list = new ArrayList();
        
        // add(int index,Object ele) 在index位置插入元素
        list.add(123);
        list.add(456);
        list.add("AA");
        list.add(1,789);

        // addAll(int index,Collection eles) 在index位置插入一个集合对象
        ArrayList list1 = new ArrayList();
        list1.add(1);
        list1.add(2);
        list1.add(3);

        list.addAll(0, list1);

        // get(int index) 获取指定index位置的元素
        list.get(1);

        // indexOf(Object obj) 返回obj在当前集合中首次出现的位置
        list.indexOf("AA");

        // lastIndexOf(Object obj) 返回obj在当前集合中末次出现的位置
        list.lastIndexOf(456);

        // set(int index,Object ele) 设置index位置的元素为ele
        list.set(2,"BB");

        // subList(int fromIndex,int toIndex) 返回从fromIndex到toIndex位置的子集合
        System.out.println(list.subList(3, 5));
        
        System.out.println(list);

    }
}

Set接口

TreeSet是SortSet接口的实现类,TreeSet可以确保集合元素处于排序状态
TreeSet底层使用红黑树结构存储数据
TreeSet两种排序方法:自然排序和定制排序。默认情况下使用自然排序
Set接口有三个实现类:HashSet,LinkedHashSet,TreeSet

他们的关系和List接口的实现类差不多:

问题:HashSet,LinkedHashSet,TreeSet的异同

相同点:三个类都是实现了Set接口,存储数据的特点相同:存储都是无序的,不可重复的数据

不同点:HashSet类是线程不安全的,效率高,底层是二叉树;LinkedHashSet类是HashSet类的子类,可以按照添加的顺序遍历,线程不安全的;TreeSet类是线程安全的,效率低,底层是红黑树。

注意点1:无序性不等于随机性,无序性表示存储的无序,不代表打印时的顺序无序。在打印时set也会按照一定的顺序打印,这是为了节约资源。在初始化创建set对象后会在堆中创建一个16位的空间,然后插入元素后,插入的元素会随机写入一个位置。也就是set的写入是随机的,但是会以特定的顺序保存元素。
注意点2:不可重复性的不可重复针对的是对象不可重复。

hashset添加元素的过程
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 集合中添加元素可以使用 add() 方法。 例如: ```java List<String> list = new ArrayList<String>(); list.add("item1"); list.add("item2"); ``` 也可以使用 addAll() 方法将一个集合中的所有元素添加到另一个集合中。 例如: ```java List<String> list1 = new ArrayList<String>(); list1.add("item1"); list1.add("item2"); List<String> list2 = new ArrayList<String>(); list2.add("item3"); list2.add("item4"); list1.addAll(list2); ``` 这样,list1 中就包含了 "item1","item2","item3" 和 "item4"。 ### 回答2: Java集合类是Java编程语言中最重要的数据结构之一。它们提供了一种方便、快速和高效地管理数据的方法。集合类的主要作用就是存储和操作数据,Java集合类的一个关键接口就是Collection接口。在Java中,Collection接口是所有集合类的根接口,因此,学习使用Collection接口是理解和使用Java集合类的基础。 往集合中添加元素是Collection接口的基本操作之一。在Java中,我们可以使用add()方法将元素添加到集合中。add()方法是Collection接口中的一个标准方法,它用于将一个元素添加到集合中。在使用add()方法时,我们只需要将要添加的元素传递给这个方法即可。例如: ```Java ArrayList<String> list = new ArrayList<>(); list.add("Java"); list.add("Python"); list.add("PHP"); ``` 在这个例子中,我们使用ArrayList集合类初始化了一个list对象,然后使用add()方法向集合中添加了三个元素,分别是”Java”,”Python”和”PHP”。 除了add()方法之外,Collection接口还提供了许多其他的方法用于向集合中添加元素,如addAll()、offer()和push()等。这些方法都可以实现向集合中添加元素的功能,具体选择哪个方法,取决于具体的需求。例如,addAll()方法可以添加一个集合中的所有元素,而push()方法只能添加一个元素到栈顶。 总的来说,学习Java集合类中Collection接口中添加元素的方法很重要,它是理解Java集合类的基础之一。掌握添加元素的各种方法,可以让我们更加高效地管理和操作Java集合中的数据。 ### 回答3: Java集合类是Java开发中非常常用的数据类型,而往集合中添加元素是其基本操作之一。其中,Collection接口Java集合类中最基本的接口,所有的集合类都可以通过实现该接口来实现元素的添加、删除、查找等操作。 往一个集合中添加元素,通常可以用add()方法来完成。在Collection接口中,add()方法用于向集合中添加一个元素。例如,我们可以使用以下代码向一个List类型的集合中添加一个元素: ```java List<String> list = new ArrayList<String>(); list.add("Java"); ``` 上述代码中,我们创建了一个ArrayList类型的list集合,并使用add()方法向其中添加了一个字符串元素"Java"。 需要注意的是,在使用add()方法时,需要注意元素类型的匹配。例如,如果我们创建的集合类型为List<Integer>,则不能添加其他类型的元素,否则会编译错误。 此外,Collection接口中还提供了addAll()方法,用于将一个集合中的所有元素批量添加到另一个集合中。例如,我们可以使用以下代码将一个数组中的所有元素添加到一个Set类型的集合中: ```java Set<Integer> set = new HashSet<Integer>(); Integer[] arr = new Integer[]{1, 2, 3, 4}; set.addAll(Arrays.asList(arr)); ``` 上述代码中,我们首先创建了一个HashSet类型的set集合,然后使用addAll()方法将数组arr中所有的元素添加到set集合中。 除了使用add()和addAll()方法往集合中添加元素外,Java集合类还提供了其他方法用于添加、删除、查找元素,如remove()、contains()等。不同类型的集合类有着不同的实现方法,开发者可以根据具体需求选择合适的集合类型和操作方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒 暄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值