=====泛型=====
一、泛型受限
1、类型通配符上限:类/接口<?extends 实参类型>
要求该泛型的类型只能是实参类型,或者实参类型的子类类型
2、类型通配符下限:类/接口<?super 实参类型>
要求该泛型的类型只能是实参类型,或者实参类型的父类类型
二、泛型擦除
三、泛型数组
public class TestCollection { @Test public void testCollectFor(){ Fruit<String> fruits=new Fruit<>(String.class,5); fruits.put(0,"苹果"); fruits.put(1,"西瓜"); System.out.println(Arrays.toString(fruits.getArry())); } class Fruit<T>{ T[] arry; Fruit(Class<T> clz,int lenth){ //泛型数组的创建 arry= (T[])Array.newInstance(clz,lenth); } public void put(int index,T item){ arry[index]=item; } public T[] getArry(){ return arry; } } }
=====集合=====
二、Iterator()、Iterator、Iterable关系
=====COW容器:CopyOnWrite=====
原理
1、对容器进行一个复制操作,复制出一个新的容器
2、将旧容器的值全部拷贝到新容器
3、新容器长度加1操作
4、add的新元素添加到数组的最后位置
5、将旧容器的地址指向新容器
注意:COW容器不能保证实时性,只能保证最终一致性,即无法立即读取到添加的元素。适合读多写少
主要两个类:
CopyOnWriteArrayList:可重复数据
CopyOnWriteArraySet:不可重复数据
=====jdk8新特性:Stream=====
Stream收集结果转为各个集合
@Test public void streamTest(){ //转为List List<Integer> list = Stream.of(1, 2, 3, 4, 5) .collect(Collectors.toList()); System.out.println(list); //转为Set Set<Integer> set = Stream.of(1, 2, 3, 4, 5) .collect(Collectors.toSet()); System.out.println(list); //转为具体的ArrayList ArrayList<Integer> arrayList = Stream.of(1, 2, 3, 4, 5) .collect(Collectors.toCollection(ArrayList::new)); System.out.println(arrayList); //转为具体的HashSet HashSet<Integer> hashSet = Stream.of(1, 2, 3, 4, 5) .collect(Collectors.toCollection(HashSet::new)); System.out.println(hashSet); //转为Array Object[] array = Stream.of(1, 2, 2, 3, 3, 5).toArray(); System.out.println(Arrays.toString(array)); Integer[] strings = Stream.of(1, 2, 2, 3, 3, 5).toArray(Integer[]::new); System.out.println(Arrays.toString(strings)); }
=====JVM学习=====
堆空间分布情况
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通