java学习总结-java集合详解与总结--ZT

1.1. 集合 集合对象:用于管理其他若干对象的对象 数组:长度不可变 List: 有顺序的,元素可以重复 遍历:for 迭代 排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Vector: 底层用数组实现List接口的另一个类 特点:重量级,占据更多的系统开销 线程安全 Set:无顺序的,元素不可重复(值不相同) 遍历:迭代 排序:SortedSet HashSet:采用哈希算法来实现Set接口 唯一性保证:重复对象equals方法返回为true 重复对象hashCode方法返回相同的整数 不同对象 哈希码 尽量保证不同(提高效率) SortedSet:对一个Set排序 TreeSet:在元素添加的同时,进行排序。也要给出排序规则 唯一性保证:根据排序规则,compareTo方法返回为0,就可以认定两个对象中有一个是重复对象。 Map:元素是键值对 key:唯一,不可重复 value:可重复 遍历:先迭代遍历key的集合,再根据key得到value HashMap:轻量级 线程不安全 允许key或者value是null Hashtable:重量级 线程安全 不允许key或者value是null Properties:Hashtable的子类,key和value都是String SortedMap:元素自动对key排序 TreeMap: 集合是指一个对象可以容纳了多个对象(不是引用),这个集合对象主要用来管理维护一系列相似的对象。 1.1.1. 集合接口类层次 位于package java.util.*; Collection ↑ |ˉˉˉˉˉˉ| Set List Map ↑ ↑ | | SortedSet SortedMap 1) Set: 集合类中不允许有重复对象; 2) SortedSet: 和Set接口同,但元素按升序排列; 3) List: 元素加载和移出时按照顺序,可以保存重复对象。 4) Map: (key-value对)存储了唯一关键字辨识和对应的值。 5) SortedMap: 和Map类同,但对象按他们关键字的升序排列。 1.1.2. 集合类层次 (注:JAVA1.5对JAVA1.4的最大改进就是增加了对范型的支持) Collection ↑ |ˉˉˉˉˉˉ| HashSet LinkedList Hashtable (Set) Vector, ArrayList Hashmap (List) (Map) ↑ ↑ | | TreeSet TreeMap (SortedSet) (SortedMap) Collection接口的方法: add(Object o) addAll(Collection c) contains(Object o) containsAll(Collection c) remove(Object o) removeAll(Collection c) clear() equals(Object o) isEmpty() iterator() size() toArray() toArray(Object[] o) 1.1.3. 五个最常用的集合类之间的区别和联系 1.ArrayList: 元素单个,效率高,多用于查询 2.Vector: 元素单个,线程安全,多用于查询 3.LinkedList:元素单个,多用于插入和删除 4.HashMap: 元素成对,元素可为空 5.HashTable: 元素成对,线程安全,元素不可为空 ArrayList 底层是Object数组,所以ArrayList具有数组的查询速度快的优点以及增删速度慢的缺点。 而在LinkedList的底层是一种双向循环链表。在此链表上每一个数据节点都由三部分组成:前指针(指向前面的节点的位置),数据,后指针(指向后面的节点的位置)。最后一个节点的后指针指向第一个节点的前指针,形成一个循环。 双向循环链表的查询效率低但是增删效率高。 ArrayList和LinkedList在用法上没有区别,但是在功能上还是有区别的。 LinkedList 经常用在增删操作较多而查询操作很少的情况下:队列和堆栈。 队列:先进先出的数据结构。 栈:后进先出的数据结构。 注意:使用栈的时候一定不能提供方法让不是最后一个元素的元素获得出栈的机会。 Vector (与ArrayList相似,区别是Vector是重量级的组件,使用使消耗的资源比较多。) 结论:在考虑并发的情况下用Vector(保证线程的安全)。 在不考虑并发的情况下用ArrayList(不能保证线程的安全)。 面试经验(知识点): java.util.stack(stack即为堆栈)的父类为Vector。可是stack的父类是最不应该为Vector的。因为Vector的底层是数组,且Vector有get方法(意味着它可能访问到并不属于最后一个位置元素的其他元素,很不安全)。 对于堆栈和队列只能用push类和get类。 Stack类以后不要轻易使用。 实现栈一定要用LinkedList。 (在JAVA1.5中,collection有queue来实现队列。) Set-HashSet实现类: 遍历一个Set的方法只有一个:迭代器(interator)。 HashSet中元素是无序的(这个无序指的是数据的添加顺序和后来的排列顺序不同),而且元素不可重复。 在Object中除了有finalize(),toString(),equals(),还有hashCode()。 HashSet底层用的也是数组。 当向数组中利用add(Object o)添加对象的时候,系统先找对象的hashCode: int hc=o.hashCode(); 返回的hashCode为整数值。 Int I=hc%n;(n为数组的长度),取得余数后,利用余数向数组中相应的位置添加数据,以n为6为例,如果I=0则放在数组a[0]位置,如果I=1,则放在数组a[1]位置。如果equals()返回的值为true,则说明数据重复。如果equals()返回的值为false,则再找其他的位置进行比较。这样的机制就导致两个相同的对象有可能重复地添加到数组中,因为他们的hashCode不同。 如果我们能够使两个相同的对象具有相同hashcode,才能在equals()返回为真。 在实例中,定义student对象时覆盖它的hashcode。 因为String类是自动覆盖的,所以当比较String类的对象的时候,就不会出现有两个相同的string对象的情况。 现在,在大部分的JDK中,都已经要求覆盖了hashCode。 结论:如将自定义类用hashSet来添加对象,一定要覆盖hashcode()和equals(),覆盖的原则是保证当两个对象hashcode返回相同的整数,而且equals()返回值为True。 如果偷懒,没有设定equals(),就会造成返回hashCode虽然结果相同,但在程序执行的过程中会多次地调用equals(),从而影响程序执行的效率。 我们要保证相同对象的返回的hashCode一定相同,也要保证不相同的对象的hashCode尽可能不同(因为数组的边界性,hashCode还是可能相同的)。 例子: public int hashCode(){ return name.hashcode()+age; } 这个例子保证了相同姓名和年龄的记录返回的hashCode是相同的。 使用hashSet的优点: hashSet的底层是数组,其查询效率非常高。而且在增加和删除的时候由于运用的hashCode的比较开确定添加元素的位置,所以不存在元素的偏移,所以效率也非常高。因为hashSet查询和删除和增加元素的效率都非常高。 但是hashSet增删的高效率是通过花费大量的空间换来的:因为空间越大,取余数相同的情况就越小。HashSet这种算法会建立许多无用的空间。 使用hashSet类时要注意,如果发生冲突,就会出现遍历整个数组的情况,这样就使得效率非常的低。 1.1.4. 比较 Collections类(工具类―――全是static 方法) Public static int binarySearch(List list,Object key) Public static void Sort(List list,Comparator com) Public static void sort(List list) 方法一: Comparator接口 Int compare(Object a,Object b) Boolean equals(Object o) 例子: import java.util.*; public class Test { public static void main(String[] arg) { ArrayList al = new ArrayList(); Person p1 = new Person("dudi"); Person p2 = new Person("cony"); Person p3 = new Person("aihao"); al.add(p1); al.add(p2); al.add(p3); Collections.sort(al,p1); for(Iterator it = al.iterator();it.hasNext();){ Person p = (Person)it.next(); System.out.println(p.name); } } } class Person implements java.util.Comparator { public String name; public Person(String name){ this.name = name; } public int compare(Object a,Object b){ if(a instanceof Person&&b instanceof Person){ Person pa = (Person)a; Person pb = (Person)b; return pa.name.compareTo(pb.name); } return 0; } public boolean equals(Object a){return true;} } 方法二 Java.lang.Comparable Public int compareTo(Object o) Class Person implements java.lang.Comparable{ Public int compareTo(Object o){ Comparable c1=(Comparable)this; Comparable c2=(Comparable)o; Return c1.name.compareTo(c2.name ); } } ………………………………. } Main 方法中 Collections.sort( list ); *注意:程序员和类库之间是平等的关系,而不是上下级关系,以前的类可以是通过接口调用后来的类 。 集合的最大缺点是无法进行类型判定(这个缺点在JAVA1.5中已经解决),这样就可能出现因为类型不同而出现类型错误。 解决的方法是添加类型的判断。
C#实战:斑马ZT410 RFID打印机集成与ZPL指令深度应用 本文详细介绍了在C#系统中集成斑马ZT410 RFID打印机的完整流程与实战技巧。内容涵盖从驱动安装、SDK引入、USB连接建立,到核心ZPL指令的深度解析,特别是针对中文打印与RFID数据写入(^RFW指令)等关键难点提供了解决方案。文章还分享了将ZPL指令融入C#程序的工程化方法、常见错误排查及状态查询、性能优化等进阶应用,旨在帮助开发者高效完成工业级RFID标签打印功能的开发与集成。 阅读详情

相关推荐

微信Android客户端ZT加密算法逆向分析与实战

在移动应用安全领域,加密算法是保障数据传输与存储隐私的核心技术。其原理基于密码学,通过对明文进行特定变换生成密文,防止未授权访问。自定义加密算法则针对特定业务场景和安全需求进行设计,在性能与安全性之间寻求最佳平衡,常见于对数据安全有极高要求的大型应用中。理解这类算法的实现,对于提升应用安全架构设计能力、进行安全审计和漏洞挖掘具有重要价值。本文以微信Android客户端的自定义加密算法ZT为研究对象,通过逆向工程实战,详细阐述了如何利用Jadx、IDA Pro、Frida等工具链进行静态分析与动态调试,还原其

weixin_42530732的博客 770

java集合详解与总结

1.1. 集合 集合对象:用于管理其他若干对象的对象 数组:长度不可变 List: 有顺序的,元素可以重复  遍历:for 迭代  排序:Comparable Comparator Collections.sort() ArrayList:底层用数组实现的List  特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List  特点:查询效率低,增删

bzhang19841212的专栏 1242

斑马ZT411R RFID打印机JAVA集成实战:免驱调用、ZPL指令生成与状态监控全解析

本文详细解析了斑马ZT411R RFID打印机在JAVA环境下的集成实战,涵盖免驱调用、ZPL指令生成与状态监控等核心功能。通过TCP/IP连接实现高效打印,解决中文处理难题,并分享RFID数据读取与打印机状态监控的最佳实践,助力开发者快速实现工业级打印解决方案。

weixin_33282146的博客 253

Java常见的集合类(集合容器)

集合类型主要有三种:List(列表)、set(集)、map(映射)

Yangyeon_的博客 4255

实战解析:基于Python的APT攻击检测与ATT&CK框架应用

本文通过实战案例,详细解析了如何利用Python编程语言结合MITRE ATT&CK框架,构建一套针对高级持续性威胁(APT)的自动化检测与狩猎系统。文章涵盖了从环境搭建、核心检测逻辑编写、到模块化框架设计与主动威胁狩猎的全过程,为安全从业者提供了可落地的技术方案,以有效应对复杂的网络攻击。

weixin_29044157的博客 389

FRM模型五:Brinson业绩归因

利用Brinson对基金组合业绩进行归因分析。

stonesssssss的博客 3008

Java常用基础知识点总结(最全)

Java基础知识点总结 大纲 一、Java基础(语言、集合框架、OOP、设计模式等) 二、Java高级(JavaEE、框架、服务器、工具等) 三、多线程和并发 四、Java虚拟机 五、数据库(Sql、MySQL、Redis等) 六、算法与数据结构 七、计算机网络 八、操作系统(OS基础、Linux等) 九、其他 ### 一、Java基础(语言、集合框架、OOP、设计模式等) 1. HashMap和Hashtable的区别 Hashtable是基于陈旧的Dictionary的Map接

liuerchong的博客 2万+

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南

本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。

weixin_29278805的博客 625

Collection , List , Set 和 Map 用法和区别

首先看一下他们之间的关系 Collection          接口的接口   对象的集合 ├ List                   子接口      按进入先后有序保存   可重复 │├ LinkedList                接口实现类   链表   插入删除   没有同步   线程不安全 │├ ArrayList                  接口实...

江夏lz的博客 263

DSP在线升级方案:TMS320C6678使用网络或者串口输出升级数据进行固件升级

下面这段先引用创龙的说明 IBL 运行后, 将从 NOR FLASH 或 NAND FLASH 的 0x00080000 地址引导 ELF/BBLOB 格式 用户程序。 当引导 ELF 格式用户程序时, IBL 会解析用户程序头部信息,并根据头部信息 拷贝不同的代码段至指定 CPU 内存地址,然后将 PC 指针跳转至_c_int00, 再运行用户程 序。当引导 BBLOB 格式用户程序时,由于无头部信息, IBL 会将用户程序拷贝至 0x9E000000 (该内存地址为 IBL 代码指定),并将 PC..

ToneChip的专栏,一个传统的嵌入式码农,裸机编程 1943

Apifox CLI + Claude Skills:将接口自动化测试融入ai

基于 Apifox CLI、Claude Code以及Claude Skills组合,实现自然语言触发接口自动化测试。

wwz_0012的博客 599

Map集合、List集合、Array数组基础知识整理

一、Map集合HashMap与HashTable区别:(1)HashMap是非线程安全的,HashTable是线程安全的,HashMap效率比HashTable的要高。(2)HashMap的键和值都允许有null存在,而HashTable则都不行。Map里面的常用方法: Map集合:该集合存储键(K)值(V)对,一对一往里存,而且要保证键的唯一性。     1、添加         put(K k...

没甚麽大不了的博客 5746

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1964

用zt-zip Java库进行zip文件处理

Java 标准库本身自带java.util.zip包,利用该包可以解决zip文件的处理问题。但是该包提供的功能相对底层,想要实现zip文件的处理,需要写一 些代码,该包并没有封装API到调用一个方法就实现了压缩或者解压功能的层次。zt-zip库提供了这种上层的封装,只需要调用一个方法,可以很方便的实 现zip压缩与解压,zt-zip在底层也利用了java.util.zip包。 maven中央仓库里...

扶摇升的IT博客 2819

2024届数字IC秋招-华为机试-数字芯片-笔试真题和答案(三)(含2022年和2023年)

此部分包含华为机试真题,方向是数字芯片,内容详细包括设计、验证、后端等,大部分题目给出参考答案。华为机试都是从题库里抽题目,所以这些题目还是很有参考性的,甚至是完全一样,可以搜到的。(题目内容较多,将分开编写几个文章)A.错误B.正确参考答案:BA.getB.try_getC.peekD.put参考答案:B。

qq_42135020的博客 1917

安装 miniconda linux

安装 miniconda linux

jacke121的专栏 1万+

ZT Exec 使用指南

ZT Exec 是由 ZeroTurnaround 开发的一个强大且易于使用的 Java 应用程序,用于在 Java 应用内部执行外部命令。它提供了对进程管理的高度控制,包括但不限于环境变量设置、工作目录选择以及输入流、输出流和错误流的处理。通过使用 ZT Exec,开发者能够更便捷地集成系统命令或者调用其他可执行文件,增强应用程序的功能性和灵活性。 ## 项目快速启动 要快速启动并使用 ZT...

gitblog_00967的博客 663

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

**ZT进程终结者:稳定与高效的Java进程管理方案**

ZT进程终结者:稳定与高效的Java进程管理方案 项目介绍 在Java开发的世界里,进程管理往往是一个复杂而微妙的环节,尤其当涉及到跨平台的进程终止时。**ZT Process Killer(简称ZPK)**正是为了解决这一痛点而生。这个由零转身公司(ZeroTurnaround)精心打造的开源工具,旨在为开发者提供一个稳定的基础功能库,用于从Java环境中优雅地停止运行中的进程。 无论你的目标是...

gitblog_00092的博客 624

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

[zt]Java容器集合学习心得

在Java中有许多的容器集合。初一看起来有些糊涂,特别是对刚接触Java来说(至少我当初就是这样的)!其实稍微细心,深入一点点就会发现原来一切都是有规律的。我想别的事情也会是如此。        Java中的容器,接口都是由一些接口,抽象类及它们的实现类所组成。而它们全部封装在java.util 包中。 1:Collection接口。        大多数的集合都实现了此接口,

l2cool的专栏 406

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java中使用zt-exec执行多shell/Linux命令,执行日志实时推送前端

在Java中执行Linux命令,日志都是在命令执行完返回,现在用zt-exec实现日志实时同步输出 第一步:maven中引用zt-exec <dependency> <groupId>org.zeroturnaround</groupId> <artifactId>zt-exec</artifactId> <version>1.11</version> </dependency> 第二

weixin_41963652的博客 1480

java 集合 数组-ZT

JAVA数组和JAV集合类的操作如果你做过很多java程序,你可能对java集合类很熟悉,例如:Vector和ArrayList。你可以创建一个集合并向其中增加元素: List lst = new ArrayList(); lst.add(new Integer(37)); 在这个特殊的范例中,一个整型值37用于构造一个Integer封装类对象,然后那个对象被加入到列表。 这个简...

dandfly的专栏 134

java 集合-ZT

浅谈JAVA集合框架 Java提供了数种持有对象的方式,包括语言内置的Array,还有就是utilities中提供的容器类(container classes),又称群集类(collection classes)。集合在java中非常重要,在讨论之前,先来看几个面试中的经典问题。 1 Collection 和 Collections的区别。 2 List, Set, Map是否继承自Co...

dandfly的专栏 125

java zip 压缩 第三方库,zt-zip:一个java 压缩和解压库

ZIP - convenience methodsContinuous IntegrationQuick OverviewThe project was started and coded by Rein Raudjärv when he needed to process a large set of large ZIP archives for LiveRebel internals. Soo...

weixin_28487433的博客 704

zt-exec 项目推荐

zt-exec 是一个开源的 Java 项目,旨在简化从 Java 应用程序中执行外部进程的操作。该项目由 ZeroTurnaround 开发,主要使用 Java 编程语言编写。它提供了一个强大且易于使用的 API,帮助开发者更高效地管理外部进程的执行。 ## 项目核心功能 zt-exec 项目的主要功能包括: 1. **简化进程执行**:通过 `ProcessExecutor` 类,开发者...

gitblog_00106的博客 410

如何学习JAVA(ZT)

很多网友问我学习Java有没有什么捷径,我说“无他,唯手熟尔”。但是我却很愿意将 自己学习的一些经验写出来,以便后来者少走弯路,帮助别人是最大的快乐嘛! 要想学好Java,首先要知道Java的大致分类。我们知道,自从Sun推出Java以来,就力图 使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE, 这也就是Sun ONE(Open Net Environ

Mark Leung的学习总结 1443
上一篇: java 集合 数组-ZT
下一篇: struts1 和2 的比较--ZT
dandfly
博客等级 码龄17年 1粉丝 45原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值