泛型、collection、collections工具类

泛型、collection、collections工具类,第1张

泛型、collection、collections工具类 泛型

泛型的本质是参数化类型,也就是说所 *** 作的数据类型指定为一个参数,这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。

泛型好处是安全简单,传参数时,限制类型,取值时不需要强制转换。

没有泛型之前,强制类型转换,系统可能抛出一个ClassCastException异常信息

又来泛型之后,我们可以在编译阶段就发现异常的类型问题。

泛型方法,是在调用方法时候指明泛型的具体类型,

public与返回值类型中间的< T>是声明此方法的泛型方法。

在泛型类中声明使用泛型的方法无需再声明泛型,

泛型接口与泛型类完全相同,知识泛型接口没有方法体

类型通配符就是一个”?“,代替具体的参数类型,是实参不是形参

不是在声明泛型类、泛型接口的地方用的,是在创建对象时指定的

泛型是java1.5版本才引进的概念,在这之前没有泛型,但是,泛型代码能够很好的和之前版本的代码兼容,原因是泛型只存在代码编译阶段,在进入JVM之前,泛型相关的信息会被擦出掉,我们称之为--类型擦除。

集合

如果并不知道程序运行时会需要多少对象,或者需要更复杂方式储存对象--可以使用java集合框架。java集合框架相当于数组的增强版本,可以实现数组不能实现的功能。

面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的 *** 作,就对对象进行存储,集合就是存储对象最常用的一种方式。

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

集合类的特点,集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

collection接口

List:元素存取是有序的,可存放重复的元素,元素都有下标(索引)

Set:元素存取是无序的,不可存放重复的元素,元素没有下标(索引)

Queue:队列,实现先进先出。

add(添加)将制定的元素添加到collection中

remove(删除)从集合中删除指定元素

contains(判断)如果集合中包含该元素,返回true

size(获得)获取元素中的个数,相当于数组中的length属性

集合的通用遍历方法有以下几种:普通for语句,增强for语句,使用迭代器遍历

List接口实现类

List所代表的是有序的collection,位于java.util.list下,实现类:

ArrayList:线程不安全,底层使用数组实现,可变长度,查询速度快,增删慢。

linkedList:链表结构,底层使用链表实现,可变长度,查询速度慢,增删快。

Vector:底层使用数组实现,线程安全,但速度慢,已被arraylist取代。

Stack:先进后出,底层调用Vector类中的方法,数组实现

arraylist构造方法:public arraylist(){}构造一个空列表,默认长度。

因为arraylist列表有序而且有索引,可以使用普通for语句。

Set接口实现类

一个不包含重复元素的collection,位于java.util.Set下,Set接口方法与collection方法一致

Set接口中常用的子类:

HashSet:底层调用Hashmap中的方法,集合元素唯一,不保证迭代顺序,线程不安全(不同步),存取速度快。

Treeset:Treeset中元素不重复,并能按照指定顺序排序,存储的对象必须实现comparable接口。线程不安全(不同步)

linkedhashset:哈希表和链表实现的set接口,元素唯一,保证迭代顺序。

hashset特点:

无序不重复,无索引。

默认不重读的是虚地址,要想内容不重复,就重写hashcode和equals方法实现,

底层是HashMap实现,hashmap底层是由数组+链表+红黑树实现。

hashset堪称查询速度最快的集合,因为其内部以hashcode来实现的。

无索引,无法使用普通for语句,可以使用增加for语句和迭代器来循环。

造成内存泄漏的原因:hashset的remove方法也依赖于哈希值进行待删除节点定位,如果由于集合元素内容被修改而导致hashcode方法的返回值发生变更,remove就无法定位到原来的对象,就会导致内存泄漏。

Treeset特点:

无序不重复,但是排序,线程不安全(不同步)。底层基于Treemap实现。

使用元素的自然顺序(字典顺序)进行排序。

使用比较器进行排序

除了基本方法外还有first跟last方法

Map接口

位于java.util.Map下,类型参数:K(key)--此映射所维护的键的类型 V--映射值的类型添加

将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值,Value的值可以相同

map存储的是键值对,必须保证键是唯一的,没有继承collection

Map集合常用类:

HsahMap:线程不安全,速度快,允许存放null键,null值。无序的

linkedhashmap继承hashmap,它主要是用链表实现来扩展hashmap类

Hashtable:线程安全,速度慢,不允许存放nulll键,null值,已被Hashmap替代。

Concurrenthashmap:线程安全并且高效的hashmap

Treemap:对键进行排序,排序原理与treeset相同

put:将制定的值与此映射中的指定的键关联

clear:从此映射中移除所有映射关系

remove:如果存在一个键的映射关系,则将其从此映射中移除

HashMap

hashmap特点:

底层实现1.7之前:数组+链表 1.8以后:数组+链表+红黑树

key不允许重复,如果key的值相同,后添加的数据就会覆盖之前的数据

hashmap是非线程安全的

linkedhashmap

linkedhashmap继承hashmap,它主要是用链表实现来扩展hashmap类

linkedhashmap中条目没有顺序的

linkedhashmap中元素按照它们插入的顺序排序

linkedhashmap里的方法跟hashmap没有什么不同

ConcurrentHashMap

ConcurrentHashMap是线程安全并且高效的hashmap

常用方法跟数据结构同hashmap

TreeMap

TreeMap特点:可以对map集合中的元素进行排序

TreeMap基于红黑树数据结构的实现

键可以使用comparable或comparator接口,重写compareTo方法排序

自定义类的必须实现接口和重写方法否则抛出异常

Properites

Properites类继承与hashtable

Properites间接的实现了map接口

在实际应用中,常用Properites类对属性文件进行处理eg:数据库账号及密码

键值对都是字符串

Collections工具类

Collections类也提供了sort()方法对集合内部中的元素按照元素的自然排序方式进行排序

集合框架中的新工具太多是非同步的,如果在并发环境中直接访问可能会导致各种问题,而Vector、Hashtable等老旧工具还继续保留的主要原因是维持向下兼容,因此我们希望能够获取新的集合工具的线程安全版本,而Collections工具类则为我们提供了这方面的支持。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5708037.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存