Java知识点总结(四)泛型和集合

来源:互联网 发布:网络捕鱼游戏原理 编辑:程序博客网 时间:2024/06/05 08:28

四、泛型和集合

参考《Java语言程序设计基础篇第10版》总结

Ctrl+f:适用条件


19..泛型

泛型可以使我们在编译时而不是在运行时检测出错误
GenericStack<Integer> intStack = new GenericStack<>();

泛型方法(静态方法定义):
 public static <E extends GeometricObject> boolean equalArea(E object1, E object2) {    return object1.getArea() == object2.getArea();  }

原始类型

通配泛型

消除泛型和对泛型的限制(19.8    P12):……

20..线性表、栈、队列和优先队列(概述、List、Queue)

java.util包中
Java合集框架:Set(集合)、List(线性表)、Queue(队列);Map(映射表)。
Collection(合集)
(P22)



(1)Collection接口:

注:java.lang.UnsupportedOperationException  P23

Cloneable、Serializable接口:


(2)迭代器:Iterator
也可以foreach循环(foreach循环可用于Iterable的任何实例)
foreach循环隐式地使用了迭代器。

(3)List:允许重复 有序 面向位置

有ListIterator:

①ArrayList

②LinkedList(从线性表两端提取、插入、删除元素的方法)

两种线性表在中间或者末尾位置上插入和删除元素方面具有同样的性能
在起始位置插入删除元素,LinkedList效率高。

(4)Comparator接口:
Comparable接口:compareTo方法
Comparator接口:compare方法 用于比较没有实现Comparable接口的类的对象。
P31

(5)线性表和合集的静态方法:
Collections:

注:从可变长参数表中创建线性表,静态asList方法:
List<String> l1=Arrays.asList("red","green","blue");

(6)(向量类和栈类)Vector、Stack:

Vector:包含访问和修改向量的同步方法,其余与ArrayList一样。

Vector:

Enumeration接口已经被Iterator接口取代。

Stack:


(7)(队列、优先队列)Queue接口、Deque、LinkedList、PriorityQueue:

Queue接口:


Deque接口(双端队列):
两端插入删除

PriorityQueue:
默认:用Comparable以元素自然顺序排序。最小数值元素:最高优先级。相同优先级:任意选一个。

PriorityQueue<String> queue2 = new PriorityQueue( 4, Collections.reverseOrder() );


21..集合和映射表:(Set、Map)

集合(Set):无重复元素
映射表(Map)

(1)Set

无重复元素
散列类:HashSet 链式散列集:LinkedHashSet树形集:TreeSet

Set未引入新常量、方法
AbstractSet实现equals方法、hashCode方法

①HashSet:
默认:初始容量16,负载系数0.75(元素个数超过 容量×负载系数 ,容量自动翻倍)
添加进来的对象要以正确分散散列码的方式实现hashCode方法。
无重复元素(一个元素添加多次,只有一个被存储),无特定顺序(不按照插入顺序)
②LinkedList:
链表
排序 可按照插入集合的顺序提取
(保存了元素插入时的顺序。要强加一个不同的顺序(升序、降序),可以使用TreeSet类)
③TreeSet:
SortedSet:可以确保集合中元素是有序的。
   headSet(toElement) <toElement;tailSet(fromElement) >=fromElement
NavigableSet:扩展SortedSet类,提供导航方法 null

TreeSet:只要对象是可以相互比较的,就可以添加到TreeSet中。
lower("P") :返回小于P的最大元素。
无参构造方法:Comparable接口

注(适用条件):HashSet以一个不可预知的顺序存储元素;LinkedHashSet以元素被插入的顺序存储元素;TreeSet存储已经排好序的元素。

(2)Set和List性能比较:
集合不支持索引,线性表可以。(因为集合中元素无序)

测试一个元素是否在集合或者线性表中,集合比线性表更高效(快得多)。 (contains、remove方法)

(3)Map

不能有重复的键
键:任意类型的对象
(P65)


Map接口:






AbstraMap:
实现了Map中除了entrySet()方法之外的所有方法。



HashMap  LinkedHashMap  TreeMap:

HashMap:定位一个值、插入删除一个条目,高效。
LinkedHashMap:链表 排序( 插入顺序(升序?)、访问顺序(按照元素最后一次被访问的时间从早到晚排序) )
无参构造方法:插入顺序。访问顺序:构造方法LinkedHashMap(initialCapacity,loadFactor,true)
TreeMap:遍历排好顺序的键很高效。
无参构造方法:Comparable接口

SortedMap:确保映射表中条目是拍好序的
NavigableMap:   null

java.util.Hashtable P68

适用条件:




(4)单元素与不可变的合集和映射表:
Collections类静态方法:单元素、不可变 只读























 


原创粉丝点击