一、Collection
1. 集合框架
代码语言:javascript
复制Collection
- List
- ArrayList
···
- Set
- TreeSet
···
2. 常用方法
代码语言:javascript
复制① add(E e)
将数据添加到集合。
② remove(E e)
将数据从集合中移除
③ contains(E e)
判断集合中是否包含该数据
④ size()
获取集合的长度
⑤ clear()
清空集合
⑥ toArray()
将集合转为数组
⑦ isEmpty()
判断集合是否为空
⑧ Collections.shuffle(Collection)
将集合乱序排列
3. 迭代器(Iterator)
代码语言:javascript
复制① iterator()
获取迭代器
② next()
获取下一个元素
③ hasNext()
判断下一个元素是否存在
④ 注意
* 迭代器中不允许修改集合长度
⑤ 示例
//创建迭代器
Iterator<String> iterator = coll.iterator()
//判断集合中是否有下一个元素
while (iterator.hasNext()) {
//取出下一个元素,next后移一位
String next = iterator.next();
System.out.println(next);
}
4. 增强for
代码语言:javascript
复制①格式
for(元素的数据类型 变量 : Collection集合/数组){
···
}
② 注意
* foreach 底层也是迭代器故在遍历过程中不能改变集合长度
③ 示例
//增强for循环
for (String s : coll) {
System.out.println(s);
}
5. 示例
代码语言:javascript
复制import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class DemoCollection {
public static void main(String[] args) {
//多态,创建集合
Collection<String> coll = new ArrayList<>();
//添加字符串进集合
coll.add("华为");
coll.add("联想");
coll.add("神舟");
coll.add("小米");
coll.add("中兴");
System.out.println(coll); //[华为, 联想, 神舟, 小米, 中兴]
//创建迭代器
Iterator<String> iterator = coll.iterator();
boolean b = false;
//判断集合中是否有下一个元素
while (iterator.hasNext()) {
//取出下一个元素,next后移一位
String next = iterator.next();
if ("java".equals(next)) {
b = true;
}
}
if (b) {
coll.add("good");
}
//判断是否包含 "华为"
System.out.println(coll.contains("华为")); //true
//移除 "联想"
System.out.println(coll.remove("联想")); //true
System.out.println(coll); //[华为, 神舟, 小米, 中兴]
//增强for循环
for (String s : coll) {
System.out.println(s);
}
//清空集合
coll.clear();
//判断集合是否为空
System.out.println(coll.isEmpty()); //true
}
}
二、泛型
1. 泛型介绍
代码语言:javascript
复制* 泛型是一种未知数据类型,当我们不知道使用什么数据类型是就可以使用泛型;也可以看成是一个变量,用来接收数据类型。
* 泛型避免了类型转换的错误,一旦确定泛型的类型,那么这个类就只能存储这个类型,不需要强转。
* 泛型不能直接 new 对象
* 泛型只能是引用类型
2. 含有泛型的类
代码语言:javascript
复制① 示例
//含有泛型的类
public class Demo<E> {
private E value;
public E getValue() {
return value;
}
public void setValue(E value) {
this.value = value;
}
}
//测试类
public class Test {
public static void main(String[] args) {
//确定泛型
Demo<String> s = new Demo<>();
s.setValue("hello");
System.out.println(s.getValue());
}
}
② 在创建对象是需要确定泛型的类型
3. 含有泛型的方法
代码语言:javascript
复制① 示例
public class Test {
public static void main(String[] args) {
//确定泛型
method(100); //自动装箱 Integer
method("nihao");
method(2.5); //自动装箱 Double
}
//含有泛型的方法
public static <E> void method(E e) {
System.out.println(e);
}
}
4. 含有泛型的接口
代码语言:javascript
复制① 示例
//含有泛型的接口
public interface Demo1<E> {
abstract void method(E e);
}
//第一种方式,在声明时确定泛型
public class Test implements Demo1<String>{
@Override
public void method(String s) {
System.out.println(s);
}
}
//第二种方式,在创建对象时确定泛型
public class Demo2<E> implements Demo1<E> {
@Override
public void method(E e) {
System.out.println(e);
}
}
public class Test{
public static void main(String[] args) {
Demo2<String> d = new Demo2<>();
}
}
5. 泛型通配符
代码语言:javascript
复制① <?>
泛型可以是任意类型
② <? extends E>
泛型是能是E的子类或自己
③ <? super E>
泛型只能是E的父类或自己