day13_集合

单列集合(collection)

List接口:

1.有序(插入)
2.可以重复
3.有下标

在这里插入图片描述

迭代器

迭代器创建:
通过集合.iterator();创建迭代器。
迭代器.hasnext();方法查找当前位置值是否存在
迭代器.next();查找到当前位置值是否存在,并将迭代器游标后移一位
迭代器迭代完成之后,迭代器的位置在最后一位。 所以迭代器只能迭代一次

ArrayList集合

List集合实际上就是在Collection接口的基础上增加了一些带下标索引的方法
[ArrayList其底层实现使用数组]

list.add(5,“熊大”);//集合指定位置添加元素
list.set(1, “可丽”);//修改指定下标位置上的元素
list.remove(0);//删除指定下标位置上的元素
list.get(4);//获取指定下标位置上的元素
list.indexOf(“ikun”);//查找元素所在的下标,不存在返回-1

遍历集合
* 1.通过迭代器遍历
* 2.通过for循环,和size()方法
* 3.通过增强for循环forech
* for(遍历类型 任意变量名:集合|数组){}
for (String e : list) {
System.out.println(e);
}

泛型

泛型:参数化类型 [JDK1.5之后]
泛型的作用实际上就是将类型转换的检查提前到了编译期
泛型擦除: [JDK1.7之后]
集合类型<泛型> 变量名 = new 集合类型<>();

LinkList集合

常用的方法与ArrayList一致。自己独有一些向首尾添加移除等方法(可以模拟对列、堆栈等数据结构)

//可以模拟队列结构(先进先出)
list.offer(“尾巴”);//在队列的尾部添加元素
list.peek();//获取队列头部元素(不删除)
list.poll();//获取队列头部元素(删除)
//可以模拟堆栈结构(先进后出)
list.push(“堆”);//向栈中添加元素(压栈)
list.pop();//从栈从取出元素(弹栈)

Set接口

1.无序(插入)
2.不可重复
3.无下标

在这里插入图片描述

HashSet类

特点:无序 (插入顺序),无下标,不可重复。

HashSet 去重原理:
HashSet确定对象是否重复,是先判断hashcode再判断equals,两者都相等则认为是相同对象则不会向HashSet中添加。可以通过重写hashcode和equals方法来改变内部判断。

LinkedHashSet类

特点:有序,无下标,不可重复 。
[与HashSet内的方法一致,去重原理一致]
底层维护了链表结构,实现有序存入。

TreeSet类

特点:无序(有字典顺序),无下标,不可重复。
[与HashSet内的方法一致,采用树的储存结构]

TreeSet类实现了Comparable接口,通过ComparTo方法(返回值为int类型)来对存储的元素进行比较。
1、排序: 返回值大于0升序,返回值小于0降序
2、去重(返回值为0) TreeSet认为返回0,两个对象就是相同的对象

Collections工具类

Collections.reverse() 将集合中的元素反转
Collections.shuffle() 将集合中的元素随机打乱
Collections.sort() 将集合中的元素排序 (必须要实现Comparable接口)

ArrayListLinkedListVector的区别:
ArrayList和Vector底层使用数组实现(增删慢、查询快)
ArrayList是当添加元素的时候,才会扩容数组,默认长度为10, Vector是当创建对象的是,就创建长度为10的数组
ArrayList线程不安全,效率高 Vector是线程安全的,效率低
LinkedList底层使用双向链表实现(增删快、查询慢)

双列集合

定义:即集合中元素由两个部分组成(key-value)
键的特点:无序,无下标,不重复。
值的特点:无序,无下标,可重复。
在这里插入图片描述

HashMap集合

put方法:
一、通过传入的key值,调用hash(key)方法获取随机的hash值。
【第一次创建数组时会扩容16空间的数组】
二、通过获取的hash值与数组长度-1进行与(&)运算,获取一个下标值[这样获取的下标值比较随机,因为在hash(key)方法中会将通过key获取的值进行无符号右移(>>>)16位]
1)若下标所在的位置为null,则直接new一个新的node对象放入当前位置
2)若不为空,判断hash值和equals是否相等:
1.若相等则将之前的值覆盖【返回之前的Vaule值】
2.若不相等:(1)若数组所在位置为红黑树则将newnode对象添加到红黑树上。(2)若数组所在的位置为链表则将newnode对象添加到链表的尾部【这里的链表为单向链表,当链表长度大于8并且数组长度大于64时链表将被转换为红黑树进行储存】
返回值不为null时为oldValue
链表的长度大于8,数组的长度大于64将链表转换为红黑树

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值