Collection集合
32. Collection接口
定义的是所有单列集合中共性的方法
所有的单列集合都可以使用共性的方法
没有带索引的方法
->List接口(1.有序的集合,2.允许存储重复的元素,3.有索引,可以使用for循环)
/ Vector ArraylList LinkedList
Collection接口-
\
->Set接口(不允许存储重复的元素,没有索引)
TreeSet HashSet(无序)-LinkedHashSet(有序)
Collection接口共性的方法:
- bollean add(E e)
- void clear()
- bollean remove(E e)
- bollean contains(E e)
- bollean isEmpty()
- int size()
- Object[] toArray()
33.Iterator接口
迭代:即Collection集合元素的同用户去方式。在取元素之前要判断集合中有没有元素,如果有,就把元素取出来没继续再判断,如果还有就再取出来,一直把集合中的元素全部取出,这种取出方式专业术语叫迭代
两个常用方法
boolean hasNext()
E next()
Collection 接口中有一个方法iterator()这个方法返回的就是迭代器的实现类对象
==增强for循环==
foreach
34. 泛型
是一种未知的数据类型,当我们不知道是用什么数据类型的时候,可以使用泛型
泛型也可以看成是一个变量,来接受数据类型
E e:Element 元素
T t:Type 类型
定义含有泛型的方法:泛型定义在方法的修饰符和返回值类型之间
修饰符<泛型> 返回值类型 方法名 (参数列表(使用泛型)){
}
public <M> void method(M m){
}
gm.methd(10)
//静态
public static <S> void smethod(S s){}
类名.smethod(10)
定义含有泛型的接口
public interface GenericInterface<I>{
public abstract void method(I i);
}
// 第一种使用方式,定义接口的实现类,实现接口,指定接口的泛型
public class GenericInterfaceImpl1 implements GenericInterface<String>{
@Override
public void method(String s){
sout
}
}
//第二种使用方式,接口是用什么泛型,实现类就是用什么泛型
//相当于定义了含有泛型的类,创建对象的时候确定泛型的类型
public class GenericInterfaceImpl2<I> implements GenericInterface<I>{
@Override
public void method(I i){
sout
}
}
泛型的通配符: ?:代表任意的数据类型
不能创建对象使用,只能作为方法的参数使用
//定义一个方法,能遍历所有类型的ArrayList集合
public static void printArray(ArrayList<?> List){
//使用迭代器遍历集合
Iterator<?> it =list.iterator()
while(it.hast()){
Object o = it.next();
}
}
泛型的上限限定和下限限定
泛型的上限限定:? extends E 代表使用的泛型只能是E类型的子类/本身
泛型的下限限定:? super E 代表使用的泛型只能是E类型的父类/本身
//泛型的上限:此时泛型?必须是Number类型或者Number类型的子类
public static void getElement1(Collection<? extends Number> coll){}
//泛型的下限:此时泛型?必须是Number类型或者Number类型的父类
public static void getElement2(Collection<? super Number> coll){}
HashSet存储自定义类型元素
set集合报错元素唯一:
存储的元素必须重写hashCode和equals方法
35. 可变参数
当方法的参数列表数据类型已经确定,但是参数的个数不确定,就可以使用可变参数
修饰符 返回值类型 方法名(数据类型...变量名){}
原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组来存储这些参数
public static int add(int...arr){
int sum = 0
for(int i:arr){
sum+=i
}
return sum
}
- 一个方法的参数列表只能有一个可变参数
- 如果方法的参数有多个,那么可变参数必须写在参数列表的末尾
36. Collections
是集合工具类,用来对集合进行操作
- public static <T> boolean addAll(Collection<T> c, T... elements):忘记和中添加一些元素
- public static void shuffle(List<?> list):打乱集合顺序
- public static void sort(List<?> list):将集合中元素按照默认规则排序
- 使用前提,必须重写 compareTo()方法
- public static <T> void sort(List<T> list, Comparator<? super T>):将集合中元素按照指定规则排序
- Comparable:自己(this)和别人比较,自己需要实现Comparable接口,重写比较规则的compareTo方法
- Comparator:相当于找一个第三方的裁判,比较两个
Collections.sort(list01, new Comparator<Integer>(){
@Override
public int compare(Integer o1,Integer o2){
return o1-o2
}
}
37. JDK9对集合添加的优化
java 9 添加了几种几何工厂方法,更方便创建少量元素的集合、map实例.新的List、Set、Map的静态工厂方法可以更方便地创建集合的不可变实例
List、Set、Map接口里边增加了一个静态方法of,可以个自己和一次性添加多个元素
==static <E> List<E> of (E... elements)==
适用前提:
- 当集合中存储的元素的个数已经确定了,不再改变时使用
==注意==:
- of方法只适用于List接口,Set接口,Map接口,不适用于接口的实现类
- of方法的返回值是一个不能改变的集合额,集合不能再使用add,put方法添加元素,会抛出异常
- Set接口和Map接口在调用of方法的时候不能有重复的元素,否则会抛出异常
网友评论