Java集合框架

简介: Java集合框架

2b01ec051a4adf4f2bf6da404e3cffe6.png


fd87cc21a5a9b1ac65e65616b40325ef.png

Collection是集合接口

   |————Set子接口:无序,不允许重复。

   |————List子接口:有序,可以有重复元素。


   区别:Collections是集合类


   Set和List对比:

   Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。

   List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。


   Set和List具体子类:

   Set

    |————HashSet:以哈希表的形式存放元素,插入删除速度很快。


   List

    |————ArrayList:动态数组

    |————LinkedList:链表、队列、堆栈。


   Array和java.util.Vector

   Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。


Collection是集合接口


b0b8bf30450c36bbce9db340b65da9d4.png

Collections是集合类

7ca47331ae2c1f106a05f58e79b51089.png

Set接口继承自Collection集合接口

9acb4c9ac0b1bbb6ad6eafa4d8f07833.png

List接口继承自Collection集合接口

4658c8952d61ddab3240ea1c4944f69b.png

Set接口:是Collection接口的一个子接口,它表示数学意义上的集合概念。Set中不包含重复的元素,即Set中不存两个这样的元素e1和e2,使得e1.equals(e2)为true。


1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。


2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。


3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。


package cn.czbk.no7;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class CollectionTest {
public static void main(String[] args) {
HashSet hs=new HashSet();
hs.add("abc");
hs.add("abc");
hs.add("ab");
hs.add("ac");
hs.add("ab");
hs.add("ac");
hs.add("abcd");
System.out.println(hs);//
//定义一个接口类型的引用变量来引用实现接口的类的实例
Set treeSet=new TreeSet(hs);
System.out.println(treeSet);
}
}

上述代码执行完毕后的控制台打印出来的数据如下:


be00f627311fdee66f1d3b86ce006edf.png


List接口:继承了 Collection 接口以定义一个允许重复项的有序集合。该接口不但能够对列表的一部分进行处理,还添加了面向位置的操作。


ArrayList和LinkedList的大致区别如下:

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。

2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。

3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。  

package cn.czbk.no7;
import java.util.ArrayList;
import java.util.List;
public class ListTest {
public static void main(String[] args) {
List l1=new ArrayList();
for(int i=0;i<=9;i++)
{
l1.add("ly"+i);
}
System.out.println("初始化: \n"+l1);
l1.add(4, "ly04");
System.out.println("在下标为4的地方新增里ly04: \n"+l1);
l1.set(8, "ly08");
System.out.println("将下标为8的值改为ly08: \n"+l1);
l1.remove(1);
System.out.println("删除下标为1的值: \n"+l1);
}
}

608ba83805aee258924c457d942b612a.png

package cn.czbk.no7;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
public class TestList1 {
public static void main(String[] args) {
List l1=new LinkedList();
for(int i=0;i<=9;i++){
l1.add("a"+i);
}
System.out.println("初始化\n"+l1);
Collections.shuffle(l1);
System.out.println("乱序之后\n"+l1);
Collections.reverse(l1);    
System.out.println("逆序\n"+l1);
Collections.sort(l1);
System.out.println("排序"+l1);
}
}



debd3176d0363dc22b2a00d4dfbfae51.png


Map接口:不是 Collection 接口的继承。而是从自己的用于维护键-值关联的接口层次结构入手。按定义,该接口描述了从不重复的键到值的映射。


HashMap和Hashtable的区别

导读:


1 HashMap不是线程安全的


           HashMap是map接口的子类,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值。HashMap允许null key和null value,而hashtable不允许。


2   HashTable是线程安全。


HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。


HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。 HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差


总结:


image.png




目录
相关文章
|
21天前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
11天前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
554 6
|
10天前
|
算法 Java
Java项目不使用框架如何实现限流?
Java项目不使用框架如何实现限流?
20 2
|
10天前
|
存储 安全 Java
Java 常用集合分类
Java 常用集合分类
13 2
|
15天前
|
Kubernetes Java Android开发
用 Quarkus 框架优化 Java 微服务架构的设计与实现
Quarkus 是专为 GraalVM 和 OpenJDK HotSpot 设计的 Kubernetes Native Java 框架,提供快速启动、低内存占用及高效开发体验,显著优化了 Java 在微服务架构中的表现。它采用提前编译和懒加载技术实现毫秒级启动,通过优化类加载机制降低内存消耗,并支持多种技术和框架集成,如 Kubernetes、Docker 及 Eclipse MicroProfile,助力开发者轻松构建强大微服务应用。例如,在电商场景中,可利用 Quarkus 快速搭建商品管理和订单管理等微服务,提升系统响应速度与稳定性。
31 5
|
16天前
|
机器学习/深度学习 数据采集 JavaScript
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
ADR药品不良反应监测系统是一款智能化工具,用于监测和分析药品不良反应。该系统通过收集和分析病历、处方及实验室数据,快速识别潜在不良反应,提升用药安全性。系统采用Java开发,基于SpringBoot框架,前端使用Vue,具备数据采集、清洗、分析等功能模块,并能生成监测报告辅助医务人员决策。通过集成多种数据源并运用机器学习算法,系统可自动预警药品不良反应,有效减少药害事故,保障公众健康。
ADR智能监测系统源码,系统采用Java开发,基于SpringBoot框架,前端使用Vue,可自动预警药品不良反应
|
2月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
32 5
|
1月前
|
Java 数据库连接 Apache
Java进阶-主流框架总结与详解
这些仅仅是 Java 众多框架中的一部分。每个框架都有其特定的用途和优势,了解并熟练运用这些框架,对于每一位 Java 开发者来说都至关重要。同时,选择合适框架的关键在于理解框架的设计哲学、核心功能及其在项目中的应用场景。随着技术的不断进步,这些框架也在不断更新和迭代以适应新的开发者需求。
39 1
|
2月前
|
存储 Java 程序员
Java中的集合框架:从入门到精通
【8月更文挑战第30天】在Java的世界里,集合框架是一块基石,它不仅承载着数据的存储和操作,还体现了面向对象编程的精髓。本篇文章将带你遨游Java集合框架的海洋,从基础概念到高级应用,一步步揭示它的奥秘。你将学会如何选择合适的集合类型,掌握集合的遍历技巧,以及理解集合框架背后的设计哲学。让我们一起探索这个强大工具,解锁数据结构的新视角。
|
2月前
|
存储 算法 Java
Java中的集合框架深度解析云上守护:云计算与网络安全的协同进化
【8月更文挑战第29天】在Java的世界中,集合框架是数据结构的代言人。它不仅让数据存储变得优雅而高效,还为程序员提供了一套丰富的工具箱。本文将带你深入理解集合框架的设计哲学,探索其背后的原理,并分享一些实用的使用技巧。无论你是初学者还是资深开发者,这篇文章都将为你打开一扇通往高效编程的大门。
下一篇
无影云桌面