包装类
整型
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 中出现的位置
附思维导图: