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




目录
相关文章
|
6天前
|
存储 安全 Java
Java 集合框架中的老炮与新秀:HashTable 和 HashMap 谁更胜一筹?
嗨,大家好,我是技术伙伴小米。今天通过讲故事的方式,详细介绍 Java 中 HashMap 和 HashTable 的区别。从版本、线程安全、null 值支持、性能及迭代器行为等方面对比,帮助你轻松应对面试中的经典问题。HashMap 更高效灵活,适合单线程或需手动处理线程安全的场景;HashTable 较古老,线程安全但性能不佳。现代项目推荐使用 ConcurrentHashMap。关注我的公众号“软件求生”,获取更多技术干货!
28 3
|
2月前
|
Java 数据库
在Java中使用Seata框架实现分布式事务的详细步骤
通过以上步骤,利用 Seata 框架可以实现较为简单的分布式事务处理。在实际应用中,还需要根据具体业务需求进行更详细的配置和处理。同时,要注意处理各种异常情况,以确保分布式事务的正确执行。
|
2月前
|
消息中间件 Java Kafka
在Java中实现分布式事务的常用框架和方法
总之,选择合适的分布式事务框架和方法需要综合考虑业务需求、性能、复杂度等因素。不同的框架和方法都有其特点和适用场景,需要根据具体情况进行评估和选择。同时,随着技术的不断发展,分布式事务的解决方案也在不断更新和完善,以更好地满足业务的需求。你还可以进一步深入研究和了解这些框架和方法,以便在实际应用中更好地实现分布式事务管理。
|
2月前
|
JSON Java Apache
非常实用的Http应用框架,杜绝Java Http 接口对接繁琐编程
UniHttp 是一个声明式的 HTTP 接口对接框架,帮助开发者快速对接第三方 HTTP 接口。通过 @HttpApi 注解定义接口,使用 @GetHttpInterface 和 @PostHttpInterface 等注解配置请求方法和参数。支持自定义代理逻辑、全局请求参数、错误处理和连接池配置,提高代码的内聚性和可读性。
175 3
|
23天前
|
存储 缓存 安全
Java 集合江湖:底层数据结构的大揭秘!
小米是一位热爱技术分享的程序员,本文详细解析了Java面试中常见的List、Set、Map的区别。不仅介绍了它们的基本特性和实现类,还深入探讨了各自的使用场景和面试技巧,帮助读者更好地理解和应对相关问题。
40 5
|
2月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
241 12
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
存储 缓存 安全
Java 集合框架优化:从基础到高级应用
《Java集合框架优化:从基础到高级应用》深入解析Java集合框架的核心原理与优化技巧,涵盖列表、集合、映射等常用数据结构,结合实际案例,指导开发者高效使用和优化Java集合。
45 4
|
2月前
|
消息中间件 Java 数据库连接
Java 反射最全详解 ,框架设计必掌握!
本文详细解析Java反射机制,包括反射的概念、用途、实现原理及应用场景。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
Java 反射最全详解 ,框架设计必掌握!
|
2月前
|
开发框架 Java 关系型数据库
Java哪个框架适合开发API接口?
在快速发展的软件开发领域,API接口连接了不同的系统和服务。Java作为成熟的编程语言,其生态系统中出现了许多API开发框架。Magic-API因其独特优势和强大功能,成为Java开发者优选的API开发框架。本文将从核心优势、实际应用价值及未来展望等方面,深入探讨Magic-API为何值得选择。
69 2
|
2月前
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
122 1