二维数组
就是数组中嵌套数组,也就是大数组嵌套小数组,但是数组的类型不可更改
定义:
数据类型 变量名;
数据类型[] 数组名; ---一维数组的声明
数据类型[][] 数组名; ---二维数组
数据类型[] 数组名[];
初始化
- 动态初始化: 创建数组对象的时候不赋值,后续赋值
1. 数据类型[][] 数组名 = new 数据类型[一维的长度][二维的长度];
2. 一维的长度:外层数组
3. 二维的长度:内层的每一个小数组
4. 数据类型[][] 数组名 = new 数据类型[一维的长度][];
- 静态初始化:创建数组对象的同时不赋值
数据类型[][] 数组名 = new 数据类型[][]{{1,2,3},{2,3},{4}...};
容器
一般来说,容器就是可以储存多个数据的盒子,它可以根据数据的个数自行进行长短的变化,他只能存引用数据类型
Collection
是一个接口也是容器类的父接口
List有序可重复
Set
无序不可重复
ArrayList
底层实现: 可变数组实现,通过数组的拷贝改变数组的长度动态实现可变
- 优点:做查询效率高
- 缺点:做增删效率低,通过数组拷贝
- 应用: 大量做查询,少量做增删的时候推荐使用ArrayList
- 扩容:每次扩容原容量的1.5倍(newCapacity = oldCapacity + (oldCapacity >> 1); ) ,使用 Arrays.copyOf进行数据的拷贝
Vector 向量
与ArrayList像,都是由数组实现内部存储结构
- 区别:早起jdk版本提供,后续jdk版本推荐ArrayList代替Vector
- Vector线程安全,效率较低,ArrayList线程不安全,效率较高,重效率轻安全
扩容:每次扩容原容量的2倍,没有ArrayList节省空间
LinkedList
- 底层:双向链表实现
- 优点:增删效率高
- 缺点:查询效率低
注意:容器中只能存放引用数据类型的数据,会发生自动拆装箱,不需要我们手动控制,已经为所有的基本数据类型提供了对应的包装类型
list
接口为提供了一些有关于索引操作的功能,接口的实现类都具有一些功能
创建:
ArrayList() 内部空数组,第一次添加数据时构建10个大小
ArrayList(int initialCapacity) 创建指定大小的容器,当能够确定数据多少的时候,推荐使用,效率更高
构造一个具有指定初始容量的空列表。
Map
存储的每一个数据都是k-v组成
- k 无序的,不可重复–>Set集合
- v 无序的,可重复 -->Collection集合
key和value之间存在映射关系,根据key获取value - key和value之间存在映射关系,根据key获取value
- 如果存储的数据的时候,key相同的数据value会覆盖
- 遍历
1.keySet() 获取所有的key,返回一个Set集合,然后可以根据key获取value
2.values() 获取所有的value值,返回一个Collection集合
3.entrySet() 返回此映射中包含的映射关系的Set集合
set
里面的数据无序且不重复
4. 遍历:
- 普通for循环
for(int i=0;i<=list3.size()-1;i++){
System.out.println(list3.get(i));
}
- 增强for循环
for(String s:list3){
System.out.println(s);
}
- 迭代器
Iterator<String> it=list3.iterator();
//2.判断是否有下一个元素
while(it.hasNext()){
//3.获取下一个元素 System.out.println(it.next());
}
4 .使用List有的列表迭代器
ListIterator it2=list3.listIterator();
while(it2.hasNext()){
System.out.println(it2.next());
}