13.Java语言Collection集合、泛型
Collection集合
1.集合:
a)集合是一种容器,用来存储数据
b)集合的长度不固定,数组的长度固定
c)Java中定义了很多集合类,用于存储不同数据结构的数据
d)有些数据结构会导致增删慢,改查快,有些相反
e)Java中集合体系图
2.Collection集合:
包名:java.util.Collection
单列集合类的根接口,用于存储一些符合某种规则的元素。
常用方法:
1.增加
a).把给定的元素添加到集合中 public boolean add(E e){}
ArrayList<String> list = new ArrayList<>();
list.add("aaaaa");
2.删除
删除集合中的元素
a).清空集合中的所有元素,public void clear() {}
ArrayList<String> list = new ArrayList<>();
list.clear();
b).删除指定内容 public boolean remove(Object o){}
ArrayList<String> list = new ArrayList<>();
list.remove("ce");
3.判断
a).判断集合是否为空, public boolean isEmpty() {}
ArrayList<String> list = new ArrayList<>();
list.isEmpty();
b).判断集合中是否包含给定的元素public boolean contains(Object o) {}
ArrayList<String> list = new ArrayList<>();
list.contains("ce");
4.获取
a)获取集合中元素的个数,public int size() {}
ArrayList<String> list = new ArrayList<>();
list.size();
b)把集合中的元素,存储到数组中,public Object[] toArray() {}
ArrayList<String> list = new ArrayList<>();
list.toArray();
Iterator迭代器
Iterator接口,java.util.Iterator
public Iterator iterator() : 获取集合对应的迭代器,用来遍历集合中的元素的。
1.Iterator迭代器的使用:
public class CollectionTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("aaaaaa");
//获得迭代对象
Iterator<String> it = list.iterator();
System.out.println(it.next());
}
}
aaaaaa
2.Iterator接口常用方法:
a).public E next() :返回迭代的下一个元素
b).public boolean hasNext() :如果仍有元素可以迭代,则返回 true。
使用next()方法,当没有下一个元素的时候,再次调用就会抛出
java.util.NoSuchElementException没有集合元素的错误
所以会配合hasNext()方法使用,当有元素时才获取下一个元素
1.实现原理
内部采用指针的方式跟踪集合元素,在没有调用next()方法之前,指针指向集合之前,当调用方法后,返回集合的第一个元素并且指针向后移动一个元素。
增强for
增强for循环,也叫foreach循环,专门用来遍历数组和集合中的元素,它的内部原
理其实是个Iterator迭代器,所以在遍历的过程中,不能对集合中的元素进行增删操作
1.for-each循环示例:
public static void main(String[] args) {
//定义一个数组
int[] arrInt = {1,2,123,12,44,23,432};
//使用foreach循环遍历输出
for (int k:arrInt) {
System.out.println(k);
}
//定义一个集合
ArrayList<String> list = new ArrayList<>();
list.add("aaa");
list.add("bbb");
list.add("ccc");
//遍历输出
for (String str:list) {
System.out.println(str);
}
}
泛型
可以在类或方法中预支地使用未知的类型。一般在创建对象时,将未知的类型确定具体的类型。当没有指定泛型时,默认类型为Object类型
1.泛型的好处:
a)当存储不同类型的数据到一个集合中的时候,可以自动检测错误。
b)避免了类型强转的麻烦
2.泛型的定义与使用:
a)含有泛型的类:
修饰符 class 类名<代表泛型的变量> { }
例如,API中的ArrayList集合:
class ArrayList <E>{
public boolean add(E e){ }
public E get(int index){ }
....
}
E是未知的一种数据类型 未来传递什么就是什么类型
使用格式:
创建对象的时候确定泛型的类型
2.含有泛型的方法
修饰符 返回值类型 方法名(参数){ }
例如:
public class MyGenericMethod {
public <MVP> void show(MVP mvp) {
System.out.println(mvp.getClass());
}
public <MVP> MVP show2(MVP mvp) {
return mvp;
}
}
使用格式:
调用方法时确定泛型的类型
3.含有泛型的接口:
修饰符 interface接口名<代表泛型的变量> { }
public interface MyGenericInterface<E>{
public abstract void add(E e);
public abstract E getE();
}
使用格式:
1.定义类的时候确定泛型的类型
2.始终不确定泛型的类型,直到创建对象时,确定泛型的类型
4.泛型的通配符:
可以接收具有任何泛型的集合;<?>
1.泛型的上限 <? extends 类名>
参数只能接收,此类或者此类子(孙)类的集合
2.泛型的下限 <? super 类名>
参数只能接收,此类或者此类父(爷)类的集合
上一篇: java----集合框架和泛型