泛型类型:
泛型就是带一个或多个类型参数的类和接口,在创建泛型类型时可使用菱形语法,即用一对尖括号(<>);
Node<Integer>intNode=new Node<>();
注意:见括号内只能用包装类。
类型参数名使用单个大写字母表示,通常的类型参数名有E(表示元素),K(表示键),N(表示数字),T(表示类型),V(表示值)。
1.泛型方法
带类型参数的方法,类的成员方法和构造方法都可以定义为泛型方法。类型参数的作用域仅限于声明的方法和构造方法内。泛型方法可以为静态和非静态的。
public class Util{
public stastic <T> void swap(T() array,int i,int j){
T temp =array[i];
array[i]=array[j];
array[j]=temp;
}
public static <K,V> boolean compare (Pair<K,V>p1, Pair<K,V> p2){
return p1.getKey().equals(p2.getKey())&&
p1.getValue().equals(p2.getValue());
}
public static void main(String[] args){
Integer[] number={1,3,5,7};
Util.<Integer>seap(number,0,3);
for(Integer n:number){
System.out.println(n+" ");
}
Pair<Integer, String> p1=new Pair<>(1, "apple");
Pair<Integer, String> p2=new Pair<>(2, "orange");
boolean same=Util.<Integer,Sring>compare(p1,p2);
System.out.println(same);
}
}
2.通配符的使用
List<Object> list1=new ArrayList<Object>();
List<String> list2 =new ArrayList<String>();
这里List和Arrays是泛型类接口和泛型类。尽管String是Object的子类,但List<String>与List<Object>却没有关系,List<String>并不是LIst<Object>的子类型。
public static void printList (List<?> list){
for(Object element : list){
system.out.printlin(element);
}
}
问号( ?)就是通配符,表示该方法发可接受的元素是任何类型List对象。
集合:
Collection<E>接口是所有集合类型的根接口,继承了Interable<E>接口。它有三个子接口:Set,List.Queue.Collection接口定义了结合操作的常用方法,这些方法可以简单分为基本操作,批量操作,数组操作和流操作。
1,List接口及实现类
List接口的特点:
①有顺序
②可插入
③可删除
④可通过下表访问元素
2,List的操作
E get(int index):返回指定类型处的元素。
void ass(int undex,E element):将指定元素插入到指定下标。
E remove(int index):删除指定下标处表元素。
int indexOf(Object o):查找指定对象第一次出现的位置。
3,ArrayList类
实现一个变长的对象数组,其元素可以动态的删除和增加。
构造方法为:
ArrayList():创建一个空的数组线性表对象,默认初始值是10;
ArrayList(Collection c)用集合c 中的元素创建一个数组线性表对象;
AyyayList(int initialCapacity)创建一个空的数组线性表对象;
List<String> bigCities=new ArrayLiat<>();
4,遍历集合元素
①使用简单的for循环
for(int i=0;i<bigCities.size();i++){
System.out.print(bigCities.get(i)+" ");
}
②使用增强的for 循环
for (String city:bigCities)
System.out.println(city);
③使用迭代器
Interator iterator=myList.iterator();
while (iterator.hashNext()){
System.out.println(iterator.next());
}
5,数组转换为List对象
java.util.Arrays类提供了一个asList()的方法,实现方法将数组转换成List对象的功能,该方法的定义如下:
public static <T> List<T> asList(T_a)
注意,Arrays.asList()方法返回的List对象是不可变的,如果对该List对象进行添则除多换作.将抛出UnsupportedOperationException异常。如果要实现对List对象的操作,可以将其作为一个参数传递给另一个List的构造方法,如下所示:
List<String>list new ArrayList<>(Arrays,asList (str)):
6,Vector类和Stack类
Vector类和sack类是ay早期版本提供的两个集合类,分别实现向量和对象栈。Vector类和Stack类的方法都是同步内,适合在多线程的环境中使用。
7,Set接口及实现类
Set接口对象类似于数学上集合的概念,其中不允许有重复的元素,Set接口没有定义新的方法,包括从Collection接口继承的方法。
8,HashSet类
HashSet():创建一个空的散列集合,该集合的默认初始容量是16,默认因子是0.75;
HashSet(Collection):用指定的集合C的元素创建一个散列集合;
HashSet(int initialCapacity):创建一个散列集合,并指定集合的初始容量;
HashSet(int initialCapacity,float loadFactor):创建一个散列集合,并指定的集合初始容量和装填因子;
9,TreeSet类
TreeSet实现一种树的集合
E fist();返回一个有序集合中的第一个元素;
E last();返回一个有序集合中最后有一个元素;
10,Queue 接口
Queue接口是Collection的子接口,是以先进先出的方式排列其他元素,一般称为列队;
boolean offer(E e);将指定的元素e插入到队列中;
E poll();返回队列元素,同时将其删除;
E peek();返回队列头元素,但不将其删除;