集合框架
ArrayList
和数组的比较
数组存在局限性,引入容器类,容器类的capacity即容量会随着对象的增加增长
ArrayList heros = new ArrayList();
heros.add(new Hero(""));
常用方法
定义数组:ArrayList HERO
增加add
方法一:heros.add(new Hero("hero " + i));把对象加到最后面
方法二:heros.add(3, specialHero);在指定位置加对象
判断是否存在contains
判断对象在不在一个容器中
获取指定位置的对象get
如果输入的下表越界会报错
获取对象所在的位置indexOf
判断对象标准是对象是否相同而不是对象的name是否相同
删除remove
方法一:删除指定位置的对象heros.remove(2);
方法二:删除指定对象heros.remove(specialHero);
替换set
获取大小size()
转换为数组toArray
创建一个hero数组,但是toarray不知道应该转换成什么样的数组,需要传递数组的类型hero类型
把另一个容器的所有内容加进去addAll
hero.addall(anotherheros);hero:第一个数组;anotherhero:第二个数组;
清空 clear
hero.clear();
list接口
ArrayList实现了接口List
常见的写法会把引用声明为接口List类型
import java.util.list
泛型generic
定义
我认为是一种定义类的修饰;泛型在定义过程中如果指定了某一种类型那么就只能放指定类型的东西
泛型的简写
List genericheros = new ArrayList();
jdk7:list generichero2=new arraylist<>()
<>里的hero省略了
泛型的系统学习
集合中的泛型
不使用泛型
在一个数组中有不同的hero类型比如AD以及AP;怎样区分?
在定义的过程中使用泛型。在类型转换的过程中才不会出错
使用泛型
再添加数据的过程中只允许一种数据类型添加
子类对象
如果泛型定义的是hero那么hero 的子类都可以放进去ADhero,APhero但是其他就放不进去了
支持/不支持泛型的类
支不支持使用泛型主要区别我认为是减少代码的工程量以及让数据类型更加的明确
在类的声明上加上一个<T/其他都可以>,表示该类型支持泛型
通配符
?extends
该类及其子类
取出的时候可以转换成hero,但是不能往里面放东西类型会不满足;放AD不满足AP;放AP不满足AD
?super
该类及其父类
可以添加hero以及hero的子类
取出的时候有风险
泛型通配符?
?代表任意泛型
取出来只能取object
不能够加入
总结
取、不加:?extend
加、不取:?super
取、加:不能用?
泛型转型
对象转型
子类转父类一定成功
子类泛型转父类泛型:不成立
遍历
for循环
+get();add()方法
迭代器
使用迭代器Iterator遍历集合中的元素
增强for循环
其他集合
linkedlist
先进先出:队列queue
先进后出:栈stack
1、list接口
2、双向链表deque,链表接口
3、queue接口
offer在最后面添加元素
poll取出第一个元素
peek查看第一个元素
二叉树
hashmap
键值对
hashmap存储的是键值对
定义和使用:
键不可以重复但值可以重复
hashset
元素不能重复
没有顺序
没有按照元素的插入顺序排序
遍历
不提供get,采用迭代器或者增强for循环
增强for循环:
for(integer i: numbers){
system.out.println(i);
}
hashset和hashmap的关系
collection
是一个接口
collections
是一个类
collections.reverse();
数组反转
collections.shuffle();
数组打乱混淆
collections.sort();
对数组进行排序(从小到大
collections.swap(a,1,2);
对数组某两个位置进行交换
collections.rotate(a,2);
将数组中的数据向右滚动某个单位长度
collections.synchronizedlist();
把非线程的数组转换成线程安全的数组
关系和区别
arraylist 和 hashset
ArrayList: 有顺序
HashSet: 无顺序
List中的数据可以重复
Set中的数据不能够重复
arraylist 和 linkedlist
即:数组和链表的区别
hashmap和hashtable
区别1:
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类
几种set
HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序
其他
hashcode原理
比较器
comparator
提供按某种属性的排序;多个属性存在时可以分开排序
comparable
接口
聚合操作
map和hashtable
区别1:
HashMap可以存放 null
Hashtable不能存放null
区别2:
HashMap不是线程安全的类
Hashtable是线程安全的类
几种set
HashSet: 无序
LinkedHashSet: 按照插入顺序
TreeSet: 从小到大排序
其他
hashcode原理
比较器
comparator
提供按某种属性的排序;多个属性存在时可以分开排序
[外链图片转存中…(img-qCq5w7aR-1626585004233)]
comparable
接口