1.集合
(1)集合:同一类事物放在一起组成了集合。(引用数据类型,这是和数组最大的区别)
(2)集合:Collection(接口)父类时Iterable(接口:功能是集合的迭代遍历)
(3)集合的分类:
① List(接口): 有序可以重复:常见的实现类:ArrayList(数组实现) LinkedList(链表实现)
② Set(接口):无序不可重复 常见的实现类:
2. ArrayList:
实现了List接口(List继承了Collection接口)
补充: 一个类实现了一个接口,那么我们就要重写这个接口里的(抽象)方法 ,也就是说,接口里的方法是大家都有的。
集合里面的方法:主要是增删改查。
1.ArrayList: 书写格式:
(1)ArrayList<0bject><>放的就是泛型,指的就是集合里面放入的数据类型
(2)泛型的好处:
省去了从集合中取出数据时的强制类型转换。
加了泛型,就会要求我们放入数据的时候,只能放入该数据类型的数据,那么取出来的时候也是这种数据类型
<> 放我们指定的数据类型
(1)0bject: 是所有类的父类
(2)ArrayList:
① 底层是数组(Object[])
② ArrayList 元素个数 size()方法
③ 增(添加):add(元素)
④ 删(删除):remove(索引):删除指定索引位置的元素
remove(元素):删除第一次出现的元素
⑤ 改(修改):set(索引,元素)
⑥ 查(查询):get(索引)
⑦ 底层是数组:数组的长度和size不是一回事,如果size()小于数组长度,之家将元素放入到数据里面。如果等于数组长度,会自动扩容。
(1)ArrayList和InkedList区别:
(1)底层数据结构不一样 数组 链表
(2)ArrayList查询快,增删慢
(3)LinkedList 查询慢,增删快
1.HashSet:无序 (没有索引) 不重复(可以去重)
(1)去重,HashSet开发时候用的较少,一般集合都是用ArrayList,在某种场合下也需要ArrayList去重,可以使用HashSet
2.for和foreach的区别:
(1)for循环可以操作索引,但语法相对复杂
(2)foreach不可以操作索引,但语法相对简单
3.HashSet和HashTable的区别(面试题)
(1)HashSet是线程不安全的,效率高,允许null值
(2)HashTable是线程安全的,效率低,不允许null值
4.HashMap:双列集合
(1)增:map.put(“”,值);
(2)改:map.put(“”,值);
①和增是一样的如果键存在就是修改,反之就是增加
(3)查: get()
(4)删:map.remove
(5)拿到所有键的集合,可以根据键去拿值
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
Set<String> keySet = map .keySet();
for (string key : keySet) {
System.out.println(key+"---"+map .get(key));}
5.Jdk8 HashMap底层是:数组+链表+红黑树(面试题,查)
(1)HashMap负载因子:0.75(元素个数超过数组长度的0.75值时,数组就会双倍扩容)
(2)链表的长度超过8,链表就会变成红黑树,如果链表的长度小于6,红黑树就会转换成链表
(3)HashMap初始容量:16
总结
ArrayList
增删改查 add remove set get
索引也是从0开始,
元素个数 size()
ArrayList和LinkedList的区别
有空翻一下底层的源代码
new IllegalArgumentException("Illegal Capacity: "+initialCapacity); 非法参数异常
HashSet
增强for循环
去重功能 (构造方法里面可以放集合,思路就是先把list转成set去重,然后再转成list)
只有增删,没有改查
HashMap
增删改查 put remove put get (键是唯一的,值可以重复)
jdk8以后,底层是数组+链表+红黑树
负载因子:0.75
链表长度超过8转红黑树,红黑树长度小于6又转化成链表
HashMap初始长度16
泛型
集合里面放数据的时候,可以指定数据类型,这样从集合里面拿出数据的时候就不用做类型转换
Object: 是所有类的父类
//格式
for(数据类型 变量: 集合名称){
使用变量
}
5.Jdk8 HashMap底层是:数组+链表+红黑树(面试题,查)
(1)HashMap负载因子:0.75(元素个数超过数组长度的0.75值时,数组就会双倍扩容)
(2)链表的长度超过8,链表就会变成红黑树,如果链表的长度小于6,红黑树就会转换成链表
(3)HashMap初始容量:16
3.HashSet和HashTable的区别(面试题)
(1)HashSet是线程不安全的,效率高,允许null值
(2)HashTable是线程安全的,效率低,不允许null值