Java集合看这一系列就够了---3

Java集合看这一系列就够了---2https://blog.csdn.net/weixin_56640241/article/details/121731610icon-default.png?t=LA92https://blog.csdn.net/weixin_56640241/article/details/121731610


一、List接口方法

1.add(int index,Object ele):将ele插入到下标为index处,下标从0开始。

2.addAll(int index,collection eles):从index处将所有的collection插入。

addAll(collection e):默认从尾端插入。

3.int indexOf(Object o):返回o在集合中首次出现的位置,返回int型,没有返回-1.

4.int lastIndexOf(Object obj):返回obj的最后一个位置。

5.Object remove(int index):移除指定index位置的元素,并返回次元素。

remove(Object obj):移除obj元素,返回boolean。

6.set(int index,Object obj)将index处的元素改为obj。

7.List sublist(int fromIndex,int toIndex):返回从fromIndex到toIndex位置的子集合。


二、总结ArrayList常用方法

1.增:add(Object ele);末尾插入

2.删:remove(int index)

3.改:set(int index,Object obj)

4.查:get(int index)

5.插:add(int index,Object ele)

6.长度:size()

7.遍历:①Iterator迭代器②增强for循环代器③普通循环


三、Set接口

1.特点

无序的、不包含相同的元素。添加两个相同的元素到set会操作失败。

2.set接口框架结构

HashSet、LinkedHashSet、TreeSet。

HashSet:作为Set接口的主要实现类,线程不安全的,可以存储null值。

LinkedHashSet:作为HashSet的子类,遍历其内部数据时,可以按照添加的顺序遍历。

TreeSet:底层使用红黑树,可以按照添加对象的指定属性,进行排序。

3.无序、不可重复的理解

①无序性:

Set接口中无额外定义的方法,与Collection中方法一致。

无序性不等于随机性。以HashSet为例:存储的数据在底层数组中并非按照数组索引的顺序添加。根据哈希值来确定位置。

存储位置不是连续的。

②不可重复性

保证添加的元素按照equals()判断时,不能返回true。即相同的元素只能添加一个。

4.Set存储过程以HashSet为例

我们向HashSet中添加元素a,首先调用元素a所在类的HashCode方法,计算元素a的哈希值,接着通过某种算法计中的算出在HashSet底层数组中的存放位置(即索引位置),判断数组此位置上是否已经有元素,如果此位置上没有其他元素,则元素a就添加在该位置,并且添加成功。如果有其他元素在该位置上或存在以链表形式存储的多个元素,则依次比较元素a与其他元素的hash值,如果hash值不同,则添加成功。如果hash值相同,进而调用元素a所在类的equals方法;如果equals返回true,表明有相同的元素,则添加失败;返回false,则成功。

注:HashSet在数组中是以链表形式存储数据的。数组+链表存储数据

JDK7:新的元素a放在数组中,由新的元素指向旧的元素。

JDK8:旧的元素在数组中,指向新的元素。

                7上8下。

总结

Set中增加的元素与所在类中一定要重写HashCode()与equals()方法。重写的HashCode与equals要一致。即相等的对象必须具有相等的三列码。Object类中的hashCode()方法计算两个内容相等的元素会得到不同的HashCode值,因此要重写HashCode。


四、LinkedHashSet

按照添加的顺序来遍历。依然是无序存储。

LinkedHashSet作为HashSet的子类,在添加数据的同时,每个数据还维护了两个引用,记录此数据前一个元素和后一个元素。

优点:经常遍历的话比HashSet要快。


五、TreeSet

1.向TreeSet中添加的数据要求是相同类的对象。

2.两种排序方式:自然排序与定制排序。

自然排序:

TreeSet中判断元素是否一样,要用当前元素所在类中的compareTo()相等返回0,而不再是equals()方法。

定制排序:

Comparator com = Comparator(){
    实现compare();
}
TreeSet set = new TreeSet(com);

compare与compareTo返回值类型为int。1:表示01>02;2:表示01=02;3:表示01<02


六、总结

1.集合Collection中存储的是自定义类的对象,需要重写equals()方法。

        List:equals();

        Set: HashSet与LinkedHashSet:equals(),HashCode();

                TreeSet:compareTo()/compare();

2.ArrayList、LinkedList、Vector异同点?

相同点:都实现了List接口,存储有序的、可重复的数据。

不同点:ArrayList底层使用数组实现,线程不安全;扩容时是1.5倍,经常用。

                LinkedList:底层用链表实现,线程不安全。

                Vector:底层用数组实现,线程安全;扩容时2倍;不常用。

3.Collection常用方法

增:add(Object obj);

删:remove(int index)/remove(Object obj);

改:set(int index,Object obj);

查:get(int index);

插:add(int index,object ele);

长度:size();

遍历:Iterator()、foreach、for

  • 16
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 16
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想进阿里的小菜鸡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值