JAVA 集合框架简介

1. JAVA 集合框架主要分三部分, set , list 和 Map

(1)List 列表

特点:列表中的元素可重复,  元素有先后顺序

list 存储以及相关实现类, 如图:

 继承list接口的类主要有 LinkedList, Vector, ArrayList。

其中 vector 和 ArrayList底层是数组结构,两者的区别在于 Vector中的方法使用了synchronized 关键字来修饰, 这个关键字是需要等待线程的,从而vector 中的方可以使法线程安全。但同时影响了程序性能, Arraylist则反之,线程不安全,但是性能较高。 而在使用中vector几乎不使用了,因为性能低,对于线程安全, Arraylist 也可以做到,使用List list = Collections.synchronizedList(new ArrayList(...)) 可以是List 变成线程安全。

而LinkedList 和 Arraylist的区别在于底层结构的不同, Arraylist 底层是数组结构,LinkedList是链表结构, 所以两者的区别就在于数组和链表的特性,数组结构:插入和删除的速度比较慢但是查询比较快。而链表结构:插入和删除的速度比较快但查询速度比较低。至于怎样使用看具体情况。PS LinkedList也没有用synchronized关键字来修饰

List常用方法

boolean   add(E e)向列表尾部添加知道元素

void         add(int index, E element)在列表指定位置插入指定元素

void         clear()从列表中移除所有元素

E              get(int index)返回列表中指定位置的元素

int             hasCode()返回列表中的哈希码值

int             indexOf(Object o)返回此列表中第一次出现的指定元素的索引

boolean    isEmpty()如果列表不包含元素则返回true

Iterator      iterator()返回按适当顺序在列表的元素上进行迭代的迭代器

E               remove(int index)移除列表中的指定元素位置

int              size()返回列表中的元素数量

object[]      toArray()返回按是的的顺序包含列表中的所有元素的数组

 (2)Set 集合

特点:元素不可重复,且元素没有顺序

Set 存储以及相关实现类, 如图:

 那Set是如何去判断两个对象是否重复呢,Set是通过Equals来判断两个对象是否相等,而不是通过==来判断。(简单来讲equals是判断内容是否相同,==是通过栈内存存放在堆内存的地址来判断是否相同)。

set接口的常用实现类有hashSet,linkedHashSet和TreeSet。hasSet底层采用的是哈希表算法,其底层测试个数组,查询操作速度较快,对少量数据做插入操作较快,数据越多,插入操作性能越低(空间复杂度和时间复杂度)。当使用hasSet做一个插入操作,它是怎样一个流程呢?1.显示判断该对象的hascode值。如果hascode值与hasSet已有数据不同,则直接把给对象放到hascode的指定位置。如果hascode值相同,即该hascode位置上已经有数据了。 则判断这两个数据的equals是否相同,如果equals相同则表示要插入的数据和已有数据是同一个数据,不保存在哈希表中,反之则表示不是同一个数据,则会存在该hascode值的同槽位的链表上

LinkedHashSet类它不允许元素重复,但是能记录元素添加的顺序。因为它有哈希表的属性和链表的属性。

TreeSet类使用的是红黑树算法(不太了解),对存储的元素会自然排序(从小到大),不保证元素添加的先后顺序,红黑树中的元素的数据类型需要一致,否则报错。判断两个元素是否重复同过方法CompareTo,红黑树算法善于做范围查找

Set的常用方法

boolean        add(E e)如果set中尚未存在指定的元素,则添加此元素

void              clear()移除此set中的所有元素

boolean        contains(object o)如果set包含指定的元素,则返回true

boolean        equals(object o)比较指定对象与此set的相等性

int                 hashCode()返回Set的哈希码值

boolean        isEmpty()如果set不包含元素则返回true

Iterator<E>   iterator()返回在此Set中的元素上迭代的迭代器

boolean        remove(object o)移除set中存在的指定元素

int                 size()返回set中的元素数量

object[]         toArray()返回一个包含set中所有元素的数组

 

Map

特点: key-value 键值对。其中key是唯一的不可重复的,value是可重复的,一个Key只能对应一个value,但一个value可以对应多个key。可以理解key是一个set集合,而value是一个list集合。

Map存储以及相关存储类,如图

从这几个实现类可以看出,和Set的几个常用实现类差不多,故 HashMap采用的是哈希表算法,不会保存Key添加的顺序,key也不允许重复,判断标准与hasSet一致即key的equals和hascode。LinkedHashMap 采用链表和哈希算法,Key不允许重复但会记录先后的添加顺序,TreeMap。采用红黑树算法,key会自然排序,不允许重复,重复标准与HashMap相同。

Map中的常用方法

void             clear()从此映射中移除所有映射关系

boolean       containsKey(object key)如果此映射包含指定键的映射关系,则返回true

boolean       containsValue(object value)如果此映射将一个或多个键映射到指定值,则返回true

boolean       equals(object o)比较指定的对象与映射是否相等

v                  get(object key)返回指定所映射的值,如果此映射不包含该间的映射关系,则返回Null

int                hashCode()返回此映射的哈希码值

boolean       isEmpty()如果此映射未包含键值对映射关系则返回true

set<K>        keySet()返回此映射中包含的建的Set集合

V                 put<K key, V value>将指定的值与映射中的指定值关联

V                 remove(object key)如果存在一个建的映射关系,则将其从此映射中移除

int                size()返回此映射中的键值对映射关系数量

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值