Java基础篇-集合

Java集合中contains方法的效率对比 Java集合中contains方法的效率对比 最近让部门技术大佬帮忙代码review的时候,他给我指出了一个小的技术细节,就是对于集合的contains方法尽量选用Set而不是List,平时没怎么注意,仔细看了下源码,大佬就是大佬,技术细节也把握的死死的。 Java集合List、Set中均有对集合中元素是否存在的判断方法contains(Object o);Map中有对key及value是否存在的判断方法containsKey(Object key)和containsValue(Object value)。 阅读详情

1、 什么是集合

      存储对象的容器,面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,存储对象,集合是存储对象最常用的一种方式。集合的出现就是为了持有对象。集合中可以存储任意类型的对象,而且长度可变。在程序中有可能无法预先知道需要多少个对象, 那么用数组来装对象的话, 长度不好定义, 而集合解决了这样的问题。

      常见集合知识和面试题(点击下载)


2、集合和数组的区别

      数组和集合类都是容器、数组长度是固定的,集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象数组中存储数据类型是单一的,集合中可以存储任意类型的对象。



3、集合类结构图




4、集合父子结构

              ----| Iterable               接口 

----| Collection       接口
---------| List          可以有重复元素的集合
           ---------| ArrayList  

                                  ---------| LinkedList    

               ---------| Set           不可以有重复元素的集合

                                 ---------|HashSet  线程不安全,存取速度快。底层是以哈希表实现的。

                                 ---------| TreeSet  红-黑树的数据结构,默认对元素进行自然排序(String)。

     List集合允许元素可以重复,允许在指定位置插入元素,并通过索引来访问元素。

     Set集合用于存储无序(存入和取出的顺序不一定相同)元素,值不能重复。


5、Collection共同方法

增加:
1:add()               将指定对象存储到容器中、add 方法的参数类型是Object 便于接收任意对象。
2:addAll()           将指定集合中的元素添加到调用该方法和集合中。
删除:
3:remove()         将指定的对象从集合中删除。
4:removeAll()     将指定集合中的元素删除。
修改:
5:clear()             清空集合中的所有元素。

判断:

6:isEmpty()         判断集合是否为空。

7:contains()        判断集合何中是否包含指定对象。

8:containsAll()    判断集合中是否包含指定集合。

9:equals()           判断两个对象是否相等 。 
获取:           int size()    返回集合容器的大小。
       转成数组:  toArray()    集合转换数组。



5.1、ArrayList

 
       ArrayList数组实现, 查找快,因为数组的内存空间地址是连续的。ArrayList底层维护了一个Object[] 用于存储对象,默认数组的长度是10。当默认的或者指定的容量不够存储对象的时候,容量自动增长为原来的容量的1.5倍。由于ArrayList是数组实现, 在增和删的时候会牵扯到数组增容, 以及拷贝元素. 所以慢。数组是可以直接按索引查找, 所以查找时较快。
     
List<String> list = new ArrayList<String>();
list.add("tianjia");
//遍历全部元素
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
 String str = (String) iterator.next();
 System.out.println(str);
}



5.2、LinkedList

        LinkedList链表实现, 增删快,查找慢。 LinkedList是链表实现的,在内存中的地址不连续,需要让上一个元素记住下一个元素。所以每个元素中保存的有下一个元素的位置,虽然也有角标,但是查找的时候,需要从头往下找,显然是没有数组查找快的。但是,链表在插入新元素的时候,只需要让前一个元素记住新元素,让新元素记住下一个元素就可以了。所以插入快。

public static void main(String[] args) {
    LinkedList list = new LinkedList();
    list.add("aa");
    list.add("bb");
    list.add("cc");
    Iterator dit = list.descendingIterator();
    while (dit.hasNext()) {
        System.out.println(dit.next());
    }
}



5.3、Vector

       java.util.vector提供了向量类(vector)以实现类似动态数组的功能。描述的是一个线程安全的ArrayList。ArrayList是单线程效率高,Vector是多线程安全的,所以效率低。

Vector<String> vector = new Vector<String>(10);
vector.add("test1");
vector.add("test2");
Iterator<String> iterator = vector.iterator();
while(iterator.hasNext()){
   String string = (String) iterator.next();
   System.out.println(string);
}




6.1、HashSet

        HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。对于 HashSet 而言,它是基于 HashMap 实现的,HashSet 底层采用 HashMap 来保存所有元素。HashSet存储元素的顺序并不是按照存入时的顺序是按照哈希值来存的所以取数据也是按照哈希值取得。


public static void main(String[] args) {    
      Set<Comparable> hs = new HashSet<Comparable>(6);
      
      hs.add("abc");
      hs.add(new Date());//在HashSet里增加日期对象
       hs.add(new Integer(12));
      
      Iterator<Comparable> it = hs.iterator();
      while(it.hasNext()){ 
         System.out.println(it.next()); 
      } 
   }
}



6.2、TreeSet

       是一个有序的二叉树,那么同理TreeSet同样也是一个有序的,它的作用是提供有序的Set集合。
/排序
public static void main(String[] args) {
    String str = "8 10 15 5 2 7";
    String[] strs = str.split(" ");
    TreeSet ts = new TreeSet();
    for (int x = 0; x < strs.length; x++) {
        int y = Integer.parseInt(strs[x]);
        ts.add(y);
    }
    System.out.println(ts);
}




7、Map集合结构

 ---| Map  接口    将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
             ---| HashMap  采用哈希表实现,无序
             ---| TreeMap   可以对健进行排序



7.1、Map集合方法

添加:
1、V put(K key, V value)    (可以相同的key值,但是添加的value值会覆 盖前面的,返回值是前一个,如果没有就返回null)                                          
2、putAll(Map<? extends K,? extends V> m)  从指定映射中将所有映射关 系复制到此映射中(可选操作)。
删除:
1、remove()    删除关联对象,指定key对象

2、clear()         清空集合对象

获取: value get(key); 可以用于判断键是否存在的情况。当指定的键不存在的时候,返 回的是null。

判断:
1、boolean isEmpty()   长度为0返回true否则false
2、boolean containsKey(Object key)  判断集合中是否包含指定的key
3、boolean containsValue(Object value)  判断集合中是否包含指定的value

4、长度:Int size()




7.2、HashMap

       HashMap实现了Map接口,Map接口对键值对进行映射。HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。

Map<String,String> map = new HashMap<String,String>();
map.put("1", "张三");
map.put("2", "李四");
map.put("3", "王五");
//使用for循环遍历
for (Map.Entry entry :map.entrySet()){
    System.err.println(entry.getKey()+":"+entry.getValue());
}



7.3、TreeMap

        TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使,TreeMap的实现是红黑树算法的实现,TreeMap 非线程安全。







Kylin系统离线环境下的dpkg依赖包高效部署指南 本文详细介绍了在Kylin系统离线环境下高效部署dpkg依赖包的完整方案,包括预下载依赖包、构建本地APT仓库以及高级故障排查技巧。通过实战经验和优化建议,帮助用户解决依赖地狱问题,提升部署效率,特别适用于银河麒麟V10等内网环境。 阅读详情

相关推荐

Box2D-Lite源码阅读笔记(2)

0.初始化函数 static void InitDemo(int index) { world.Clear(); numBodies = 0; numJoints = 0; bomb = NULL; demoIndex = index; demos[index](bodies, joints); } 在这个初始化函数中,一般会默认执行index=0的函数,这个函数就是一个示例,因为示例比较简单,所以也便于研究,示例效果如下。 就是一个方块。 进入第一个示例函数。(忽略我加的注释)

ARTELE的博客 977

Contains() different in ArrayList and HashSet

function contains() is defined in Collection, so List, Set,Queue all have this function. But the point is that the efficiency is different. ArrayList from the source code, we know that the ArrayList is implement by a object[] transient Object[] elementDat

这个妖姬有点秀 416

宏基因组功能注释实战:从CAZyme到VFDB的完整流程(含数据库下载与脚本优化)

本文详细介绍了宏基因组功能注释的完整流程,涵盖CAZyme、eggNOG、CARD和VFDB四大核心数据库的实战应用。从环境配置、数据库下载与预处理到注释流程执行与优化,提供了全面的操作指南和脚本优化建议,帮助研究人员高效完成宏基因组数据分析。特别针对CAZyme注释等关键步骤给出了参数优化方案和常见问题排查方法。

weixin_29289821的博客 298

ArrayList的contains()方法的性能问题及优化方法

  今天在项目性能测试过程中发现,某处代码通过ArrayList的contains()方法来检查某个给定值是否存在于该ArrayList中的性能非常低(该ArrayList中有10万个元素)。然后开始着手对其进行优化,下面主要介绍ArrayList的contains()方法的实现原理,以及优化后用来代替ArrayList的HashSet的contains()方法的实现原理,最后通过实例进行验证优化...

一亩三分地 3万+

单细胞marker基因表达密度图-(还有一个包装函数)

我们借助Nebulosa,将上面的过程包装为一个函数,还是那句话,受累麻烦的事我们来解决,您轻松即可,先看看函数参数:需要注意的是,如果你只想框选某一类celltype,理想模式是这群celltype是单独聚类的,没有散落在其他类群,否则将会全部框选,效果不好,建议使用AI/PS添加。需要注意,这里我算是投机取巧了,用了一个和这个作图毫无关系的包ggnetwork,主要的目的是用他的theme_blank()主题,一次性将所有清空,当然也可以自己慢慢写,不过有现成的,为啥不用呢?这质感不就上去了嘛。

qq_42090739的博客 1372

道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价

SAP HANA 之引入,使 ABAP 于处理大数据,云计算等新兴领域,展现新的生命力,如老吾老以及人之老,幼吾幼以及人之幼,扩展其在信息技术领域的应用,以涵养更广之需。ABAP 能以数据为基,流转于系统之中,如道法自然,顺应企业之生态,助之以高效运转,减少冗杂,简化管理,使企之运营,如小国寡民,无为而治。然 ABAP 如老树盘根,更替不易,面对新兴技术,如云计算、大数据等,其更新之速,未能与时俱进。如水之于渊,柔而能胜刚,ABAP 之发展,顺时而动,应需而变,其在编程领域,犹如道之于万物,渐不可或缺矣。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1031

java contains效率_List与Set的contains方法效率问题

今天看到网上一篇文章说:Set检索元素效率低下,删除和插入效率高;List查找元素效率高,插入删除元素效率低。于是想到List虽然用get(index)方法查询效率高,但是若用contains方法查询对象元素,Set集合应该比List效率要高,下面是实验证明操作过程。实体类:packagemytest.testListAndSet;public classStudent {privateInteg...

weixin_39771260的博客 655

ISP 芯片作为独立设备节点的驱动实现要点:多平台结构差异与工程部署策略解析

随着 ISP(Image Signal Processor)从 SoC 集成形态向独立芯片模块演进,在多摄系统、高动态场景、AI 图像前处理等需求下,ISP 作为单独设备节点进行驱动设计已成为主流趋势。尤其在多 SoC 平台(如高通、联发科、展锐、Rockchip)中,不同厂商对 ISP 的抽象方式与驱动接口处理存在显著差异。本文以实际工程为基础,从 Linux 内核下的设备注册流程、media\_entity 配置、VideoDevice 分配、数据 DMA 管理、与 sensor 的流同步控制等关键点展

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1466

Java篇之集合的基础用法

Java基础篇 >集合的基本用法。

qq_50856237的博客 149

ADS基础教程16 - 存档和导入(workspace、cell、view)

选择workspace_Archive目录作为保存workspace归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择cell_Archive目录作为保存cell归档的目录,点击打开进行目录选择,点击Finish保存目录。,选择view_Archive目录作为保存view归档的目录,点击打开进行目录选择,点击Finish保存目录。(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…(2)在弹框中,可以选择点击Select将参考的条目添加进来,然后点击Next…

XZ_ZC的博客 3710

基于Python的雪球网投资组合数据爬取与分析实战:从入门到精通

在当今数字化投资时代,数据已成为投资者最重要的资产之一。雪球网作为中国领先的投资社交平台,汇聚了大量优质的投资组合数据,这些数据对于量化投资研究和个人投资决策具有重要价值。本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的雪球网投资组合爬虫,并深入分析获取的数据。投资组合持仓明细及变动历史投资收益率曲线与风险指标投资者操作策略与调仓频率热门行业与个股关注度。

2201_76125261的博客 920

Java基础之集合篇

本篇主要总结JAVA中关于集合相关的基础知识。本篇内容基于网络整理以及自己的总结编辑。在不断的完善补充哦。欢迎小伙伴们在评论区发表留言哦!

小徐的博客 1097

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1633

java中 先进后出的集合_java面试题基础之集合篇

java面试题基础之集合篇1、ArrayList和Vector的区别参考:https://www.cnblogs.com/javaisbest/p/11795444.html2、HashMap和Hashtable的区别二者都是Map的实现类,且底层都是哈希表,他们的区别有以下几点:父类不同:HashMap的父类是AbstractMap,HashTable的父类是Dictionary初始化容量和扩容...

weixin_39615499的博客 860

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JAVA基础篇——集合

JAVA基础,集合,Collection,Map,List,Set

qq_44689664的博客 556

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Java基础篇——集合

1、什么是集合 Java 的集合就像一个容器,用来存储 Java 类的对象。 2、集合与数组的区别 长度:集合长度可变;数组长度固定。 保存对象:集合只能保存引用数据类型;数组既可以保存引用数据类型,又可以保存基本数据类型 元素内容:集合可以保存不同类型的数据(其实在使用中也是保存同一类型的数据,使用泛型限制);数组保存同一类型数据 3、集合包含哪些 包含:List、Set、Map 4、List和Set的区别 有序性:List有序;Set无序。 唯一性:List元素可以重复;S

Flychuer的专栏 747

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

JAVA面试 java基础 集合篇

博主正在准备面试,这是博主根据自己的学习手敲的面试题答案,给大家分享以下,希望可以一起共同进步。

a_blue_ice的博客 1140

java基础之集合篇

1.概述 1.1、什么是集合?有什么用? 数组其实就是一个集合。集合实际上就是一个容器。可以来容纳其它类型的数据。 集合为什么说在开发中使用较多? 集合是一个容器,是一个载体,可以一次容纳多个对象。 在实际开发中,假设连接数据库,数据库当中有10条记录, 那么假设把这10条记录查询出来,在java程序中会将10条 数据封装成10个java对象,然后将10个java对象放到某一个 集合当中,将集合传到前端,然后遍历集合,将一个数据一个 数据展现出来。 1.2、集合不能直接存储基本数据类型,另外

兀行者的博客 352

java集合基础_java基础之集合篇

(一)集合类位于JDK中java.util包中。常用的集合类型分布在java.util.Collection和java.util.Map接口中。 java.util.Collection=>List; java.util.Collection=>Set; java.util.Map;注意:在java的继承中,子类可以继承父类;同样子接口也可以继承父接口,目的是扩充子接口的功能。List...

weixin_35148673的博客 113

java基础篇~Collection集合

文章目录1 集合概述1.1 为什么出现集合类1.2 数组和集合的区别1.3 集合的特点1.4 集合的基础体系结构2 Collection集合2.1 Collection集合的常用方法2.1.1 添加方法2.1.2 删除方法2.1.3 获取方法2.1.4 判断方法2.1.5 交集2.1.6 集合转数组2.1.7 数组转集合3 List集合3.1 List集合的特点3.2 List的特有方法3.2.1 添加方法3.2.2 获取方法3.2.3 删除方法3.2.4 修改方法3.2.5 listIterator迭代器

后山de小猿 885

Java基础篇之集合

集合:

weixin_43657820的博客 276

Java 基础篇之集合

List 集合# List 集合中元素有序、可重复,集合中每个元素都有其对应的索引顺序。 List 判断两个对象相等,只要通过 equals 方法比较返回 true 即可。 看个例子: Copy public class A { public boolean equals(Object obj) { return true; } ...

weixin_30699741的博客 225

java集合基础_java集合基础篇 简单总结

昨天晚上看了编程思想4的持有对象,所以把学到看到的一些记记背背的方面给总结一下。java的容器主要分为两类,一个是实现了接口Collection的一类,还有一个是实现了Map接口的一类。继承Collction接口的主要有List、Set接口还有Queue。Collection继承了Iterator接口,让实现类可以foreach遍历。继承List接口的主要是ArrayList和LinkedList...

weixin_42452328的博客 105

【Java基础】——集合篇

直接加在类后面即可与在类上定义相似,加在接口名后面。但格式:修饰符 <代表泛型的变量> 返回值类型 方法名(参数){ }/*** @param t 传入泛型的参数* @param <T> 泛型的类型* @return T 返回值为T类型* 说明:* 1)public 与 返回值中间<T>非常重要,可以理解为声明此方法为泛型方法。* 2)只有声明了<T>的方法才是泛型方法,泛型类中的使用了泛型的成员方法并不是泛型方法。

qq_45730261的博客 1091
上一篇: java—封装、继承、多态
下一篇: 数据结构—链表的基本操作 子函数的方式
AndyChen9988
博客等级 码龄11年 276粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值