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