Connection 中的List和Set

集合是一种可以存储对象的容器,当然这个容器也是一个对象。和数组相比,集合的优势在于它的长度是可以变化,另外集合

可以存储多个类型的对象,而数组的长度是固定的,只能存储一个类型的元素;但是集合不能存储基本数据类型,而数组却可以。

--------------------------------Collection是Collection系列的根接口

规定了Collection系列的公共的/必须的一些方法和特征。

1、元素可以重复

2、元素是没有顺序的

boolean add(E e)

boolean addAll(Collection<? extends E> c)

void clear()

boolean isEmpty()

Iterator<E> iterator()

获取该集合的迭代器。我们可以通过迭代器获取这个集合中的所有元素。

boolean hasNext()

Object next()

void remove()

指向的是元素的中间,并不是只想元素本身

int size()

Object[] toArray()   -->将集合变为数组

boolean contains(Object o) 

返回集合中是否存在对象o,必须要重写equal()方法

boolean remove(Object o)

移除集合中的对象o,必须要重写equal()方法


--------------------------List   有序的Collection

是有序的Collection,即有下标,所以在Collection的基础上添加了关于下标的方法

void add(int index,E element)

E get(int index)

E remove(int index)

E set(int index, E element)

修改指定的元素

List<E> subList(int formIndex, int toIndex)  

获取子集合

int indexOf(Object o)

获取第一个为o元素的下标

int lastIndexOf(Object o)

获取最后一个为o元素的下标

1、ArrayList 

底层是数组结构,元素有顺序,线程不同步。

查找快,增删慢。容量扩展的规律是50%+1

ArrayList可以存储不规则的元素和相同的元素。

2、LinkedList

底层是链表结构,线程不同步。

查找慢,增删快。增长方式不同于其他。

ArrayList可以的操作,LinkedList都可以。

3、Vector

Vector中所有的方法都是同步的(synchronized)。操作效率低于ArrayList。

Vector的扩展规律为100%+1。

*************************************************************************************************
ArrayList、Vector和LinkedList有何区别
ArrayList底层是数组,增删慢,查找快
是线程不安全的,效率高
LinkedList底层是链表,增删快,查找慢
线程不安全,效率高
Vector底层是数组,增删慢,查找快

线程安全,效率低

*************************************************************************************************


--------------------------Set  无序不可重复的Collection

此方法必须重写equals()和hashCode()

判断元素是否相同的条件是:hashCode()  &&  equals()

boolean containsAll(Connection<?> c)

boolean equals(Object o)

int hashCode()

为什么先比较hashCode?  因为hashCode是数字,比较较快。

1、HashSet  

需要重写hashcode和equals方法,其他和LinkedList一样,没有顺序,没有索引,不能有for方法,但可以用foreach()

2、LinkedHashSet
底层有链表和hashMap组成,链表保证了有序(存储顺序),HaseMap保证了不重复
LinkedHashSet是一个有序不重复的集合
3、TreeSet  有顺序的,不重复Set
TreeSet中的元素需要实现Comparable接口。因为TreeSet元素的大小顺序时时按照CoparaTo方法返回的结果判断的。
使用元素的自然顺序对元素进行排序,或者根据set时提供的Comparator进行排序,具体取决于使用的构造方法。
3.1、自然排序/Comparable接口排序         实现接口
3.2、比较器排序/Comparator排序            构造器里面  匿名内部类
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]和\[2\]提到的异常"java.lang.NoSuchMethodError: org.springframework.data.redis.connection.RedisConnection.set(\[B\[B)V"是由于在使用RedisConnectionset方法时,传入的参数类型不匹配导致的。具体来说,set方法需要传入两个字节数组作为参数,但是在调用该方法时传入的参数类型与方法定义的参数类型不一致,导致了该异常的抛出。 解决这个异常的方法是确保传入set方法的参数类型与方法定义的参数类型一致。可以检查调用set方法的代码,确认传入的参数是两个字节数组,并且参数的顺序与方法定义的顺序一致。如果参数类型不匹配,可以尝试将参数转换为字节数组或者使用其他适当的方法来设置Redis连接的值。 另外,引用\[3\]提到了在Redis使用布隆过滤器的方法,可以使用JReBloom插件或者操作bitmap来实现。但是与引用\[1\]和\[2\]的异常相关的问题与布隆过滤器的使用方法无关,因此在解决异常的过程不需要考虑布隆过滤器的相关内容。 #### 引用[.reference_title] - *1* [NoSuchMethodError: redis.conne.RedisConn.set异常处理办法](https://blog.csdn.net/QF1992113/article/details/114691276)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [NoSuchMethodError: org.springframework.data.redis.connection.RedisConnection.set([B[B)V异常处理办法](https://blog.csdn.net/syc000666/article/details/96852189)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [redis的数据类型](https://blog.csdn.net/weixin_37703281/article/details/103639472)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值