集合的理解

首先,集合是用来干嘛的呢?

集合和数组一样,是用来存储数据的。

我们知道Java是一门面向对象的编程语言。我们在编程时自然需要存储对象的容器。数组当然可以满足这个需求,但是数组的长度是固定的,存储的是某一类型的数据,具有局限性,而数组可以自动扩容,可以存储任何类型的数据。因此,集合就诞生了!

1.collection集合

集合父接口,有两个子接口,list集合和set集合,

Collection接口是单列集合的最顶层接口,定义了一些通用的方法。

add(E e)添加元素; clear()清空元素; remove(E e)移除元素; size()元素数量;

toArray()集合转数组; contains(E e)判断元素是否存在; isEmpty()判断集合是否为空。

2.0List集合

List集合是collection集合的子接口,其特点是存储元素数据有序可以重复。有两个子接口分别为Arraylist和Linkedlist,其常用的方法有

boolean add(int index, element);在指定的位置添加指定的数据

E remove (int index);通过索引删除指定元素

E set(int index, E element);在指定的位置添加指定的元素,并返回替换掉的元素

E get(int index);通过下标索引取出指定位置上的元素

int indexOf(object o);获取指定元素在集合中的下标

LIst<> subList(startindex, endIndex);截取集合,下标是截取开始位置,不包括结束位置。

2.1ArrayList集合特点

数据结构:数组; 

特点:查询快,增删慢,主要用于查询遍历数据,为最常用集合之一;

底层分析:数组结构是有序的元素序列,在内存中开辟一段连续的空间,在空间中存放元素,每个空间都有编号,通过编号可以快速找到相应元素,因此查询快;数组初始化时长度是固定的,要想增删元素,必须创建一个新数组,把源数组的元素复制进来,随后源数组销毁,耗时长,因此增删慢。

2.2LinkedList集合

数据结构:双向链表;

特点:查询慢,增删快;

底层分析:链表分为单向和双向,就是一条链子和两条链子的区别;多出的那条链子记录了元素的顺序,因此单向链表结构无序,双向链表结构有序;链表结构没有索引,因此查询慢;链表的增删只需在原有的基础上连上链子或切断链子,因此增删快。


3.0Set集合

set集合也是collection集合的子接口,存储数据特点是无序不可重复。有两个子接口分别为hashset和TreeSet集合,其仓用的方法和list集合方法大致相同。

3.1 HashSet

内部存储机制

当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode方法来得到该对象的hashCode值,然后根据该hashCode值决定该对象在HashSet中的存储位置。如果有两个元素通过equals方法比较true,但它们的hashCode方法返回的值不相等,HashSet将会把它们存储在不同位置,依然可以添加成功。
也就是说。HashSet集合判断两个元素的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode方法返回值也相等。

靠元素重写hashCode方法和equals方法来判断两个元素是否相等,如果相等则覆盖原来的元素,依此来确保元素的唯一性
3.2TreeSet集合

底层是依赖二叉树进行存储的,默认整形为从小到大排序

TreeSet支持两种排序方法:自然排序和定制排序,

自然排序

TreeSet会调用集合元素的compareTo(Objec obj)方法来比较元素之间的大小关系,然后将集合元素按升序排列,这就是自然排序。

Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现该接口的类必须实现该方法,实现了该接口的类必须实现该方法,实现接口的类就可以比较大小了。当调用一个一个对象调用该方法与另一个对象进行比较时,obj1.compareTo(obj2)如果返回0表示两个对象相等;如果返回正整数则表明obj1大于obj2,如果是负整数则相反。


 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值