关于List和Set集合的一些问题

List集合
一.ArrayList是List接口的实现类,底层基于数组实现(有索引),线程不安全,可以存放任意数据类型,任意个数,有序可重复(添加顺序和输出顺序不一样)
其三种遍历方式:
for循环(省略)
foreach循环(省略)
Iterator迭代器( Iterator iterator = 集合名.iterator();
while(iterator.hasNext()){//判断是否有下一个元素
System.out.print(iterator.next()+"\t");
})

二.LinkedList是接口List的实现类,底层基于双向链表实现(无索引),线程不安全,可以存放任意数据类型,任意个数,有序可重复(添加顺序与输出顺序一样)
其三种遍历方式:
for循环(省略)
foreach循环(省略)
Iterator迭代器( Iterator iterator = 集合名.iterator();
while(iterator.hasNext()){//判断是否有下一个元素
System.out.print(iterator.next()+"\t");
})
三.ArrayList与LinkedList区别?
相同点:
都是List接口的实现类, 都是线程不安全的,遍历方式都有三种(普通for循环,foreach,迭代器)
都可以存放任意类型 任意多个数据,有序可重复
不同点:

  1. ArrayList底层基于数组实现,因为具有索引,因此查询速率相对较高,添加和删除效率相对较低,
    是因为在添加的时候需要去判断数组是否需要扩容,如果需要扩容会涉及到数据的拷贝,所以相率相对较低
    ArrayList 支持随机访问,具有索引,是因为实现了RandomAccess接口,RandomAccess相当于是一个表示,
    实现该接口就可以随机访问
  2. LinkedList底层基于双向链表实现,没有索引,但是添加效率相对较高,因为不会涉及到扩容和数据拷贝,
    查询效率相对较低,因为没有索引,因此需要遍历整个链表才能找到对应的数据
    List下面线程安全的类有Vector以及CopyOnWriteArrayList和synchronizedLis

四.HashSet是Set接口的实现类,线程不安全,无序不可重复,可以存放任意数据类型,任意个数
遍历方式: foreach和迭代器,for虚循环不可以
HashSet的去重规则:
不仅仅是通过equals方法,还要根据hashCode共同决定缺一不可
1.如果两个对象比较equal s方法调用虽然相等了,但是还需要比较hashCode
2.如果两个对象使用equals比较不相等那么此时也就没有必要去比较hashCode了
hashcode方法是为了是对象均匀散列的分布在内存之中。
基本数据类型的hashcode就是它本身

五.ThreeSet是Set接口的实现类,线程不安全,有序不可重复,可以存放任意数据类型,任意个数
注意: 如果容器已经存放了一种类型,那么就只能存放同一种类型
遍历方式: 迭代器和foreach
Comparable接口的作用是进行自然排序,定义比较规则
复写comparaTo方法
当返回值为0时,表示两个对象相同,只能放一个进去
但返回值为正数时,按照升序排列
但返回值为负数时,按照降序排列

 Comparator   定制排序
使用一个类实现Comparator接口
复写compara方法在方法中定义比较规则
然后根据比较器创建TreeSet
  当返回值为0时,表示两个对象相同,只能放一个进去
但返回值为正数时,按照升序排列
但返回值为负数时,按照降序排列

六.HashSet与TreeSet的区别?
相同点:
都是Set接口的实现类,都是线程不安全的,遍历方式有两种(foreach,迭代器)
都可以存放任意类型任意多个数据,但是TreeSet在放入1种类中的数据之后,就不能够再放其他类型的数据
不同点:
HashSet无序不可重复
判断不可重复的规则:
根据存放对象的equals方法与hashCode方法共同决定
TreeSet有序不可重复:
判断不可重复的规则:
默认是根据自然排序,即存放的元素要实现Comparab1e接口覆写compareto方法,在方法中定义比较规则
也可以使用定制排序比较器,需要单独使用一个类实现Comparator接口覆写compare方法在方法中定义比较规则

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值