编程小白:第二章,Java容器基础理论知识

二、容器

1. java 容器都有哪些?

List,Map,Set ,Collection ,List ,LinkedList ,ArrayList ,Vector ,Stack ,Set
Map ,Hashtable ,HashMap ,WeakHashMap
数据容器主要分为了两类:
Collection: 存放独立元素的序列。
Map:存放key-value型的元素对。(这对于需要利用key查找value的程序十分的重要!)
从类体系图中可以看出,Collection定义了Collection类型数据的最基本、最共性的功能接口,而List对该接口进行了拓展。
其中各个类的适用场景有很大的差别,在使用时,应该根据需要灵活的进行选择。此处介绍最为常用的四个容器:
LinkedList :其数据结构采用的是链表,此种结构的优势是删除和添加的效率很高,但随机访问元素时效率较ArrayList类低。
ArrayList:其数据结构采用的是线性表,此种结构的优势是访问和查询十分方便,但添加和删除的时候效率很低。
HashSet: Set类不允许其中存在重复的元素(集),无法添加一个重复的元素(Set中已经存在)。HashSet利用Hash函数进行了查询效率上的优化,其contain()方法经常被使用,以用于判断相关元素是否已经被添加过。
HashMap: 提供了key-value的键值对数据存储机制,可以十分方便的通过键值查找相应的元素,而且通过Hash散列机制,查找十分的方便。

 

2.Collection 和 Collections 有什么区别?

Collcetion是一个集合接口,它提供了对集合对象进行基本操作的通用接口方法。实现该接口的类主要有List和Set,该接口的设计目标是为各种具体的集合提供最大化的统一操作方式。

Collections是针对集合类的一个包装类,它提供了一系列的静态方法以实现对各种集合的搜索、排序、线程安全化等操作,其中大多数方法都是用来处理线性表。 Collections类不能实例化,如同一个工具类,服务于Collection

 

3.List、Set、Map 之间的区别是什么?

 

List的元素以线性的方式存储,可以存放重复的对象

Set的中的对象不按特定的方式排序,无序(实际上由HashCode决定),没有重复的对象

Map是一种把键对象和值对象映射的集合,它的每一个元素都包含一个键对象和值对象

不能存放重复的对象

 

4.HashMap 和 Hashtable 有什么区别?

1,继承的父类不同

Hashtable继承的自dictionary类,而hashMap继承自abstractMap类。但是二者都实现了map接口。

2,线程安全性不同

Hashtable是线程安全的,它的每一个方法都加了一个Synchronize

 HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。

3.是否提供contains方法

hashMapHashtable中的contains方法去掉了,改成了containsValue和containsKey

Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同

4.key和value是否允许null值

hashMap和Hashtable中的对象,都不允许存在重复的key值,但是可以包含重复的value值

Hashtable中的,key和value都不允许出现null值,hashMap中,null值可以作为键,这一样的键

只允许有一个,可以有一个或多个键对应的是null值

 

5.如何决定使用 HashMap 还是 TreeMap?

HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的

HashMap:适用于在Map中插入、删除和定位元素。 
TreeMap:适用于按自然顺序或自定义顺序遍历键(key)。 

 

6.ArrayList 和 LinkedList 的区别是什么?

Array 的容量是固定的,ArrayList 的容量是根据需求自动扩展

ArrayList 提供了 添加、插入或移除 某一范围元素的方法

而 Array 中,只能一次获取或设置一个元素值

ArrayList 它的底层是一个数组,它的查询效率快

LinkedList底层是一个链表,所以增加,删除的效率快

 

7.如何实现数组和 List 之间的转换?

List转数组:toArray(arraylist.size()方法

数组转List:Arrays的asList(a)方法

 

8.ArrayList 和 Vector 的区别是什么?

  1. 同步性:
    Vector是线程安全的,也就是说是它的方法之间是线程同步的,而ArrayList是线程序不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用Vector,因为不需要我们自己再去考虑和编写线程安全的代码。
  2. 数据增长:
    ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。ArrayList与Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

 

9.Array 和 ArrayList 有何区别?

Array 的容量是固定的,ArrayList 的容量是根据需求自动扩展

ArrayList 提供了 添加、插入或移除 某一范围元素的方法

而 Array 中,只能一次获取或设置一个元素值

 

 

10.在 Queue 中 poll()和 remove()有什么区别?

Queue 中 remove() 和 poll()都是用来从队列头部删除一个元素。
在队列元素为空的情况下,remove() 方法会抛出NoSuchElementException异常,

新的poll() 方法只会返回 null

 

11.哪些集合类是线程安全的?

vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。

statck:堆栈类,先进后出

hashtable:就比hashmap多了个线程安全

enumeration:枚举,相当于迭代器

 

12.Iterator 怎么使用?有什么特点?

Iterator遍历集合元素的过程中不允许线程对集合元素进行修改,否则会抛出ConcurrentModificationEception的异常。

Iterator遍历集合元素的过程中可以通过remove方法来移除集合中的元素。

Iterator必须依附某个Collection对象而存在,Iterator本身不具有装载数据对象的功能。

Iterator.remove方法删除的是上一次Iterator.next()方法返回的对象。

强调以下next()方法,该方法通过游标指向的形式返回Iterator下一个元素。

 

13.Iterator 和 ListIterator 有什么区别?

1. ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

2. ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator却不可以。

 3. ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

 4. 都可实现删除对象,但是ListIterator借助set()方法可以实现对象的修改。Iierator仅能遍历,不能修改。

因为ListIterator的这些功能,可以实现对LinkedList等List数据结构的操作。其实,数组对象也可以用迭代器来实现。

org.apache.commons.collections.iterators.ArrayIterator就可以实现此功能。一般情况下,使用Iterator就可以了,如果需要进行记录的前后反复检索的话,就可以使用ListIterator来扩展功能,(有点象JDBC中的滚动结果集)。

 

 

# 高校智慧校园解决方案摘要 智慧校园解决方案是针对高校信息化建设的核心工程,旨在通过物联网技术实现数字化校园的智能化升级。该方案通过融合计算机技术、网络通信技术、数据库技术和IC卡识别技术,初步实现了校园一卡通系统,进而通过人脸识别技术实现了更精准的校园安全管理、生活管理、教务管理和资源管理。 方案包括多个管理系统:智慧校园管理平台、一卡通卡务管理系统、一卡通人脸库管理平台、智能人脸识别消费管理系统、疫情防控管理系统、人脸识别无感识别管理系统、会议签到管理系统、人脸识别通道管理系统和图书馆对接管理系统。这些系统共同构成了智慧校园的信息化基础,通过统一数据库和操作平台,实现了数据共享和信息一致性。 智能人脸识别消费管理系统通过人脸识别终端,在无需接触的情况下快速完成消费支付过程,提升了校园服务效率。疫情防控管理系统利用热成像测温技术、视频智能分析等手段,实现了对校园人员体温监测和疫情信息实时上报,提高了校园公共卫生事件的预防和控制能力。 会议签到管理系统和人脸识别通道管理系统均基于人脸识别技术,实现了会议的快速签到和图书馆等场所的高效通行管理。与图书馆对接管理系统实现了一卡通系统与图书馆管理系统的无缝集成,提升了图书借阅的便捷性。 总体而言,该智慧校园解决方案通过集成的信息化管理系统,提升了校园管理的智能化水平,优化了校园生活体验,增强了校园安全,并提高了教学和科研的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值