Java入门:集合

2018-12-17  本文已影响7人  我的袜子都是洞

集合

所谓集合,就是来保存,装数据,也可称为容器类。
集合中的类在java.util包下。
Java的集合框架提供了操作一组数据的很多方法,这些方法可以直接调用。
在Java2的Collections框架中,主要包括4个接口及其扩展和实现类。

分类

Collection(一组对立的元素)

每个位置只能保存一个元素

Collection
Collection是集合体系中最顶层、最基本的接口,可以使用foreach进行遍历,还有迭代器iterator()方法进行遍历。

Set
实现Collection接口,不能包含重复的元素。
equeals()方法:判断两个对象是否相同,新加入的元素和已有元素相比,返回false,否则拒绝添加。

HashSet
使用Hash算法来储存元素,具有良好的存取和查找性能。根据元素的Hashcode值决定元素在Hashset的位置。

LinkedHashSet
也是利用Hashcode决定元素储存位置,但是使用链表维护元素的次序。当遍历的时候,是按照插入的顺序遍历的。
LinkedHashSet需要维护元素的插入顺序,因此性能会略低于HashSet的性能,但是在迭代访问所有元素时性能很高。(链表适合遍历)

SortedSet
排序,插入的元素类型需要一样,否则会出现ClassCastException错误

TreeSet
SortedSet的实现类,保证元素处于排序状态

EnumSet
为枚举类设计的集合类

List
有顺序,可重复,因此可以通过索引来指定位置的集合元素

ArrayList
给予数组的List,封装了动态增长的Object[]数组

Vector
和ArrayList几乎一样,比较古老,线程安全

Stack
是Vector的子类,是的结构(后进先出)

LinkedList
实现List,Deque;实现List,可以进行队列操作,可以通过索引来随机访问集合元素;实现Deque,也可以当作双端队列,也可以当作栈来使用。

Queue(队列)
Queue内部是队列的数据结构(先进先出),新插入的元素会在尾部;插入之后,慢慢向顶部移动。

PriorityQueue(优先级队列)
除了实现Queue接口,PriorityQueue还对插入的元素进行重新排序

Deque
双端队列,Deque可以从两端来添加,删除元素,因此,Deque可以当作队列使用,也可以当作栈使用

ArrayDeque
给予数组的双端队列,和ArrayList类似,底层都是采用一个动态可分配的Object[]数组

Map(键值对)

可以通过键(key)来找值(value)

Collection

定义了以下常用的方法:

Collection的实现类能够实现以下功能:

Iterator迭代

不论Collection的实际类型如何,他都支持一个iterator()方法,该方法返回一个迭代子,即对应的Iterator(实现类)对象,使用该迭代子即可逐一访问Collection中的每一个元素。

接口Iterator可实现对集合元素的遍历,有3个方法:

使用迭代函数的步骤:

  1. 调用类集的iterator()方法获得迭代子实例
  2. 建立一个调用haxNext()方法的循环,只要hasNext()返回true,就进行循环迭代
  3. 在循环内部,通过调用next()方法来得到每一个元素

一个例子:


迭代

for循环

从J2SE 5.0开始,可以不必使用iterator()了,使用增强的for循环可以直接遍历List所有元素。
就像这样

for循环

List

List接口定义可以重复的元素集合。
List是有序集合,继承了Collection接口并新增了下面一些方法:

List接口主要以下实现类:

List储存结构:

MAP接口

HashMap

HashMap类使用哈希算法实现Map接口。
HashMap类允许空key和空value,不保证元素的顺序。另外HashMap是线程不安全的。

构造函数:

常用方法:

来个HashMap例子:


HashMap

Map迭代

Map.Entry()接口,表示键值对,有两种核心方法:

例子:


大栗子

Hashtable

Dictionary类提供了根据关键字查值的功能。Dictionary是一个abstract的类,因此不直接使用它。直接使用的一般是Hashtable类,Hashtable称为哈希表类,Hashtable也是一个键值对,和HashMap类似。
Hashtable有其独特的迭代方式:
如果要取得并显示哈希表中所有Values,用以下程序:
Enumeration enum = table.elements();
如果要取得并显示哈希表中所有关键字的值,用以下程序:
Enumeration enum1 = table.keys();

示范:


很好的示范

HashtableHashMap的区别:

Properties

Hashtable(哈希表)里存的关键字/值对可以是各种类型。而Properties就相对简单多,因为它只存放字符串对。
PropertiessetProperty()getProperty()方法来处理值,值只能是String
常用方法:

Collections工具类

Collections类中定义了集合操作的相关算法。

排序

List中的对象必须实现Comparator接口,或者显式制定一个比较器。
采用的方法:

查找

上一篇下一篇

猜你喜欢

热点阅读