容器(集合框架):
容器:承载其他对象的对象
父类接口:Collection
子类接口:List、Set
实现List接口的常用类:
1.ArrayList
底层实现是一个数组,使用连续内存,可以实现随机存取
2.LinkedList
底层实现是一个双向循环链表,可以使用碎片内存,不能随机存取,但是增删元素只需要修改引用即可,所以增删元素时有更好的性能。容器里放的是对象类型的引用,放不了基本数据类型
所以想容器中添加基本数据类型时会自动装箱(auto-boxing)
自动装箱:就是将基本数据类型处理成对应的包装类型
基本类型 ---> 包装类型
byte ---> Byte
short ---> Short
int ---> Integer
long ---> Long
float ---> Float
double ---> Double
char ---> Character
boolean ---> Boolean
public static void main(String[] args) {
Object object1 = 100;//自动装箱
System.out.println(object1.getClass());
Integer object2 = (Integer) object1;
int a = object2;//自动拆箱
int b = (Integer) object1;
System.out.println(a);
System.out.println(b);
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
//自动装箱int ---> Integer对象
list.add((int) (Math.random() * 20));
}
for (Integer x : list) {
//自动拆箱(auto-unboxing)Integer对象--->int
if (x > 10) {
System.out.println(x);
}
}
}
泛型参数:
从Java 5开始容器可以指定泛型参数来限定容器中对象引用的类型
从Java 7开始,构造器后面的泛型参数可以省略 - 钻石语法
List<String> list = new ArrayList<>();容器的遍历:
1.for-each
list.forEach(System.out::println);
forEach方法的参数可以是方法引用也可以是Lambda表达式
list.forEach(e -> {
System.out.println(e.toUpperCase());
});
2.for循环
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
3.迭代器(Iterator)
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
- 容器中的一些方法
1.添加
list.add("apple");
2.根据指定参考系删除所有
list.removeAll(temp);
3.根据指定的参考系保留所有
list.retainAll(temp);
4.清空
list.clear();