什么是容器

举报
郝老三 发表于 2023/07/25 16:10:47 2023/07/25
【摘要】 @TOC 一:概念在Java中,容器是一种数据结构,用于存储和组织其他对象。容器提供了一种方式来管理和访问这些对象,并提供了各种方法来增加、删除、搜索和遍历其中的元素。Java提供了多种容器类,每种容器类都有其特定的用途和功能。 二:容器API类图 2.1 CollectionCollection代表了一个容器Collection集合在Java中,java.util.Collection接口...

@TOC

一:概念

在Java中,容器是一种数据结构,用于存储和组织其他对象。容器提供了一种方式来管理和访问这些对象,并提供了各种方法来增加、删除、搜索和遍历其中的元素。Java提供了多种容器类,每种容器类都有其特定的用途和功能。

二:容器API类图

在这里插入图片描述

2.1 Collection

Collection代表了一个容器Collection集合

在Java中,java.util.Collection接口是表示一组对象的根接口。它是Java集合框架的基础,提供了统一的操作和方法,用于处理和管理对象的集合。

2.2 Set

Set(集合):存储唯一元素的集合。它不允许存储重复的元素,并提供了高效的查找和删除操作。常见的Set实现类包括HashSet、TreeSet和LinkedHashSet。

2.3 List

以有序的方式存储对象的集合。它允许存储重复的元素,并提供了按索引访问、插入、删除和搜索元素的方法。常见的List实现类包括ArrayList、LinkedList和Vector。

2.4 Map

Map(映射):以键值对(Key-Value)的形式存储元素的集合。它提供了通过键快速查找和访问值的功能。常见的Map实现类包括HashMap、TreeMap和LinkedHashMap。

Collection接口——定义了存取一组对象的方法,其子接口Set和List分别定义了存储方式

Set中的数据对象没有顺序且不可以重复
List中的数据对象有顺序且可以重复
Map接口定义了存储“键(key)——值(value)映射对”的方法

三:详细解释

3.1 Collection接口

3.1.1 Collection用法

import java.util.*;
public class Name{
	private String firstName,lastName;
    public Name(String firstName,String lastName){
    	this.firstName= firsName;
        this.lastName= lastName;
    }
    public String getFirsName(){ return firstName;}
    public String getLastName(){ return lastName;}
    public String toString(){ return firstName + " " + lastName;}
}

public class Teat {
	public static void main(string[] args){
    	Collection c =new ArrayList();
        //可以放入不同类型的对象
        c.add("hello");
        c.add(new Name("f1","11"));
        c.add(new Integer(100));
        System.out.println(c.size());
        System.out.println(c);
    }
}

输出结果 : 3 [hello,f1 11,100]
容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法;对于自定义的类型,需要要重写equals和hashCode方法以实现自定义的对象相等规则
注意:相等的对象应该具有相等的hash codes
增加Name类的equals和hashCode方法如下:

public boolean equals(Object obj){
	if(obj instanceof Name){
    	Name name =(Name) obj;
        return (firstName.equals(name.firstName))
            &&(lastName.equals(name.lastName));
    }
    return super.equals(obj);
}

public int hashCode(){
	return firstName.hashCode();
}

重写equals方法时必须重写hashCode方法

3.2 Iterator接口

  1. 所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象
  2. Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作
  3. Iterator接口定义了如下方法
boolean hasNext (); //判断游标右边是否有元素
Object next(); //返回游标右边的元素并将游标移动到下一个位置
void remove(); // 删除游标左面的元素,在执行完next之后该操作只能执行一次

3.3 List接口

List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,而且可以重复
List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可根据序号存取容器中的元素
常用算法:
在这里插入图片描述

3.4 Comparable接口

问:上面的算法根据什么确定容器中对象的“大小”顺序?

  • 所有可以“排序”的类都实现了java.lang.Comparable接口,Comparable接口中只有一个方法:public int compareTo(Object obj),

  • 该方法:
    返回 0 表示this==obj
    返回正数表示this>obj
    返回负数表示this<obj
    实现了Comparable接口的类通过实现comparaTo方法从而确定该类对象的排序方式

四:如何选择数据结构

4.1 衡量标准:读的效率和改的效率

  1. Array读快改慢
  2. Linked改快读慢
  3. Hash两者之间

4.2 Map接口

实现Map接口的类用来存储 键—值 对
实现类有HashMap和TreeMap
存储的 键—值 对通过键来标识,所以键值不能重复

4.3 JDK1.5泛型

4.3.1 起因:

  • JDK1.4以前类型不明确
  • 装入集合的类型都被当作Object对待,从而失去自己的实际类型
  • 从集合中取出时往往需要转型,效率低,容易产生错误

4.3.2 解决方法:

  • 在定义集合时同时定义集合中对象的类型

4.3.3 好处:

  • 增强程序的可读性和稳定性

五:总结&提升

  • 本文总结了Java中的容器概念和相关的API类图。容器是一种数据结构,用于存储和组织其他对象,并提供了各种操作方法。Java提供了多种容器类,包括Collection、Set、List和Map等。
  • 在容器API类图中,Collection代表一个容器集合,是Java集合框架的基础接口。Set是存储唯一元素的集合,不允许重复,并提供了高效的查找和删除操作。常见的Set实现类有HashSet、TreeSet和LinkedHashSet。List以有序方式存储对象的集合,允许重复元素,并提供了按索引访问、插入、删除和搜索元素的方法。常见的List实现类有ArrayList、LinkedList和Vector。Map以键值对的形式存储元素的集合,提供了通过键快速查找和访问值的功能。常见的Map实现类有HashMap、TreeMap和LinkedHashMap。
    在详细解释部分,介绍了Collection接口的方法,并给出了一个使用ArrayList的示例。还提到了容器类对象在调用remove、contains等方法时需要比较对象是否相等,需要重写equals和hashCode方法以实现自定义的对象相等规则。
  • 文章还介绍了Iterator接口,所有实现了Collection接口的容器类都有一个iterator方法返回一个实现了Iterator接口的对象,用于方便地遍历容器内的元素。
    List接口是Collection的子接口,实现List接口的容器类中的元素有顺序且可以重复,可以通过索引存取元素。
  • 文章提到了Comparable接口,它是实现排序的类所要实现的接口,通过实现compareTo方法来确定容器中对象的大小顺序。
    在如何选择数据结构部分,提到了衡量标准是读的效率和改的效率。Array的读取快但改变慢,LinkedList的改变快但读取慢,HashMap的性能在两者之间。
  • 最后,文章提到了JDK1.5引入的泛型,解决了在旧版本中集合中的元素被当作Object处理的问题,增强了程序的可读性和稳定性。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。