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哈希值是一样的,但内容不同。

    

猜你喜欢

转载自blog.csdn.net/vigoss77/article/details/80875091