List、set、哈希

一:List

1、集合 根接口:Collcetion

    集合的特点:

        ①存储对象的容器、

        ②集合的长度是可变的,数据的长度是不可变的(声明的时候必须指定数据的长度)

        ③集合中不可以存储基本数据类型,例如 List<int> 是不对的,可以用List<Integer>

2、Collection方法

   ①新增 

    add()  

    addAll(Collection<> c):用于直接把一个list放到另一个list中用

     ②删除

      remove(int index)

      clear():清空list

      ③判断

        contains(Object o): 返回bollean

       ④迭代

 List<String> s = new ArrayList<>();

Iterator<String> it = s.iterator();

while(it.hasNext()){

it.next();

}  

3、数组和集合的区别

①数组存储的的元素数据类型相同,集合可以不同(没加泛型)

②数组的长度是固定的,但集合的长度是可变的

4、list接口的实现类:ArrayList和LinkList的区别

①  ArrayList内部是数组结构的,不同步的,也就是线程不安全的

②LinkList 是链表结构的,不同步的,线程不安全的

区别(面试经常问):

首先,LinkList是链表结构的,例如 a b  c三个元素,每个元素都有一个地址,只要把后一个地址放到前一个元素上就能连起来了。所以,如果在 a b中间新增一个d,只要把d的地址放到a上,把b的地址放到d上就可以了,删除类似。但ArrayList是数组结构的,并且连续,要是在前面当一个,那后面整体都需要后移,如果数据多,效率会非常低。所以 LinkList 适合做增删改。

ArrayList 适合查询,是因为他是连续的,LinkList 不连续,所以ArrayList 快。(具体我也不是很清楚,哈哈)


        

二:list和set区别,以及哈希存在的意义

1、List:有序的,可存重复的数据

    set:无序的,不能存储重复的(所以要存储不可重复的就用set集合)

2、哈希算法

    为什么会出现哈希算法呢???

    set集合怎么实现不可重复呢,可以通过循环遍历然后根据equals判断,但如果要是有1000条,会非常慢。哈希算法就出来了,哈希算法简单的理解为通过某种算法把数据指向一个地址。

    这样,当set新增一条数据的时候,会先去调用Object的hashcode()方法,根据返回的地址去看哈希表中这个位置上有没有元素,如果没有就直接插进去了。如果有呢,再通过equals判断。

    ps:如果两个对象相同,那他们的哈希值肯定相等。但如果两个对象哈希值相等,不一定相同,例如 ab和ba哈希值是一样的,但内容不同。

    

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值