《Java核心技术 卷1 基础知识》
具体的集合
上图主要展示了Java类库中的集合,并简要介绍了每个集合类的用途(不包括线程安全集合)
在Java中,所有链表(linked list)实际上都是双向链表,在链表中进行删除或者插入元素是非常简单的事情
但Java中的LinkedList不需要像之前在数据结构上学的那样将指针绕来绕去
LinkedList的add方法将对象添加到链表的尾部,若是需要在中间插入元素:
List<String> staff = new LinkedList<>();
staff.add("Amy");
staff.add("Bob");
staff.add("Carl");
ListIterator<String> iter = staff.listIterator();
iter.next();//将指针指向第一和第二个元素中间
iter.add("Juliet");//在第二个元素之前添加“Juliet”
若是删除元素则是利用Iterator接口的remove方法
LinkedList类实现了List接口,而ArrayList类也是实现了List接口,从这可以看出Java类名的定义的含义
ArrayList封装了一个动态再分配的对象数组,但Vector类也能实现该功能
但Vector类的所有方法都是同步的,是线程安全的,而ArrayList方法不是同步的,即非线程安全
若是单线程访问则推荐使用ArrayList类,因为相比之下,ArrayList更快
在Java中,散列表使用链表数组实现。
Java集合类库中,提供了一个HashSet类,它实现了基于散列表的值,用add方法添加元素
contains方法快速地查看是否某个元素已经出现在集合中
当不关心集合中的元素顺序时才应该使用HashSet
树集是一个有序集合。
SortedSet<String> sorter = new TreeSet();
sorter.add("Bob");
sorter.add("Aamy");
sorter.add("Carl");
for(String s:sorter) System.out.println(s);
每个值将按照顺序打印出来:Amy Bob Carl。直观上看,集合里的元素可以自动排序(由小到大)
排序是用树结构完成的,当前实现用的是红黑树
要使用树集,必须能够比较元素
队列:可以在尾部添加元素,在头部删除元素
有两个端头的队列,即双端队列,可以在头部和尾部用时进行插入或者删除元素
优先级队列中的元素可以按照任意的顺序插入,却总是按照排序的顺序进行检索
也就是说,无论何时调用remove方法,总会获得当前优先级队列中最下的元素
优先级队列并没有对所有的元素进行排序,因为使用了堆(最小堆)这一数据结构来实现
映射用来存放键值对。如果提供了键,就能找到值
Java中提供了两个映射的通用实现:HashMap和TreeMap。这两者都实现了Map接口
HashMap对键进行散列
TreeMap是用键的整体顺序对元素进行排序,并将其组织成搜索树
键是唯一的,不能一个键存放两个值,如果对同一个键两次调用put方法,第二个值会取代第一个值
remove方法用于从映射中删除给定键对应的元素,size方法用于返回映射中的元素数
1.HashTable类
HashTable类与HashMap类的作用一样,实际上它们拥有相同的接口,但HashTable与Vector类一样是同步的,即线程安全的
2.枚举
遗留集合使用Enumeration接口对元素顺序进行遍历。
该接口有两个方法:hasMoreElements和nextElement。
3 属性映射
属性映射是一个类型非常特殊的映射结构。
4 栈
从1.0版本开始,标准类库中就包含了Stack类,有push和pop方法
还有peek方法,返回栈顶元素却不弹出
5 位集
Java的BitSet类用于存放一个位序列。
如果需要高效地存储位序列(例如,标志)就可以使用位集。
原文:https://www.cnblogs.com/ASE265/p/12245743.html