泛型与集合

泛型类型:

泛型就是带一个或多个类型参数的类和接口,在创建泛型类型时可使用菱形语法,即用一对尖括号(<>);

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();返回队列头元素,但不将其删除;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值