【Java】集合类的概念以及集合中的接口

本文介绍了Java集合类的概念,所有集合位于java.util包,包括Collection、List、Set和Map等接口。List接口代表有序集合,允许重复元素,如ArrayList和LinkedList。Set接口不允许重复,如HashSet和TreeSet。Map接口存储键值对,HashMap是常见实现。文章还提到了接口实现类的特性,如HashSet基于HashMap,TreeSet是有序Set,以及ArrayList和LinkedList的访问效率差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

集合类的概念

所有集合类都位于 java.util 包,其中提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。

一个集合是一个对象,但它表示一组对象,Java 集合中实际存放的是对象的引用值,不能存放基本数据类型值。

集合中的接口

集合框架是一个类库的集合,包含实现集合的接口。接口是集合的抽象数据类型,提供对集合中所表示的内容进行单独操作的可能。

  • Collection 接口:该接口是最基本的集合接口,一个 Collection 代表一个元素。
  • List 接口:该接口实现了 Collection 接口。List 是有序集合,允许有相同的元素。使用 List 能够精确地控制每个元素插入的位置,用户能够使用索引(元素在 List 中的位置,类似于数组下标)来访问 List 中的元素,与数组类似。
  • Set 接口:该接口也实现了 Collection 接口。它不能包含重复的元素,SortedSet 是按升序排列的 Set 集合。
  • Map 接口:包含键值对,Map 不能包含重复的键。SortedMap 是一个按升序排列的 Map 集合。

接口实现类

Java 平台提供了许多数据集接口的实现类。例如实现 Set 接口的常用类有 HashSet 和 TreeSet,它们都可以容纳所有类型的对象,但是不能保证序列顺序永久不变。

实现 List 接口的常用类有 ArrayList 和 LinkedList,它们也可以容纳所有类型的对象包括 null,并且都保证元素的存储位置。

实现 Map 映射的类是 HashMap,可实现一个键到值的映射。

  • HashSet:为优化査询速度而设计的 Set。它是基于 HashMap 实现的,HashSet 底层使用 HashMap 来保存所有元素,实现比较简单。
  • TreeSet:该类不仅实现了 Set 接口,还实现了 java.util.SortedSet 接口,该实现类是一个有序的 Set,这样就能从 Set 里面提取一个有序序列。
  • ArrayList:一个用数组实现的 List,能进行快速的随机访问,效率高而且实现了可变大小的数组。
  • LinkedList:对顺序访问进行了优化,但随机访问的速度相对较慢。此外它还有 add()、add()、get()、remove() 等方法,能把它当成栈(Stack)或队列(Queue)来用。


集合框架接口中实现类 的结构如图 2 所示。
 

给个代码示例:

package edu.xalead.collection;

import java.util.*;//*代表所有的类库

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

public class CollectionTest {
    public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add("Hello");
        c.add("World");
        c.add("!");

        Iterator iter = c.iterator();
        while (iter.hasNext()){
            System.out.println(iter.next());
        }
        //List集合是有序的
        c = new LinkedList();
        c.add("Hello");
        c.add("World");
        c.add("!");

        iter = c.iterator();
        while (iter.hasNext()){
            System.out.println(iter.next());
        }

        c = new ArrayList();
        c.add("Hello");
        c.add("World");
        c.add("!");

        iter = c.iterator();
        while (iter.hasNext()){
            System.out.println(iter.next());
        }

        c = new HashSet();
        //HashSet()是无序的,这是Set规范,即就是含有Set的方法输出时无序的。
        c.add("Hello");
        c.add("World");
        c.add("!");

        iter = c.iterator();
        while (iter.hasNext()){
            System.out.println(iter.next());
        }

        c = new HashSet();
        c.add(new Student(22,"张三"));
        c.add(new Student(22,"张三"));
        c.add(new Student(22,"张三"));
        c.add(new Student(22,"张三"));
        c.add(new Student(22,"张三"));
        c.add(new Student(22,"张三"));
        System.out.println(c.size());
    }
}

输出结果依次为:

Hello
World
!
Hello
World
!
Hello
World
!
!
Hello
World
6
 

参考资料:http://c.biancheng.net/view/1056.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值