《Java基础:Collection类(2种用法)》

一、想对你说


(1)之前一直有小伙伴让我总结下Java相关的知识点,这里我针对有一定Java基础的同学做了一个系列的总结,感兴趣的同学可以看看顶部的【Java专栏】希望对大家有所帮助。
(2)要是对您有所帮助的话,可以给 “大大大钢琴” 点个赞,这是我继续下去的动力,谢谢大家了!废话不多说了,直接上干货。
 

二、Collection类

(二)Collection类介绍

Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

语法
public interface Collection<E> extends Iterable<E> {}
它是一个接口,是高度抽象出来的集合,它包含了集合的基本操作:添加、删除、清空、遍历(读取)、是否为空、获取大小、是否保护某元素等等。

方法
boolean add(E e) 
    确保此 collection 包含指定的元素(可选操作)。 
boolean addAll(Collection c) 
    将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。 
void clear() 
    移除此 collection 中的所有元素(可选操作)。 
boolean contains(Object o) 
    如果此 collection 包含指定的元素,则返回 true。 
boolean containsAll(Collection c) 
    如果此 collection 包含指定 collection 中的所有元素,则返回 true。 
boolean equals(Object o) 
    比较此 collection 与指定对象是否相等。 
int hashCode() 
    返回此 collection 的哈希码值。 
boolean isEmpty() 
    如果此 collection 不包含元素,则返回 true。 
Iteratoriterator() 
    返回在此 collection 的元素上进行迭代的迭代器。 
boolean remove(Object o) 
    从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。 
boolean removeAll(Collection c) 
    移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。 
boolean retainAll(Collection c) 
    仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。 
int size() 
    返回此 collection 中的元素数。 
Object[] toArray() 
    返回包含此 collection 中所有元素的数组。
T[] toArray(T[] a) 
    返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。

Collection包含了List和Set两大分支:

1、List :有序的队列(存储顺序和取出顺序一致),可重复,每一个元素都有它的索引,第一个元素的索引值是0(List的实现类有以下4种)

(1)ArrayList:线程不安全,底层使用数组实现,查询快,增删慢,效率高。 实现了可变大小的数组,允许所有元素包括null。

(2)LinkedList:线程不安全,底层使用链表实现,查询慢,增删快,效率高。

允许元素为空,LinkedList提供了额外的get,remove,insert方法,这些操作可以使LinkedList被用作堆栈、队列或双向队列。
不是线程安全的,如果多个线程同时访问LinkedList,则必须自己实现访问同步,或者另外一种解决方法是在创建List时构造一个同步的List。

(3)Vector:线程安全,底层使用数组实现,查询快,增删慢,效率低。每次容量不足时,默认自增长度的一倍(如果不指定增量的话)

(4)Stack:继承自Vector,实现一个后进先出的堆栈。

2、Set:元素唯一一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素。

(1)HashSet: 底层是由HashMap实现的,通过对象的hashCode方法与equals方法来保证插入元素的唯一性,无序(存储顺序和取出顺序不一致)。

(2)LinkedHashSet:底层数据结构由哈希表和链表组成。哈希表保证元素的唯一性,链表保证元素有序。(存储和取出是一致)

(3)TreeSet 基于 TreeMap 的 NavigableSet 实现。使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。 元素唯一。

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

public class test_demo {
    public static void main(String[] args) throws Exception {
        test1();
    }

    private static void test1() {
        Collection<String> collection = new Vector<>();
        collection.add("gogogo");
        collection.add("pap");
        collection.add("niko");
        collection.add("kitty");

        Collection<String> coll = new ArrayList<>();
        coll.add("niko");
        coll.add("kitty");
        coll.add("pecuyu");

        //collection.clear(); // 清空集合
        //collection.isEmpty(); // 集合是否为空
        //System.out.println(collection.size());// 获取集合大小
        //System.out.println(collection.contains("niko"));// 是否包含另一个元素
        //System.out.println(collection.containsAll(coll));//是否完全包含另一个集合
        //collection.remove("kitty");// 删除第一个匹配项,删除了匹配项则返回true
        //System.out.println(collection.removeAll(coll)); // 删除与指定集合有交集的部分,原集合有改变就返回true
        //System.out.println(collection.retainAll(coll));// 保留与指定集合有交集的部分,原集合有改变就返回true

        // 方式1:iterator 迭代器
        Iterator<String> iterator = collection.iterator();
        while (iterator.hasNext()) {
            System.out.print(iterator.next() + " ");
        }
        System.out.println("\n" + "-------------------");


        //for循环iterator1(循环完会被销毁,节约内存提高效率)
        for (Iterator<String> iterator1 = collection.iterator(); iterator1.hasNext(); ) {
            System.out.print(iterator1.next() + " ");
        }
        System.out.println("\n" + "-------------------");

        // 转化为object数组
        Object[] array = collection.toArray(); 
        for (Object string : array) {
            System.out.print(string + " ");
        }
        System.out.println("\n" + "-------------------");

        // 方式3:指定要转化的数组类型
        String[] arr = new String[collection.size()];
        String[] array2 = collection.toArray(arr);  
        for (String string : array2) {
            System.out.print(string + " ");
        }
    }
}

(二)Collection如何遍历

如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:

import java.util.Collection;
import java.util.Iterator;
import java.util.Vector;

public class test_demo {
    public static void main(String[] args) throws Exception {
        Collection<String> collection = new Vector<>();
        collection.add("test001");
        collection.add("test002");
        collection.add("test003");

        // 获得一个迭代子
        Iterator it = collection.iterator(); 
        while(it.hasNext()) {
            // 得到下一个元素
            Object obj = it.next(); 
            System.out.println(obj);
        }
    }
}

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

大大大钢琴

喜欢!就请他吃3块钱好吃的吧!

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

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

打赏作者

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

抵扣说明:

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

余额充值