Collection接口(Collections)--List(ArrayList、LinkedList )--Set(HashSet、LinkedHashSet、TreeSet)

包装类

整型

Byte b = new Byte((byte)111);
Short s = new Short((short)111);
Integer i = new Integer(111);
Long l = new Long(23);
Long l1 = 1l;
Long l1 = 1;会报错

浮点型

Float f = new Float(2);
Float f1= 2f;
Float f1=3.2会报错
Double d = new Double(2);
Double d1 = 2d;
Double d1 = 2;  报错
Double d1 = 2.2; 不报错

字符型

Character c = new Character('a');

布尔类型

Boolean flag = new Boolean(false);
Boolean flag1 = true;

转换
1.装箱

Byte b2=Byte.parseByte("112");
parseByte()转成基础数据类型

2.拆箱

byte b2=Byte.valueOf("112");
valueOf()  转成类型

**

List列表接口

**
** ArrayList类**

 ArrayList<String> list = new ArrayList<>();

ArrayList类的基础操作
求长:

 list.size()

定位:

1.list.get(0);
2.list.indexOf("王超")  找不到返回-1
3.list.lastIndexOf("王超")
4.list.contains("王超")

替换:

1.list.add("王伟");
2.list.add(0, "胡超");在0位置插入"胡超";     但角标不连续报错,改变容器长度
3.list.set(0, "王伟");在0位置替换"胡超",原0位置丢失; 若要替换位置无值报错    不改变容器长度
4.remove();
list.remove(0);   把0位置直接删除,后面数据往前挤
list.remove("王超"); 把 "王超" 位置直接删除,但没有这个内容 报错,从左往右移除一个
5.list.removeAll(l);   l是另一个ArrayList   意思是把list 中的l数据全部删除

遍历:

Iterator<String> iterator=list.iterator(); 从容器取迭代器
iterator.hasNext();   判断有没有下一个值
iterator.next();
iterator.remove();

注意:
边删边修改 会报错,list.remove(0);
for循环 报角标越界 迭代器修改报list当前不允许修改,只能用iterator.remove();也是修改的list
重点:
ArrayList 的底层扩容:0–10–15–22–33–49(第一次是默认的10,后面每次扩上次的1.5倍,当放不下再扩容) 只有调用trimToSize()改容量,直接把容量砍到size();后面扩容就再变成上次容量(size())的1.5倍

## LinkedList 类
LinkedList list =new LinkedList<>();
LinkedList 类和ArrayList类的区别:
ArrayList 底层用数组实现的,内存连续 ;查找 取数据快 ;插入删除(存数据)慢
LinkedList 底层用链表(存值和下一个值放在哪)实现的 非物理连续的; 查找 取数组慢 ;插入删除(存数据)快

list 和数组的区别
1.都有角标 都是容器
2.数组不能随意改大小 ,list可以
3.数组可以直接创建相同基本数据类型的数组,list通过泛型(包装类)创建相同基本数据类型的数组
4.数组的大小是固定的,创建时必须声明,但list不是

注意 里氏替换原则:

List<String> list =new LinkedList<>();

Set 接口

HashSet

 HashSet<String> set = new HashSet<>();

求长

set.size();

替换

set.add("aaa");

定位

无一般定位  无get()方法
特殊定位
set.contains("a");
set.isEmpty()

遍历
超级for循环
在这里插入图片描述

迭代器
在这里插入图片描述

考点
底层是一半的HashMap,取HashMap key值部分 Value 给的 null Object
HashSet 是没有顺序的,无get()方法,因为无角标

HashSet 和list 的区别
1.无get()方法,因为无角标
2.HashSet不能放重复的值,可以用来去重
3.不能一个一个拿值
4.只能用高级for循环语句和迭代器全部拿出来

LinkedHashSet

LinkedHashSet<String> set = new LinkedHashSet<>();

HashSet 和LinkedHashSet的区别
1.LinkedHashSet有顺序的,放入的顺序就是拿出来的顺序
2.LinkedHashSet 底层用链表实现的

TreeSet

TreeSet<String> set = new TreeSet<>();

TreeSet和 LinkedHashSet、HashSet区别
1.有顺序 是字典序
2.它可以保存的类型必须实现Comparable方法

注意 里氏替换原则:

Set<String> set = new HashSet<>();

Collections

Collections是set和list 的操作类
Collection 是接口
Collections 不用创建对象
方法:

    Collections.sort(list1);//字典序排序
    Collections.reverse(list1);//逆序
    Collections.fill(list1, "888");//填充
    Collections.copy(list1, list);//复制第二个list内容到第一个,第一个list长度必须长于第二个,否则报错
    Collections.min(list);//返回list 中最小数(字典序)
    Collections.max(list);//返回list 中最大数(字典序)
    Collections.indexOfSubList(list1, list);//list中所有内容     第一次在list1 中出现的位置
    Collections.lastIndexOfSubList(list1, list);//list中所有内容     最后一次在list1 中出现的位置

附思维导图:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值