基础知识巩固四

使用泛型的主要优点是能够在编译时检测出错误

非受限泛型类型<E>和<E extends Object>是一样的

<E extends 父类>为受限泛型,必须为父类的子类型

将一个类定义成泛型:类名<泛型类型>

将一个方法定义成泛型,<E> void 方法名(E e),调用方式:类名.<泛型类型>方法名().

通配泛型:

  1. 无界通配符:<?>
  2. 上界通配符:<? extends E>
  3. 下界通配符:<? super E>

注意:Integer是Object的子类,但T<Integer>不是T<Object>的子类,T<Object>要转换成T<?>才可以

泛型类型的限制:

  1. 不能使用new E()
  2. 不能使用new E[],但可以通过1、E[] element = (E[])new Object[10]规避  2、ArrayList<E>[] list = (ArrayList<E>[])new ArrayList[10]规避
  3. 在静态环境下不允许类的参数是泛型类型
  4. 异常类不能是泛型

java集合框架支持以下两种类型的容器:

  1. 为了存储一个元素集合,简称为集合(Collection)
  2. 存储键/值对,成为图(map)

集合:1、规则集(set)2、线性表(List)3、队列(Queue)

集合框架中所有具体类都实现了Cloneable与Serializable接口

Collection.retainAll(c:Collection<?>)返回boolean值:保留既出现在这个集合中,也出现在指定集合中的元素

 

Set:不允许出现重复的元素

  1. 散列类HashSet:元素没有特定顺序
  2. 链式散列集LinkedHashSet:元素按照插入顺序排列
  3. 树形集TreeSet:元素按照字母顺序排列

数组线性表类:ArrayList,链表类LinkedList

ArrayList.trimToSize()可以将数组容量减小到线性表的大小

 

ListIterator接口扩展了Iterator接口,增加对线性表双向遍历的能力

e.g:ListIterator<Object> list = linkedList.listIterator()

list.hasNext():从前遍历

list.hasPrevious():从后遍历

 

Collections类中提供了用于对线性表进行排序的静态方法

Collections.sort(list)

Collections.reverse(list)

reverseOrder():以逆序对元素排序

copy方法执行的是潜伏之,复制的只是线性表中元素的引用

nCopies(int n,object o):创建一个包含指定对象的n个副本的不可变线性表

fill(List list,Object o):用指定元素替换线性表中所有元素

disjoint(collection1,collection2):如果这两个集合没有相同的元素,返回true,否则false

shuffle()打乱线性表中元素

注意:规则集在性能上要由于线性表

向量类Vector是栈类Stack的父类

 

Stack的方法有(相对重要的):

  1. peek():返回栈顶元素
  2. pop():返回并删除栈顶元素
  3. push():在栈顶增加一个新元素

Queue:

  1. offer():向队列中插入一个元素
  2. poll():获取并删除队列头,如果队列为空,返回Null
  3. remove():与poll相似,但队列为空会抛出异常
  4. peek():获取但不删除队列头,如果为空返回null
  5. element():获取但不删除队列头,如果为空抛出异常

双端队列Deque:

  • addFirst(e)    ,removeFirst();
  • addLast(e)    ,removeLast();

双端队列的父类是Queue,是LinkedList的父类即:Queue<----Deque<----LinkedList

 

图(map):1、HashMap   2、LinkedHashMap   3、TreeMap

keySet():获取一个包含图中键值的规则集

values():获得一个包含图中值的集合

entrySet():返回一个实现MapEntry<K,V>接口的对象集合

除了HashTable具有同步功能之外,它与HashMap的用法是一样的

LinkedHashMap既可按插入顺序排序,也可按最早到最晚的访问顺序排序

 

一个提示点:

在JDK中  Integer.intValue解释的用法是:以int类型返回该Integer的值

也可以用于int和Integer的相互转换

int---->Integer

Integer A = new Integer(3);

Integer  A = Integer.intValue(3);

 

Integer---->int

Integer  A = new Integer(3);

int a = A.intValue();

posted @ 2018-03-11 15:25  PottyHarry  阅读(111)  评论(0编辑  收藏  举报