Java之容器

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 介绍下Java容器
容器

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

·Set中的数据对象没有顺序且不可以重复    HashSet
·List中的数据对象有顺序且可以重复        LinkedList(底层为链表)  ArrayList(底层为数组)
    

·Array读快改慢
·Linked改快读慢
·Hash两者之间

Map接口定义了存储“键(key) - 值(value)映射对”的方法 HashMap

①Collection接口中所定义的方法

int size()
boolean isEmpty()
void clear()
boolean contains(object element)    //是否包含了element元素
boolean add(object element)
boolean remove(object element)
Iterator iterator();
boolean containsAll(Collection c)    //是否包含了集合c里面的所有元素
boolean addAll(Collection c)        
boolean removeAll(Collection c)        //移除有集合c里面的所有元素
boolean retainAll(Collection c)        //跟另一个集合的交集
Object[] toArray()

②Iterator接口 为了统一遍历Collection中方法,

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

补充:增强的for循环

缺陷:
    ·数组:不能方便的访问下标值
    ·集合:与使用iterator相比,不能方便的删除集合中的内容
总结:除了简单遍历并读出其中的内容
int[] arr = {1,2,3,4,5};
for(int i : arr){
    System.out.println(i);
}

Collection c = new ArrayList();
c.add();
c.add();
c.add();
for(Object o : c){
    System.out.println(o);
}

③Set接口

·Collection的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有顺序的,而且不可以重复
·Set容器可以与数学中“集合”的概念相对应
·J2sDK API中所提供的Set容器类有HashSet,TreeSet等

④List接口

·List接口是Collection的子接口,实现List接口的容器类中的元素是有顺序的,能重复的
·List容器中的元素都对应一个整数型的序号记载其在容器中的位置,可以根据序号存取容器中的元素
·J2SDK 所提供的List容器类有ArrayList,LinkedList等。
    List容器常用算法
        ·void sort(List) 对List容器内的元素排序
        ·void shuffle(List) 对List容器内的对象进行随机排序
        ·void reverse(List) 对List容器内的对象进行逆序排列
        ·void fil(List, object) 用一个特定的对象重写整个List容器
        ·coid copy(List dest, List src) 将src List容器内容拷贝到dest List容器
        ·int binarySearch(List,object) 对于顺序的List容器,采用折半查找的方法查找特定对象

⑤comparable接口

·所有可以“排序”的类都实现了此方法,
·只有一个方法public int compareTo(object obj);
    返回0 表示 this == obj
    返回正数 表示 this > obj
    返回负数 表示 this < obj

⑥Map接口

·实现Map接口的类用来存储键 -值 对
·Map接口的实现类有HashMap 和 TreeMap 等
·Map类中存储的键 - 值对通过键来标识,所以键值不能重复
    Object put(Object key, Object value)
    Object get(Object key)
    Object remove(Object key)
    boolean containsKey(Object key)
    boolean containsValue(Object value)
    int size()
    boolean isEmpty()
    void putAll(Map t)
    void clear()

自动打包 Auto-boxing/unboxing

·在核实的时机自动打包、解包
·自动将对象转换为基础类型


泛型Generic
起因:

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

解决办法

·在定义集合的时候同时定义集合中对象的类型
·实例:
    ·可以再定义Collection的时候指定
    ·也可以在循环时用Iterator指定
List<String> c = arrayList<String>();
Iterator<String> it = c2.iterator();

好处

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

补充:Object是所有类的父类,其中的一些方法

toString()方法
·public String toString() 描述当前对象的有关信息
·在进行String与其它类型数据的连接操作时,(如:System.out.println("info" + person))将自动调用该对象类的toString()方法
·可以根据需要在用户自定义类型中重写toString()方法

hashCode()方法
哈希码

equals()方法 相当于“==” 所以大多数类中重写了equals()方法
public boolean equals(Object obj)

比较对象是否相等,重写
public boolean equals(Object obj){
    if(obj == null) return false;
    else{
        if(obj instanceof class){    //class类,判断obj是否属于class类
            Class c = (class)obj;
            if(c.color == this.color && ...){   //所有属性都相同
                return true;
            }
        }

    }
}


总结:1136

·一个图
    Collection                Map
    /    \                 |
     set    list                  hashMap
     /        /   \
   hashSet arrayList  linkedList            
·一个类
    ·Collections
·三个知识点
    ·for
    ·Generic(泛型)
    ·Auto-boxing/unboxing
·六个接口
    ·colleciton
    ·set
    ·list
    ·map
    ·Iterator
    ·comparable
相关文章
|
4月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
4月前
|
Java Linux Maven
java依赖冲突解决问题之容器加载依赖jar包如何解决
java依赖冲突解决问题之容器加载依赖jar包如何解决
|
28天前
|
存储 安全 Java
Java多线程编程中的并发容器:深入解析与实战应用####
在本文中,我们将探讨Java多线程编程中的一个核心话题——并发容器。不同于传统单一线程环境下的数据结构,并发容器专为多线程场景设计,确保数据访问的线程安全性和高效性。我们将从基础概念出发,逐步深入到`java.util.concurrent`包下的核心并发容器实现,如`ConcurrentHashMap`、`CopyOnWriteArrayList`以及`BlockingQueue`等,通过实例代码演示其使用方法,并分析它们背后的设计原理与适用场景。无论你是Java并发编程的初学者还是希望深化理解的开发者,本文都将为你提供有价值的见解与实践指导。 --- ####
|
2月前
|
消息中间件 NoSQL Kafka
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
Flink-10 Flink Java 3分钟上手 Docker容器化部署 JobManager TaskManager Kafka Redis Dockerfile docker-compose
66 4
|
2月前
|
Kubernetes Cloud Native 流计算
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
Flink-12 Flink Java 3分钟上手 Kubernetes云原生下的Flink集群 Rancher Stateful Set yaml详细 扩容缩容部署 Docker容器编排
91 3
|
4月前
|
安全 算法 Java
【Java集合类面试二】、 Java中的容器,线程安全和线程不安全的分别有哪些?
这篇文章讨论了Java集合类的线程安全性,列举了线程不安全的集合类(如HashSet、ArrayList、HashMap)和线程安全的集合类(如Vector、Hashtable),同时介绍了Java 5之后提供的java.util.concurrent包中的高效并发集合类,如ConcurrentHashMap和CopyOnWriteArrayList。
【Java集合类面试二】、 Java中的容器,线程安全和线程不安全的分别有哪些?
|
4月前
|
Java 容器
【Java集合类面试一】、 Java中有哪些容器(集合类)?
这篇文章列出了Java中的四大类集合接口:Set、List、Queue和Map,以及它们的常用实现类,如HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap和TreeMap。
【Java集合类面试一】、 Java中有哪些容器(集合类)?
|
4月前
|
Java 测试技术 数据库
容器镜像解析问题之解析 Java 应用依赖时识别 jar 包如何解决
容器镜像解析问题之解析 Java 应用依赖时识别 jar 包如何解决
35 0
|
4月前
|
存储 安全 Java
【Java 第四篇章】流程控制、容器
本文档详细介绍了Java中的流程控制、集合类型、数组声明及容器的声明与遍历等内容。在流程控制部分,包括了if、if...else、if...else if...else、switch等语句的使用方法,并提供了具体示例。接着,文档对比分析了Java中单列集合(如HashSet、LinkedHashSet、TreeSet等)与双列集合(如HashMap、LinkedHashMap、Hashtable等)的特点及底层实现原理。此外,还介绍了如何声明与初始化数组,并提供了多种循环结构的使用示例。最后,通过具体的代码示例展示了不同集合类型的声明、基本操作(如添加、删除、更新、查找)以及遍历方法。
24 0
|
5月前
|
Java Scala 流计算
实时计算 Flink版产品使用问题之Docker镜像中的Java路径和容器内的Java路径不一致,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
下一篇
DataWorks