Java集合

概念


一个用于存储和获取数据的容器,其由来是:我们所学习的编程语言是面向对象的,面向对象的编程语言对事物的描述都是通过对象来体现的,为了方便对多个对象进行操作,我们就必须把对个对象进行存储,而要想存储多个对象而不是我们之前所存储的基本变量,所以应该找一容器类型的变量。而Stringbuilder只能存字符串,数组的长度有限制,所以都无法满足我们的需求,所以Java就提供了集合类来供我们使用。

1、集合的体系结构

2、单列集合

Collection:最基本的集合接口,单列集合的顶层接口。Collection表示一组对象,这些对象也称为collection的元素。JDK不提供该接口的直接实现,而它提供更具体的子接口实现。创建Collection集合的对象,我们采用的是多态的方式。

成员方法

boolean remove(Object o):从集合中移除元素boolean add(E e):添加元素

void clear():清空集合中的元素

boolean contains(Object o):判断集合中是否存在指定的元素

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

2.1、List接口

有序的 collection(也称为序列)。此接口的用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。与 set 不同,列表通常允许重复的元素。

List集合的特点

            A:有序(存储和取出元素的顺序一致)

            B:存储的元素可以重复

常用实现类:

ArrayList:底层数据结构是数组,查询快,增删慢,线程不安全,效率高,允许存储重复元素

LinkList:底层数据结构是链表,查询慢,增删快,线程不安全,效率快,允许存储重复元素

Vector:底层数据结构是数组,查询快,增删慢,线程安全,效率低,允许存储重复元素

 

2.2、Set接口

Collection的子接口,Set接口定义了一种规范,表示该容器不记录元素的添加顺序,没有索引,也不允许元素重复。

Set集合的特点:

A:不允许元素重复

B:不会记录元素的添加先后顺序,不能使用普通的for循环遍历,只能使用增强的for循环和迭代器遍历。

常用实现类:

A:HashSet类:其不保证set的迭代顺序,不保证该顺序恒久不变.底层采用哈希表实现,可以存储null元素,元素的唯一性是靠所存储元素类型是否重写hashcode()和equals()方法保证的,如果没有重写就无法保证元素的唯一性。

B:TreeSet类:底层采用红黑树实现,可以对集合中的元素排序

 

3、双列集合

双列集合是每个元素都有键与值两部分组成的集合,记录的是键值对对应关系,即通过键可以找到值,键必须是唯一,值可以重复,Map集合为双列集合的根接口,其没有继承Collection接口。

Map集合的常用方法:

  1. V put(K key,V value):添加元素
  2. V remove(Object key):根据键删除键值对元素
  3. void clear():移除所有的键值对元素
  4. boolean containsKey(Object key):判断集合是否包含指定的键
  5. boolean containsValue(Object value):判断集合是否包含指定的值
  6. boolean isEmpty():判断集合是否为空
  7. int size():返回集合中的键值对的对数

常用实现类:

HashMap

底层是基于哈希表算法,Map中存储的key对象和HashCode值决定了在哈希表中存储的位置,因为Map中的key是Set,所以不能保证添加的先后顺序,也不允许重复。

HashMap的特点

  1. HashMap是异步的,因此HashMap中的对象不是线程安全的
  2. HashMap最多只有一个key值为null,但是可以多个value值为null
  3. 作为key的对象必须实现hashCode和equals方法

TreeMap

TreeMap底层的key是基于红黑树,因为Map中的key也是一个Set集合,所以不能保证添加的先后顺序,且也不允许重复,因为Map中存储的key会默认使用自然排序(从小到大),和TreeSet一样,除了可以使用自然排序也可以自定义自己的排序

 

4、遍历

方式:普通for、迭代器、增强for

普通for循环是List方法特有的,因为他是有索引,有序的。List集合特有的ListIterator可以实现逆向遍历,但是要求先正向遍历,才能逆向遍历,因此也不常用。迭代器是所有集合都可用的。

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值